From 33b9af8e8b97f866d08e97582035c7da2edf500a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Salazar?= <73718835+joshrs23@users.noreply.github.com> Date: Tue, 13 Jan 2026 13:14:23 -0500 Subject: [PATCH] diagrams for dataconnect --- .../apps_screen_functions_dataconnect.xlsx | Bin 0 -> 14807 bytes docs/backend-diagram/client_app_diagram.mmd | 74 +++++ docs/backend-diagram/dataconnect-schema.mmd | 271 ++++++++++++++++++ .../dataconnect-schemas-mutations-queries.mmd | 124 ++++++++ docs/backend-diagram/staff_app_diagram.mmd | 121 ++++++++ 5 files changed, 590 insertions(+) create mode 100644 docs/backend-diagram/apps_screen_functions_dataconnect.xlsx create mode 100644 docs/backend-diagram/client_app_diagram.mmd create mode 100644 docs/backend-diagram/dataconnect-schema.mmd create mode 100644 docs/backend-diagram/dataconnect-schemas-mutations-queries.mmd create mode 100644 docs/backend-diagram/staff_app_diagram.mmd diff --git a/docs/backend-diagram/apps_screen_functions_dataconnect.xlsx b/docs/backend-diagram/apps_screen_functions_dataconnect.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..aa20de1f69e78526656c93ea284b9285b9680644 GIT binary patch literal 14807 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 y->ulAS^g{4v;NIU|0w{+Z+i3Z! S_client_sign_in_Q["Queries
* user - getUserById
* business - getBusinessesByUserId"] + S_client_sign_in --> S_client_sign_in_F["Firebase
* user - auth"] +end + +subgraph C2["Create account"] + S_client_sign_up["client_sign_up_screen.dart"] + S_client_sign_up --> S_client_sign_up_Q["Queries
* business - getBusinessesByUserId"] + S_client_sign_up --> S_client_sign_up_M["Mutations
* user - createUser
* business - createBusiness"] +end + +subgraph C3["Edit account"] + S_edit_account_na["manual_or_unknown_screen.dart"] + S_edit_account_na --> S_edit_account_na_M["Mutations
* business - updateBusiness"] +end + +subgraph C4["Profile"] + S_client_settings["client_settings_screen.dart"] + S_client_settings --> S_client_settings_Q["Queries
* user - getUserById
* business - getBusinessesByUserId"] +end + +subgraph C5["Hubs"] + S_client_hubs["client_hubs_screen.dart"] + S_client_hubs --> S_client_hubs_Q["Queries
* hub - getHubsByOwnerId"] + S_client_hubs --> S_client_hubs_M["Mutations
* hub - createHub
* hub - updateHub
* hub - deleteHub"] +end + +subgraph C6["Orders"] + S_client_shifts["client_shifts_screen.dart"] + S_client_shifts --> S_client_shifts_Q["Queries
* order - getOrdersByOwnerId"] +end + +subgraph C7["RAPID Order"] + S_rapid_order["rapid_order_flow_page.dart"] + S_rapid_order --> S_rapid_order_M["Mutations
* order - createOrder"] +end + +subgraph C8["One-time Order"] + S_one_time["one_time_order_flow_page.dart"] + S_one_time --> S_one_time_Q["Queries
* role - listRolesByOwnerId"] + S_one_time --> S_one_time_M["Mutations
* position - createPosition
* order - createOrder"] +end + +subgraph C9["Permanent Placement"] + S_permanent["permanent_order_flow_page.dart"] + S_permanent --> S_permanent_Q["Queries
* role - listRolesByOwnerId"] + S_permanent --> S_permanent_M["Mutations
* position - createPosition
* order - createOrder"] +end + +subgraph C10["Recurring Order"] + S_recurring["recurring_order_flow_page.dart"] + S_recurring --> S_recurring_Q["Queries
* role - listRolesByOwnerId"] + S_recurring --> S_recurring_M["Mutations
* position - createPosition
* order - createOrder"] +end + +subgraph C11["Billing"] + S_billing["client_billing_screen.dart"] + S_billing --> S_billing_Q["Queries
* account - getAccountsByOwnerId
* invoice - getInvoicesByOwnerId
* recentPayment - filterRecentPayments"] + S_billing --> S_billing_M["Mutations
* account - createAccount
* account - updateAccount
* account - deleteAccount"] +end + +subgraph C12["Coverage"] + S_coverage["coverage_dashboard.dart"] + S_coverage --> S_coverage_Q["Queries
* order - getOrdersByOwnerId
* shift - filterShifts
* application - getApplicationsByShiftId"] +end + +subgraph C13["Home"] + S_client_home["client_home_screen.dart"] + S_client_home --> S_client_home_Q["Queries
* order - getOrdersByOwnerId
* shift - filterShifts
* application - getApplicationsByShiftId
* recentPayment - filterRecentPayments"] + S_client_home --> S_client_home_M["Mutations
* order - createOrder"] +end diff --git a/docs/backend-diagram/dataconnect-schema.mmd b/docs/backend-diagram/dataconnect-schema.mmd new file mode 100644 index 00000000..b67267f0 --- /dev/null +++ b/docs/backend-diagram/dataconnect-schema.mmd @@ -0,0 +1,271 @@ +erDiagram + User { + String id PK + String email + String fullName + Timestamp createdDate + } + Business { + UUID id PK + String userId FK + String businessName + Timestamp createdAt + } + Vendor { + UUID id PK + String userId FK + String companyName + Timestamp createdAt + } + Staff { + UUID id PK + String userId FK + UUID hubId FK + UUID ownerId FK + String fullName + Timestamp createdAt + } + Shift { + UUID id PK + UUID orderId FK + UUID ownerId FK + ShiftStatus status + Timestamp createdAt + } + Order { + UUID id PK + UUID ownerId FK + UUID hubId FK + OrderStatus status + Timestamp createdAt + } + Position { + UUID id PK + UUID orderId FK + UUID roleId FK + UUID ownerId FK + Timestamp createdAt + } + Task { + UUID id PK + UUID ownerId FK + TaskStatus status + Timestamp createdAt + } + Team { + UUID id PK + String ownerId FK + String teamName + Timestamp createdAt + } + TeamMember { + UUID id PK + UUID teamId FK + UUID hubId FK + String memberName + Timestamp createdAt + } + Hub { + UUID id PK + UUID ownerId FK + String name + Timestamp createdAt + } + Account { + UUID id PK + UUID ownerId FK "polymorphic ownerId" + String bank + Timestamp createdAt + } + Document { + UUID id PK + UUID staffId FK + DocumentStatus status + Timestamp createdAt + } + Certificate { + UUID id PK + UUID staffId FK + CertificateStatus status + Timestamp createdAt + } + Contact { + UUID id PK + UUID staffId FK + String name + Timestamp createdAt + } + BenefitsData { + UUID id PK + UUID staffId FK + String title + Timestamp createdAt + } + Course { + UUID id PK + String title + Timestamp createdAt + } + TaxForm { + UUID id PK + UUID staffId FK + TaxFormStatus status + Timestamp createdAt + } + TimeSheet { + UUID id PK + UUID staffId FK + UUID shiftId FK + TimeSheetStatus status + Timestamp createdAt + } + Invoice { + UUID id PK + UUID ownerId FK + InvoiceStatus status + Timestamp createdAt + } + Assignment { + UUID id PK + UUID staffId FK + UUID ownerId FK + AssignmentStatus status + Timestamp createdAt + } + Conversation { + UUID id PK + String subject + Timestamp createdAt + } + Message { + UUID id PK + UUID conversationId FK + String senderId + Timestamp createdAt + } + Role { + UUID id PK + UUID ownerId FK + String name + Timestamp createdAt + } + RecentPayment { + UUID id PK + UUID payedUserId FK + UUID ownerId FK + RecentPaymentStatus status + Timestamp createdAt + } + RequiredDoc { + UUID id PK + UUID ownerId FK + ReqDocumentStatus status + Timestamp createdAt + } + VendorRate { + UUID id PK + UUID vendorId FK + String roleName + Timestamp createdAt + } + Schedule { + UUID id PK + UUID positionId FK + Timestamp createdAt + } + TaskComment { + UUID id PK + UUID taskId FK + String authorName + Timestamp createdAt + } + TeamHub { + UUID id PK + UUID teamId FK + String hubName + Timestamp createdAt + } + Application { + UUID id PK + UUID shiftId FK + UUID staffId FK + ApplicationStatus status + Timestamp createdAt + } + StaffShift { + UUID id PK + UUID staffId FK + UUID shiftId FK + Timestamp createdAt + } + MemberTask { + UUID id PK + UUID teamMemberId FK + UUID taskId FK + Timestamp createdAt + } + StaffCourse { + UUID id PK + UUID staffId FK + UUID courseId FK + Timestamp createdAt + } + + User ||--|{ Staff : "has profile" + User ||--|{ Vendor : "can be" + User ||--|{ Business : "can be" + User ||--o{ ActivityLog : "generates" + + Business ||--o{ "Order" : "creates" + Business ||--o{ Invoice : "receives" + Business ||--o{ Task : "owns" + Business ||--o{ Hub : "owns" + Business ||--o{ Role : "defines" + Business ||--o{ Shift : "posts" + Business ||--o{ Staff : "employs" + Business ||--o{ Account : "owns" + + Vendor ||--o{ VendorRate : "defines" + Vendor ||--o{ Task : "owns" + Vendor ||--o{ Hub : "owns" + Vendor ||--o{ Role : "defines" + Vendor ||--o{ Shift : "posts" + Vendor ||--o{ Staff : "employs" + Vendor ||--o{ Account : "owns" + + Staff ||--o{ Document : "has" + Staff ||--o{ Certificate : "holds" + Staff ||--o{ Contact : "has emergency" + Staff ||--o{ BenefitsData : "accrues" + Staff ||--o{ TaxForm : "submits" + Staff ||--o{ TimeSheet : "fills" + Staff ||--o{ Assignment : "receives" + Staff ||--o{ Account : "owns" + Staff ||--o{ RecentPayment : "is paid to" + Staff ||--o{ RequiredDoc : "owns" + Staff ||--o{ Application : "submits" + Hub ||--o{ Staff : "is based at" + + Shift ||--o{ TimeSheet : "generates" + Shift ||--o{ Application : "receives" + + "Order" ||--o{ Shift : "contains" + "Order" ||--o{ Position : "requires" + + Task ||--o{ TaskComment : "has" + + Team ||--o{ TeamMember : "has" + Team ||--o{ TeamHub : "operates in" + + Conversation ||--o{ Message : "contains" + + Position ||--o{ Schedule : "has" + Role ||--o{ Position : "is for" + + %% Join Tables + Staff ||--|{ StaffShift : "works" + Shift ||--|{ StaffShift : "is worked by" + Staff ||--|{ StaffCourse : "enrolls in" + Course ||--|{ StaffCourse : "is taken by" + TeamMember ||--|{ MemberTask : "assigned to" + Task ||--|{ MemberTask : "is assigned to" diff --git a/docs/backend-diagram/dataconnect-schemas-mutations-queries.mmd b/docs/backend-diagram/dataconnect-schemas-mutations-queries.mmd new file mode 100644 index 00000000..f241b3a5 --- /dev/null +++ b/docs/backend-diagram/dataconnect-schemas-mutations-queries.mmd @@ -0,0 +1,124 @@ +flowchart LR + subgraph "Profile & Onboarding" + User --> User_Q["Queries
- listUsers
- getUserById"] + User --> User_M["Mutations
- createUser
- updateUser
- deleteUser"] + Staff --> Staff_Q["Queries
- listStaff
- getStaffById
- getStaffByUserId"] + Staff --> Staff_M["Mutations
- createStaff
- updateStaff
- deleteStaff"] + Contact --> Contact_Q["Queries
- listContacts
- getContactById
- listContactsByStaffId"] + Contact --> Contact_M["Mutations
- createContact
- updateContact
- deleteContact"] + AttireOption --> AttireOption_Q["Queries
- listAttireOptions
- getAttireOptionById"] + AttireOption --> AttireOption_M["Mutations
- createAttireOption
- updateAttireOption
- deleteAttireOption"] + end + + subgraph "Compliance" + Document --> Document_Q["Queries
- listDocuments
- getDocumentById
- listDocumentsByStaffId"] + Document --> Document_M["Mutations
- createDocument
- updateDocument
- deleteDocument"] + Certificate --> Certificate_Q["Queries
- listCertificates
- getCertificateById
- listCertificatesByStaffId"] + Certificate --> Certificate_M["Mutations
- CreateCertificate
- UpdateCertificate
- DeleteCertificate"] + TaxForm --> TaxForm_Q["Queries
- listTaxForms
- getTaxFormById
- getTaxFormsByStaffId
- filterTaxForms"] + TaxForm --> TaxForm_M["Mutations
- createTaxForm
- updateTaxForm
- deleteTaxForm"] + RequiredDoc --> RequiredDoc_Q["Queries
- listRequiredDocs
- getRequiredDocById
- listRequiredDocsByUserId"] + RequiredDoc --> RequiredDoc_M["Mutations
- createRequiredDoc
- updateRequiredDoc
- deleteRequiredDoc"] + end + + subgraph "Finances" + Account --> Account_Q["Queries
- listAccounts
- getAccountById
- listAccountsByOwnerId"] + Account --> Account_M["Mutations
- createAccount
- updateAccount
- deleteAccount"] + TimeSheet --> TimeSheet_Q["Queries
- listTimeSheets
- getTimeSheetById
- listTimeSheetsByStaffId"] + TimeSheet --> TimeSheet_M["Mutations
- createTimeSheet
- updateTimeSheet
- deleteTimeSheet"] + RecentPayment --> RecentPayment_Q["Queries
- listRecentPayments
- getRecentPaymentById
- listRecentPaymentsByUserId"] + RecentPayment --> RecentPayment_M["Mutations
- createRecentPayment
- updateRecentPayment
- deleteRecentPayment"] + Invoice --> Invoice_Q["Queries
- listInvoices
- getInvoiceById"] + Invoice --> Invoice_M["Mutations
- createInvoice
- updateInvoice
- deleteInvoice"] + InvoiceTemplate --> InvoiceTemplate_Q["Queries
- listInvoiceTemplates
- getInvoiceTemplateById"] + InvoiceTemplate --> InvoiceTemplate_M["Mutations
- createInvoiceTemplate
- updateInvoiceTemplate
- deleteInvoiceTemplate"] + VendorRate --> VendorRate_Q["Queries
- listVendorRates
- getVendorRateById"] + VendorRate --> VendorRate_M["Mutations
- createVendorRate
- updateVendorRate
- deleteVendorRate"] + CustomRateCard --> CustomRateCard_Q["Queries
- listCustomRateCards
- getCustomRateCardById"] + CustomRateCard --> CustomRateCard_M["Mutations
- createCustomRateCard
- updateCustomRateCard
- deleteCustomRateCard"] + end + + subgraph "Shifts & Work" + Shift --> Shift_Q["Queries
- listShifts
- getShiftById
- filterShifts"] + Shift --> Shift_M["Mutations
- CreateShift
- UpdateShift
- DeleteShift"] + Application --> Application_Q["Queries
- getApplicationById
- listApplicationsByStaffId"] + Application --> Application_M["Mutations
- createApplication
- updateApplication
- deleteApplication"] + StaffShift --> StaffShift_Q["Queries
- getMyShifts
- getStaffShiftById
- getStaffShiftsByShiftId"] + StaffShift --> StaffShift_M["Mutations
- createStaffShift
- updateStaffShift
- deleteStaffShift"] + StaffAvailability --> StaffAvailability_Q["Queries
- listStaffAvailabilities
- getStaffAvailabilityById
- getStaffAvailabilityByStaffId"] + StaffAvailability --> StaffAvailability_M["Mutations
- createStaffAvailability
- updateStaffAvailability
- deleteStaffAvailability"] + Assignment --> Assignment_Q["Queries
- listAssignments
- getAssignmentById
- listAssignmentsByStaffId"] + Assignment --> Assignment_M["Mutations
- CreateAssignment
- UpdateAssignment
- DeleteAssignment"] + Order --> Order_Q["Queries
- listOrders
- getOrderById"] + Order --> Order_M["Mutations
- createOrder
- updateOrder
- deleteOrder"] + Position --> Position_Q["Queries
- listPositions
- getPositionById
- listPositionsByOrderId"] + Position --> Position_M["Mutations
- createPosition
- updatePosition
- deletePosition"] + Category --> Category_Q["Queries
- listCategories
- getCategoryById"] + Category --> Category_M["Mutations
- createCategory
- updateCategory
- deleteCategory"] + Role --> Role_Q["Queries
- listRoles
- getRoleById"] + Role --> Role_M["Mutations
- createRole
- updateRole
- deleteRole"] + RoleCategory --> RoleCategory_Q["Queries
- listRoleCategories
- getRoleCategoryById"] + RoleCategory --> RoleCategory_M["Mutations
- createRoleCategory
- updateRoleCategory
- deleteRoleCategory"] + Schedule --> Schedule_Q["Queries
- listSchedules
- getScheduleById
- getScheduleByPositionId"] + Schedule --> Schedule_M["Mutations
- createSchedule
- updateSchedule
- deleteSchedule"] + Workforce --> Workforce_Q["Queries"] + Workforce --> Workforce_M["Mutations"] + end + + subgraph "Learning" + Course --> Course_Q["Queries
- listCourses
- getCourseById
- filterCourses"] + Course --> Course_M["Mutations
- createCourse
- updateCourse
- deleteCourse"] + Level --> Level_Q["Queries
- listLevels
- getLevelById"] + Level --> Level_M["Mutations
- createLevel
- updateLevel
- deleteLevel"] + StaffCourse --> StaffCourse_Q["Queries
- getStaffCourseById
- listStaffCoursesByStaffId
- listStaffCoursesByCourseId
- getStaffCourseByStaffAndCourse"] + StaffCourse --> StaffCourse_M["Mutations
- createStaffCourse
- updateStaffCourse
- deleteStaffCourse"] + end + + subgraph "Benefits" + BenefitsData --> BenefitsData_Q["Queries
- listBenefitsData
- getBenefitsDataById
- getBenefitsDataByStaffId"] + BenefitsData --> BenefitsData_M["Mutations
- createBenefitsData
- updateBenefitsData
- deleteBenefitsData"] + end + + subgraph "Business & Vendors" + Business --> Business_Q["Queries
- listBusinesses
- getBusinessById
- getBusinessesByUserId"] + Business --> Business_M["Mutations
- createBusiness
- updateBusiness
- deleteBusiness"] + Vendor --> Vendor_Q["Queries
- listVendors
- getVendorById"] + Vendor --> Vendor_M["Mutations
- createVendor
- updateVendor
- deleteVendor"] + Hub --> Hub_Q["Queries
- listHubs
- getHubById"] + Hub --> Hub_M["Mutations
- createHub
- updateHub
- deleteHub"] + end + + subgraph "Teams" + Team --> Team_Q["Queries
- listTeams
- getTeamById"] + Team --> Team_M["Mutations
- createTeam
- updateTeam
- deleteTeam"] + TeamMember --> TeamMember_Q["Queries
- listTeamMembers
- getTeamMemberById
- listTeamMembersByTeamId"] + TeamMember --> TeamMember_M["Mutations
- createTeamMember
- updateTeamMember
- deleteTeamMember"] + MemberTask --> MemberTask_Q["Queries
- getMyTasks
- getMemberTaskById
- getMemberTasksByTaskId"] + MemberTask --> MemberTask_M["Mutations
- createMemberTask
- updateMemberTask
- deleteMemberTask"] + TeamHub --> TeamHub_Q["Queries
- listTeamHubs
- getTeamHubById
- listTeamHubsByTeamId"] + TeamHub --> TeamHub_M["Mutations
- createTeamHub
- updateTeamHub
- deleteTeamHub"] + Task --> Task_Q["Queries
- listTasks
- getTaskById"] + Task --> Task_M["Mutations
- createTask
- updateTask
- deleteTask"] + TaskComment --> TaskComment_Q["Queries
- listTaskComments
- getTaskCommentById
- listTaskCommentsByTaskId"] + TaskComment --> TaskComment_M["Mutations
- createTaskComment
- updateTaskComment
- deleteTaskComment"] + end + + subgraph "Communication" + Conversation --> Conversation_Q["Queries
- listConversations
- getConversationById
- getConversationsByUserId"] + Conversation --> Conversation_M["Mutations
- createConversation
- updateConversation
- deleteConversation"] + Message --> Message_Q["Queries
- listMessages
- getMessageById
- listMessagesByConversationId"] + Message --> Message_M["Mutations
- createMessage
- updateMessage
- deleteMessage"] + end + + subgraph "Others" + ActivityLog --> ActivityLog_Q["Queries
- listActivityLogs
- getActivityLogById
- listActivityLogsByUserId"] + ActivityLog --> ActivityLog_M["Mutations
- createActivityLog
- updateActivityLog
- deleteActivityLog"] + ClientFeedback --> ClientFeedback_Q["Queries
- listClientFeedbacks
- getClientFeedbackById"] + ClientFeedback --> ClientFeedback_M["Mutations
- createClientFeedback
- updateClientFeedback
- deleteClientFeedback"] + FaqData --> FaqData_Q["Queries
- listFaqDatas
- getFaqDataById"] + FaqData --> FaqData_M["Mutations
- createFaqData
- updateFaqData
- deleteFaqData"] + end + + subgraph "Reporting" + Reports --> Reports_Q["Queries
- getCoverageReport
- getNoShowReport
- getSpendReport
- getForecastReport
- getPerformanceReport
- getDailyOpsReport"] + end diff --git a/docs/backend-diagram/staff_app_diagram.mmd b/docs/backend-diagram/staff_app_diagram.mmd new file mode 100644 index 00000000..d251a18e --- /dev/null +++ b/docs/backend-diagram/staff_app_diagram.mmd @@ -0,0 +1,121 @@ +flowchart LR + +subgraph L1["login/create user"] + S_auth_phone["phone_verification_screen.dart"] + S_auth_phone --> S_auth_phone_Q["Queries
* user - getUserById
* staff - getStaffByUserId"] + S_auth_phone --> S_auth_phone_M["Mutations
* user - createUser"] + S_auth_phone --> S_auth_phone_F["Firebase
* user - auth"] +end + +subgraph L2["Profile"] + S_worker_profile["worker_profile_screen.dart"] + S_worker_profile --> S_worker_profile_Q["Queries
* user - getUserById
* staff - getStaffByUserId"] +end + +subgraph L3["Personal info"] + S_personal_info["personal_info_screen.dart"] + S_personal_info --> S_personal_info_Q["Queries
* staff - getStaffByUserId"] + S_personal_info --> S_personal_info_M["Mutations
* staff - UpdateStaff"] +end + +subgraph L4["Emergency Contact"] + S_emergency["emergency_contact_screen.dart"] + S_emergency --> S_emergency_Q["Queries
* contact - getContactsByStaffId"] + S_emergency --> S_emergency_M["Mutations
* contact - updateContact
* contact - createContact
* contact - deleteContact"] +end + +subgraph L5["Experience & skills"] + S_experience["experience_screen.dart"] + S_experience --> S_experience_Q["Queries
* staff - getStaffByUserId"] + S_experience --> S_experience_M["Mutations
* staff - UpdateStaff"] +end + +subgraph L6["Attire"] + S_attire["attire_screen.dart"] + S_attire --> S_attire_Q["Queries
* attireOption - listAttireOptions
* staff - getStaffByUserId"] + S_attire --> S_attire_M["Mutations
* staff - UpdateStaff"] +end + +subgraph L7["Documents"] + S_documents["documents_screen.dart"] + S_documents --> S_documents_Q["Queries
* document - getDocumentsByStaffId"] + S_documents --> S_documents_M["Mutations
* document - updateDocument"] +end + +subgraph L8["Certificates"] + S_certificates["certificates_screen.dart"] + S_certificates --> S_certificates_Q["Queries
* certificate - listCertificatesByStaffId"] + S_certificates --> S_certificates_M["Mutations
* certificate - UpdateCertificate
* certificate - CreateCertificate
* certificate - DeleteCertificate"] +end + +subgraph L9["Tax Documents"] + S_tax_forms["tax_forms_screen.dart"] + S_tax_forms --> S_tax_forms_Q["Queries
* taxForm - getTaxFormsBystaffId"] + S_tax_forms --> S_tax_forms_M["Mutations
* taxForm - createTaxForm
* taxForm - updateTaxForm"] +end + +subgraph L10["KROW University"] + S_uni["krow_university_screen.dart"] + S_uni --> S_uni_Q["Queries
* course - listCourses
* staffCourse - listStaffCoursesByStaffId
* staff - getStaffByUserId
* level - listLevels
* certificate - listCertificatesByStaffId"] +end + +subgraph L11["Trainings"] + S_trainings["trainings_screen.dart"] + S_trainings --> S_trainings_Q["Queries
* course - listCourses
* staffCourse - listStaffCoursesByStaffId"] +end + +subgraph L12["Leaderboard"] + S_leaderboard["leaderboard_screen.dart"] + S_leaderboard --> S_leaderboard_Q["Queries
* staffCourse - missing"] +end + +subgraph L13["Bank Account"] + S_bank["bank_account_screen.dart"] + S_bank --> S_bank_Q["Queries
* account - getAccountsByOwnerId"] + S_bank --> S_bank_M["Mutations
* account - createAccount
* account - updateAccount
* account - deleteAccount"] +end + +subgraph L14["Earnings/Payments"] + S_payments["payments_screen.dart"] + S_payments --> S_payments_Q["Queries
* recentPayment - getRecentPaymentsByPayedUserId"] +end + +subgraph L15["Timecard"] + S_timecard["time_card_screen.dart"] + S_timecard --> S_timecard_Q["Queries
* timeSheet - getTimeSheetsByStaffId"] +end + +subgraph L16["Clock in"] + S_clockin["clock_in_screen.dart"] + S_clockin --> S_clockin_Q["Queries
* application - getApplicationsByStaffId"] + S_clockin --> S_clockin_M["Mutations
* application - createApplication
* application - updateApplicationStatus"] +end + +subgraph L17["Shifts"] + S_shifts["shifts_screen.dart"] + S_shifts --> S_shifts_Q["Queries
* application - getApplicationsByStaffId
* shift - filterShifts
* timeSheet - getTimeSheetsByStaffId"] + S_shifts --> S_shifts_M["Mutations
* application - updateApplicationStatus
* shift - CreateShift
* application - createApplication
* staffShift - createStaffShift"] +end + +subgraph L18["My availability"] + S_availability["availability_screen.dart"] + S_availability --> S_availability_Q["Queries
* staffAvailability - getStaffAvailabilityByStaffId"] + S_availability --> S_availability_M["Mutations
* staffAvailability - updateStaffAvailability
* staffAvailability - createStaffAvailability
* staffAvailability - deleteStaffAvailability"] +end + +subgraph L19["Your Benefits Overview"] + S_benefits["benefits_screen.dart"] + S_benefits --> S_benefits_Q["Queries
* benefitsData - getBenefitsDataByStaffId"] + S_benefits --> S_benefits_M["Mutations
* benefitsData - updateBenefitsData"] +end + +subgraph L20["Home"] + S_home["worker_home_screen.dart"] + S_home --> S_home_Q["Queries
* application - getApplicationsByStaffId
* shift - filterShifts
* benefitsData - getBenefitsDataByStaffId"] +end + +subgraph L21["Shift detail"] + S_shift_detail["shift_details_screen.dart"] + S_shift_detail --> S_shift_detail_Q["Queries
* application - getApplicationsByStaffId"] + S_shift_detail --> S_shift_detail_M["Mutations
* application - updateApplicationStatus"] +end