1. Pet Shop Application - Run Spring Boot (main run config)
2. Database - Start database containers
3. Reset Database - Clean volumes and restart (Maven-based, auto-stops)
All use IntelliJ Docker/Spring Boot/Maven integration (Windows/Mac/Linux).
Reset Database uses exec-maven-plugin to run docker compose down -v.
Stops automatically when complete.
- Add spring-boot-starter-test dependency for JUnit Jupiter
- Validate main class exists and matches run config reference
- Validate module name matches pom.xml artifactId
- Validate schema.sql contains active column
- Prevents configuration breakage from refactoring
- Fails with clear messages pointing to which configs need updates
All 5 tests passing.
- Check for 'users' table existence instead of just mysqladmin ping
- Ensures schema.sql has executed before marking as healthy
- Add 40s start_period for initial schema load
- Prevents Spring Boot from connecting to uninitialized database
- updated the fxml file to have the same theming as desktop project
- removed old unused files to project neatness
TODO:
-hook up backend to application
-complete CRUD for each entity
- change text so it uses String.xml values
-add more info to profile if needed
-give pets their own profile
-fix small bug with status bar color not changing
Changes:
- MainLayoutController: Analytics access restricted to ADMIN only
- STAFF users default to Sales view instead of Analytics
- Logo click redirects STAFF to Sales, ADMIN to Analytics
- Analytics button hidden for STAFF users
- LoginController: Added CUSTOMER login rejection with clear message
- CUSTOMER role users are now rejected at login with helpful error
- Directs customers to use web/mobile applications instead
- Configuration cleanup: Removed connectionpetstore.properties from project root
- Config file remains in src/main/resources for proper packaging
- ApiConfig already loads from classpath correctly
These changes ensure proper role-based access control and clean configuration management.
Changes:
- PurchaseOrderResponse: id → purchaseOrderId
- SaleResponse: id → saleId
- DashboardResponse: restructured to use nested SalesSummary and InventorySummary classes matching backend structure
- Added TopProduct and DailySales support
- Inventory DTOs review pending (storeName/reorderLevel fields may need manual UI check)
These changes align desktop response DTOs with backend structural requirements.
- FIXED: ChatService now uses customer.customerId instead of users.id for CUSTOMER role
- getConversations(): Resolve Customer entity to get customerId for filtering
- getConversation(): Verify ownership using customer.customerId
- sendMessage(): Updated signature to accept role parameter for staff assignment logic
- getMessages(): Verify conversation ownership using customer.customerId
- ChatController: Updated sendMessage call to pass user.getRole()
This fixes the domain bug where conversation.customerId (references customer table)
was being incorrectly populated with users.id instead of customer.customerId.
Phase 3B
- Replace firstName and lastName with fullName and email in UserRequest
- Add email and updatedAt to UserResponse
- Update StaffRegisterDialogController to build fullName from firstName + lastName
- Update StaffRegisterDialogController to include email validation and send email
- Update StaffAccountsController to use backend email from UserResponse instead of hardcoding blank
- Remove id field from ProductSupplierResponse
- Rename supplierPrice to cost in ProductSupplierResponse and ProductSupplierRequest
- Update ProductSupplierApi to use composite keys (productId, supplierId) for update and delete
- Update ProductSupplierController delete logic to iterate and delete with composite keys
- Update ProductSupplierController mapping to use getCost() instead of getSupplierPrice()
- Update ProductSupplierDialogController to pass both productId and supplierId to update
- Update ProductSupplierDialogController to use setCost() instead of setSupplierPrice()
- Remove unused selectedId field from ProductSupplierDialogController
- Add customerId to SaleRequest DTO
- Update SaleService to use AuthenticationHelper for employee attribution
- Populate sale.customer when customerId provided in request
- Fix AdoptionController to use authenticated customer instead of hardcoded ID 1
- Fix AppointmentController to use authenticated customer instead of hardcoded ID 1
- Fix RefundController to use authenticated customer instead of hardcoded ID 1
- Update data.sql sales to include customer linkage for refund testing
- Update Postman collection sale creation with customerId and items