# yinyinnwel/csmis_team4bit_dat architecture

> Architecture diagram of the GitHub repository yinyinnwel/csmis_team4bit_dat, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/yinyinnwel/csmis_team4bit_dat
- Repository: https://github.com/yinyinnwel/csmis_team4bit_dat

## Overview

CSMIS is a Spring web application for managing staff and lunch operations, restaurant records, and payment vouchers. Users upload staff or door-log data, review lunch transactions, and manage related records; finance users assemble voucher data and request reports. The graph highlights these workflows and the staff/profile, restaurant, dashboard, and reporting capabilities visible in the tree. Edges are limited to relationships shown in excerpts or the SOURCE INDEX; unsampled implementation details and persistence wiring are not asserted.

Main entry points: [`src/main/java/com/dat/bit/csmis/service/StaffService.java`](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/StaffService.java) (Staff services), [`src/main/java/com/dat/bit/csmis/controller/ProfileController.java`](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/ProfileController.java) (Staff profile), [`src/main/java/com/dat/bit/csmis/controller/DashboardController.java`](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/DashboardController.java) (Dashboard), [`src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java`](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java) (Payment vouchers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web workflows"]
  node_staff_ctl["Staff management"]
  node_lunch_ctl["Today’s lunch"]
  node_lunch_list_ctl["Lunch history"]
  node_profile_ctl["Staff profile"]
  node_dashboard_ctl["Dashboard"]
  node_restaurant_ctl["Restaurant management"]
  node_voucher_ctl["Payment vouchers"]
  node_holiday_ctl["Holiday management"]
  node_avoid_ctl["Avoid-meat records"]
end

subgraph group_operations["Staff and lunch"]
  node_staff_service["Staff services<br/>[StaffService.java]"]
  node_staff_detail["Staff details"]
  node_lunch_service["Lunch transactions"]
  node_avoid_service["Avoid-meat services"]
  node_avoid_list_service["Avoid-meat lists"]
end

subgraph group_finance["Restaurants and finance"]
  node_restaurant_service["Restaurant services"]
  node_payment_service["Voucher services"]
  node_report_request["Report request"]
  node_report_data["Report data"]
  node_pdf_report["PDF report view<br/>[PDFReportView.java]"]
end

subgraph group_shared["Shared services and data"]
  node_domain_entities["Domain records"]
  node_mail_service["Email delivery<br/>[MailService.java]"]
  node_pdf_service["PDF generation<br/>[PdfService.java]"]
end

node_user(("Web user"))

node_user -->|"uploads door logs"| node_lunch_ctl
node_lunch_ctl -->|"imports and queries"| node_lunch_service
node_lunch_ctl -->|"loads staff"| node_staff_service
node_lunch_list_ctl -->|"queries transactions"| node_lunch_service
node_staff_ctl -->|"manages staff"| node_staff_service
node_staff_ctl -->|"loads staff details"| node_staff_detail
node_profile_ctl -->|"loads staff"| node_staff_service
node_profile_ctl -->|"updates details"| node_staff_detail
node_profile_ctl -->|"updates preferences"| node_avoid_service
node_profile_ctl -->|"loads avoid-meat list"| node_avoid_list_service
node_dashboard_ctl -->|"loads staff"| node_staff_service
node_dashboard_ctl -->|"loads restaurants"| node_restaurant_service
node_dashboard_ctl -->|"sends notifications"| node_mail_service
node_dashboard_ctl -->|"generates PDFs"| node_pdf_service
node_restaurant_ctl -->|"manages restaurants"| node_restaurant_service
node_restaurant_ctl -->|"loads staff"| node_staff_service
node_voucher_ctl -->|"builds voucher"| node_payment_service
node_voucher_ctl -->|"loads restaurant"| node_restaurant_service
node_voucher_ctl -->|"loads staff"| node_staff_service
node_voucher_ctl -->|"creates request"| node_report_request
node_report_request -->|"sets report data"| node_report_data
node_pdf_report -->|"reads report data"| node_report_data
node_avoid_ctl -.->|"manages preferences"| node_avoid_service
node_holiday_ctl -.->|"handles holiday records"| node_domain_entities

click node_staff_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/StaffController.java"
click node_lunch_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/LunchTodayController.java"
click node_lunch_list_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/AllLunchListController.java"
click node_profile_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/ProfileController.java"
click node_dashboard_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/DashboardController.java"
click node_restaurant_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/RestaurantController.java"
click node_voucher_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java"
click node_holiday_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/HolidayController.java"
click node_avoid_ctl "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/AvoidMeatController.java"
click node_staff_service "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/StaffService.java"
click node_staff_detail "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/StaffDetailService.java"
click node_lunch_service "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/AllLunchListService.java"
click node_avoid_service "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/AvoidMeatService.java"
click node_avoid_list_service "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/AvoidMeatListService.java"
click node_restaurant_service "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/RestaurantService.java"
click node_payment_service "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/PaymentVoucherService.java"
click node_report_request "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/dto/ReportRequestModel.java"
click node_report_data "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/report/ApplicationData.java"
click node_pdf_report "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/report/PDFReportView.java"
click node_domain_entities "https://github.com/yinyinnwel/csmis_team4bit_dat/tree/main/src/main/java/com/dat/bit/csmis/entity"
click node_mail_service "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/mail/service/MailService.java"
click node_pdf_service "https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/pdf/service/PdfService.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_staff_ctl,node_lunch_ctl,node_lunch_list_ctl,node_profile_ctl,node_dashboard_ctl,node_restaurant_ctl,node_voucher_ctl,node_holiday_ctl,node_avoid_ctl,node_user toneBlue
class node_staff_service,node_staff_detail,node_lunch_service,node_avoid_service,node_avoid_list_service toneAmber
class node_restaurant_service,node_payment_service,node_report_request,node_report_data,node_pdf_report toneMint
class node_domain_entities,node_mail_service,node_pdf_service toneRose
```

## Components

### Web workflows

- [Staff management](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/StaffController.java): `src/main/java/com/dat/bit/csmis/controller/StaffController.java`
- [Today’s lunch](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/LunchTodayController.java): `src/main/java/com/dat/bit/csmis/controller/LunchTodayController.java`
- [Lunch history](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/AllLunchListController.java): `src/main/java/com/dat/bit/csmis/controller/AllLunchListController.java`
- [Staff profile](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/ProfileController.java): `src/main/java/com/dat/bit/csmis/controller/ProfileController.java`
- [Dashboard](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/DashboardController.java): `src/main/java/com/dat/bit/csmis/controller/DashboardController.java`
- [Restaurant management](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/RestaurantController.java): `src/main/java/com/dat/bit/csmis/controller/RestaurantController.java`
- [Payment vouchers](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java): `src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java`
- [Holiday management](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/HolidayController.java): `src/main/java/com/dat/bit/csmis/controller/HolidayController.java`
- [Avoid-meat records](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/controller/AvoidMeatController.java): `src/main/java/com/dat/bit/csmis/controller/AvoidMeatController.java`

### Staff and lunch

- [Staff services](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/StaffService.java): `src/main/java/com/dat/bit/csmis/service/StaffService.java`
- [Staff details](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/StaffDetailService.java): `src/main/java/com/dat/bit/csmis/service/StaffDetailService.java`
- [Lunch transactions](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/AllLunchListService.java): `src/main/java/com/dat/bit/csmis/service/AllLunchListService.java`
- [Avoid-meat services](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/AvoidMeatService.java): `src/main/java/com/dat/bit/csmis/service/AvoidMeatService.java`
- [Avoid-meat lists](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/AvoidMeatListService.java): `src/main/java/com/dat/bit/csmis/service/AvoidMeatListService.java`

### Restaurants and finance

- [Restaurant services](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/RestaurantService.java): `src/main/java/com/dat/bit/csmis/service/RestaurantService.java`
- [Voucher services](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/service/PaymentVoucherService.java): `src/main/java/com/dat/bit/csmis/service/PaymentVoucherService.java`
- [Report request](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/dto/ReportRequestModel.java): `src/main/java/com/dat/bit/csmis/dto/ReportRequestModel.java`
- [Report data](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/report/ApplicationData.java): `src/main/java/com/dat/bit/csmis/report/ApplicationData.java`
- [PDF report view](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/report/PDFReportView.java): `src/main/java/com/dat/bit/csmis/report/PDFReportView.java`

### Shared services and data

- [Domain records](https://github.com/yinyinnwel/csmis_team4bit_dat/tree/main/src/main/java/com/dat/bit/csmis/entity): `src/main/java/com/dat/bit/csmis/entity`
- [Email delivery](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/mail/service/MailService.java): `src/main/java/com/dat/bit/csmis/mail/service/MailService.java`
- [PDF generation](https://github.com/yinyinnwel/csmis_team4bit_dat/blob/main/src/main/java/com/dat/bit/csmis/pdf/service/PdfService.java): `src/main/java/com/dat/bit/csmis/pdf/service/PdfService.java`

### Other components

- **Web user**

## Connections

- Web user → Today’s lunch: uploads door logs (evidence: `src/main/java/com/dat/bit/csmis/controller/LunchTodayController.java`)
- Today’s lunch → Lunch transactions: imports and queries (evidence: `src/main/java/com/dat/bit/csmis/controller/LunchTodayController.java`)
- Today’s lunch → Staff services: loads staff (evidence: `src/main/java/com/dat/bit/csmis/controller/LunchTodayController.java`)
- Lunch history → Lunch transactions: queries transactions (evidence: `src/main/java/com/dat/bit/csmis/controller/AllLunchListController.java`)
- Staff management → Staff services: manages staff (evidence: `src/main/java/com/dat/bit/csmis/controller/StaffController.java`)
- Staff management → Staff details: loads staff details (evidence: `src/main/java/com/dat/bit/csmis/controller/StaffController.java`)
- Staff profile → Staff services: loads staff (evidence: `src/main/java/com/dat/bit/csmis/controller/ProfileController.java`)
- Staff profile → Staff details: updates details (evidence: `src/main/java/com/dat/bit/csmis/controller/ProfileController.java`)
- Staff profile → Avoid-meat services: updates preferences (evidence: `src/main/java/com/dat/bit/csmis/controller/ProfileController.java`)
- Staff profile → Avoid-meat lists: loads avoid-meat list (evidence: `src/main/java/com/dat/bit/csmis/controller/ProfileController.java`)
- Dashboard → Staff services: loads staff (evidence: `src/main/java/com/dat/bit/csmis/controller/DashboardController.java`)
- Dashboard → Restaurant services: loads restaurants (evidence: `src/main/java/com/dat/bit/csmis/controller/DashboardController.java`)
- Dashboard → Email delivery: sends notifications (evidence: `src/main/java/com/dat/bit/csmis/controller/DashboardController.java`)
- Dashboard → PDF generation: generates PDFs (evidence: `src/main/java/com/dat/bit/csmis/controller/DashboardController.java`)
- Restaurant management → Restaurant services: manages restaurants (evidence: `src/main/java/com/dat/bit/csmis/controller/RestaurantController.java`)
- Restaurant management → Staff services: loads staff (evidence: `src/main/java/com/dat/bit/csmis/controller/RestaurantController.java`)
- Payment vouchers → Voucher services: builds voucher (evidence: `src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java`)
- Payment vouchers → Restaurant services: loads restaurant (evidence: `src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java`)
- Payment vouchers → Staff services: loads staff (evidence: `src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java`)
- Payment vouchers → Report request: creates request (evidence: `src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java`)
- Report request → Report data: sets report data (evidence: `src/main/java/com/dat/bit/csmis/controller/PaymentVoucherController.java`)
- PDF report view → Report data: reads report data (evidence: `src/main/java/com/dat/bit/csmis/report/PDFReportView.java`)
- Avoid-meat records → Avoid-meat services: manages preferences
- Holiday management → Domain records: handles holiday records
