Files
Krow-workspace/apps/web/dataconnect/connector/assignment/queries.gql

279 lines
5.5 KiB
GraphQL

# ------------------------------------------------------------
# LIST ALL ASSIGNMENTS (admin/debug)
# ------------------------------------------------------------
query listAssignments(
$offset: Int
$limit: Int
) @auth(level: USER) {
assignments(offset: $offset, limit: $limit) {
id
title
status
createdAt
workforce {
id
workforceNumber
staff { id fullName }
}
shiftRole {
id
count
assigned
startTime
endTime
hours
totalValue
role { id name costPerHour }
shift {
id
title
date
location
locationAddress
latitude
longitude
status
order {
id
eventName
business { id businessName email contactName }
vendor { id companyName }
}
}
}
}
}
# ------------------------------------------------------------
# GET ASSIGNMENT BY ID
# ------------------------------------------------------------
query getAssignmentById($id: UUID!) @auth(level: USER) {
assignment(id: $id) {
id
title
description
instructions
status
tipsAvailable
travelTime
mealProvided
parkingAvailable
gasCompensation
managers
createdAt
updatedAt
createdBy
workforce {
id
workforceNumber
status
staff { id fullName }
}
shiftRole {
id
startTime
endTime
hours
totalValue
breakType
uniform
department
role { id name costPerHour }
shift {
id
title
date
location
locationAddress
latitude
longitude
status
managers
order {
id
eventName
orderType
business { id businessName email contactName }
vendor { id companyName }
}
}
}
}
}
# ------------------------------------------------------------
# MY ASSIGNMENTS (by workforceId) - Staff view
# ------------------------------------------------------------
query listAssignmentsByWorkforceId(
$workforceId: UUID!
$offset: Int
$limit: Int
) @auth(level: USER) {
assignments(
where: { workforceId: { eq: $workforceId } }
offset: $offset
limit: $limit
orderBy: { createdAt: DESC }
) {
id
title
status
createdAt
workforce {
id
workforceNumber
staff { id fullName }
}
shiftRole {
id
startTime
endTime
hours
totalValue
role { id name costPerHour }
shift {
id
title
date
location
status
order {
id
eventName
business { id businessName }
vendor { id companyName }
}
}
}
}
}
# ------------------------------------------------------------
# ASSIGNMENTS FOR A VENDOR (Vendor dashboard)
# Approach: filter by workforce.vendorId (relation)
# If Data Connect can't filter nested, use 2-step:
# 1) listWorkforceByVendorId => workforce ids
# 2) assignments(where: { workforceId: { in: [...] } })
# ------------------------------------------------------------
query listAssignmentsByWorkforceIds(
$workforceIds: [UUID!]!
$offset: Int
$limit: Int
) @auth(level: USER) {
assignments(
where: { workforceId: { in: $workforceIds } }
offset: $offset
limit: $limit
orderBy: { createdAt: DESC }
) {
id
title
status
createdAt
workforce { id workforceNumber staff { id fullName } }
shiftRole {
id
role { id name }
shift {
id
title
date
order {
id
eventName
business { id businessName }
vendor { id companyName }
}
}
}
}
}
# ------------------------------------------------------------
# ASSIGNMENTS BY SHIFT ROLE (useful for staffing)
# ------------------------------------------------------------
query listAssignmentsByShiftRole(
$shiftId: UUID!
$roleId: UUID!
$offset: Int
$limit: Int
) @auth(level: USER) {
assignments(
where: {
shiftId: { eq: $shiftId }
roleId: { eq: $roleId }
}
offset: $offset
limit: $limit
) {
id
title
status
createdAt
workforce { id workforceNumber staff { id fullName } }
}
}
# ------------------------------------------------------------
# FILTER ASSIGNMENTS (status + date range)
# Date range is based on Shift.date through the relation (NOT filterable directly).
#
# Since ShiftRole uses a composite key (shiftId + roleId),
# Assignments must be filtered using BOTH fields.
#
# So the filtering flow is:
# 1) Get Shifts in the date range => shiftIds
# 2) Get ShiftRoles where shiftId IN shiftIds => (shiftId, roleId) pairs
# 3) Get Assignments where:
# - shiftId matches
# - roleId matches
# - status matches (optional)
#
# This query represents step 3.
# ------------------------------------------------------------
query filterAssignments(
$shiftIds: [UUID!]!
$roleIds: [UUID!]!
$status: AssignmentStatus
$offset: Int
$limit: Int
) @auth(level: USER) {
assignments(
where: {
shiftId: { in: $shiftIds }
roleId: { in: $roleIds }
status: { eq: $status }
}
offset: $offset
limit: $limit
) {
id
title
status
createdAt
workforce { id workforceNumber staff { id fullName } }
shiftRole {
id
role { id name }
shift { id title date location status }
}
}
}