This document details important information for running, using, and understanding the system.
NOTE: This is the group project for which I (Amanda Erickson) was the team lead. Since the course was experimental (in that we were told to use AI heavily), the process was a bit of a bumpy road. Despite the troubles, I feel like I learned a lot about what works and does not work when leading a team, and have grown as a developer because of it. Reflecting back on this project excites me because I keep thinking of ways to apply what I've learned the next time I have a similar opportunity.
| Name |
|---|
| Amanda Erickson |
| Nisa Tahsin |
| Griffin Costello |
| Anitta Varghese |
| Taqdeer Kaur Sandhu |
- Docker and Docker Compose
- Node.js (for local development)
-
Clone the repository:
git clone <repository-url> cd software-arch-proj
-
Start the application:
docker compose up
-
Access the application: Just go to localhost:3000 on your web browser to begin interacting with the system
- Frontend: http://localhost:3000
- Backend API: http://localhost:4000
-
Troubleshooting: If you are having issues with database inconsistencies/errors, try using these commands:
docker compose down -v docker compose up --build
Please login with one of the following available test users :
| Username | Password | Role |
|---|---|---|
staff |
test123 |
Staff |
staffA |
test123 |
Staff |
registrar |
test123 |
Registrar |
admin |
test123 |
Admin |
All Users:
- User Authentication: Login with any of the three user roles (staff, registrar, or admin)
- User Permission Hierarchy: Admin users can log into registrar and staff accounts, and registrars can login to staff accounts
Staff:
- Room Browsing: View available classrooms by building
- Room Booking: Book classrooms in 30-minute sessions a maximum of 7 days into the future
- View Bookings: View bookings (upcoming, passed, and cancelled), filter by date, cancel bookings, and view booking details
Registrar:
- Classroom & Timeslot Management: Edit classroom information and configure available time slots
- Account Management: Block abusive accounts or manually release bookings
- Statistics & System Logs: View booking statistics, generate reports, and monitor system activity
- Manage Schedule Integrity: View utilization and ensure efficient room usage
Admin:
- System Configuration: Configure system level settings
- Audit Records: View comprehensive audit trails and system records
- System Health: Monitor system performance and health metrics
- Elliot Building
- MacLaurin Building
- Cornett Building
- And many more...
To run the tests navigate to src/backend and src/frontend respectively and run:
npm run testGET /users- List all usersPOST /users/login- User authenticationPOST /booking- Create a new bookingGET /booking- List all bookings
To run in development mode:
npm start
The project directory is organized as follows:
Root/
├── data/
│ ├── uvic_rooms.csv # CSV used to seed rooms
│ └── .gitkeep
├── docker-compose.yml
├── Dockerfile
├── package.json
├── package-lock.json
├── README.md
└── src/
├── backend/
│ ├── .env
│ ├── Dockerfile
│ ├── package.json
│ ├── tsconfig.json
│ ├── schema.sql
│ └── src/ # Main backend source (controllers, services, entities, modules, tests)
│
└── frontend/
├── Dockerfile
├── package.json
├── tsconfig.json
├── README.md
└── src/ # Main frontend source (React app: components, pages, contexts, tests)
Notes:
- backend/src contains the Nest/Node TypeScript application code that runs the backend (controllers, modules, services, entities, DB/data-source, and tests).
- frontend/src contains the React TypeScript application code that runs the frontend (components, pages, contexts, public assets, and tests).
- Each of backend and frontend is self-contained with its own package.json, Dockerfile, tsconfig.json and test folders.
- data/uvic_rooms.csv is used by schema.sql to seed initial room records when the DB container initializes.
- docker-compose.yml wires the three services (frontend, backend, db) for local development.
Done through http fetching and oxios.
Since this system will not be operating like a real booking website, a lot of the system health data is not practical display. The database connection timestamp, number of failed booking attempts, and number of failed requests to the system health are dynamic. The hardcoded elements are:
- API Endpoints status
- Booking Service status
- Error Rate
- Failed Bookings
- System Uptime
One of our team members worked very hard to implement this feature dynamically, however, their implementation unfortunately caused system-wide authentication issues which interrupted the primary purpose of the system, staff booking.
Since we don't have nearly enough time to re-implement the audit logs feature after spending many many hours trying to fix the authentication issues, we have decided to roll back the dynamic implementation in favour of hardcoded data.
A pdf containing the slides from our presentation on programming styles can be found within the "docs" folder here.