Technical Document¶
Introduction¶
The program is composed of different modules, classes, and tools for the software itself to be fully functional. Its components, their relationships, and their features are described in this portion, as well as the dependencies used for optimal end-product utilization.
Database Schema¶
The database schema presents the relationships between the classes (relations) involved in the system’s backend. It also includes the fields of each class and how they interact with other classes.
The following figure shows the initial database schema of the system.
The class diagram abov details objects in the database. It also shows how a booking is created and how it is approved by the mentor. For a reservation to be instantiated, the booking class needs a car, user, mentor, start_time and end_time. Validation for car availability and conflicting bookings is performed in Forms.py and Models.py rather than in the Booking class itself.
Modules¶
Current:
auth
- forms.py
- user registration form
- views.py
- add user(s)
- view user(s)
- models.py
- user attributes reflected in database
- urls.py
- reference for user navigation on the website
reservation
- forms.py
- reservation form
- availability form
- views.py
- add reservation(s)
- view reservation(s)
- show reservation(s) status
- change reservation(s) status
- models.py
- reservation attributes reflected in database
- urls.py
- reference for user navigation on the website
Dependencies¶
Database¶
PostgreSQL (Postgres) - An object-relational database management system (ORDBMS) used to store and retrieve data securely. - The extensibility, reliability, stability, and compatibility of PostgreSQL are the key reasons why it was chosen as the project database server.
Django_post-office¶
- A Django application that queues emails and sends them at user-defined intervals (i.e. every X minutes via cron)
- It provides logging abilities and the ability to view sent emails
- It allows html and plain text email templates to be stored in the database
- https://github.com/ui/django-post_office
Django-Bootstrap-Form¶
- Allows for bootstrap-styled forms without large amounts of css
- Uses filters inside curly braces, i.e. {{ form.car|bootstrap }}
- https://django-bootstrap-form.readthedocs.io/en/latest/#installation
Django-bootstrap3-datetimepicker¶
- A form widget that allows for easy integration of a bootstrap3 datetimepicker
- Used on availability forms, booking forms use (https://github.com/Eonasdan/bootstrap-datetimepicker) instead due to javascript requirements to populate end_time
- https://github.com/inducer/django-bootstrap3-datetimepicker
Bootstrap 3¶
- The majority of the site is styled using bootstrap3, without it the site will not be styled as intended, and functionaility may be impeded