This project is a collaborative scheduling system that allows tutors to manage their availability and students to book time slots with them. The system is designed with functionality for time zone conversion, conflict management, notifications, and comprehensive CRUD operations for tutors, students, bookings, and availability.
- Tutors can set recurring or one-time availability.
- Availability includes time slots with support for time zones.
- Prevents overlapping or double-booked slots.
- Students can view tutor availability by subject and book time slots.
- Automatically converts tutor availability to the student's time zone.
- Ensures no overlapping bookings or conflicting availability slots.
- Logs and sends notifications for booking confirmations and availability updates.
The project supports all CRUD operations for:
- Tutors
- Students
- Bookings
- Availability
- Backend Framework: Flask
- Database: PostgreSQL
- ORM: SQLAlchemy
- Time Zone Management:
pytz
- Frontend Templates: Jinja2 (HTML/CSS)
- Testing: Manual end-to-end testing using local server.
This project includes a set of RESTful APIs to manage the system. These APIs cover the following operations:
- Booking APIs: Create, update, delete, and fetch bookings for students and tutors.
- Availability APIs: Add, update, delete, and view tutor availability with recurrence options (daily/weekly).
- Student and Tutor APIs: Manage student and tutor profiles with full CRUD support.
- Notification API: Log or send notifications for system events.
For a detailed list of endpoints, request formats, and responses, please refer to the API documentation in the root folder.
The database schema includes the following tables:
- Tutors: Stores information about tutors, including their name, email, and subjects.
- Students: Stores information about students, including their name, email, and preferred time zone.
- Availability: Tracks tutor availability, including time slots, time zones, and booking statuses.
- Bookings: Stores booking information, linking students and tutors, with time slot details.
- Notifications: Logs notifications for system events such as bookings and availability updates.
The schema is designed to support one-to-many relationships:
- A tutor can have multiple availabilities and bookings.
- A student can book multiple slots with tutors.
- Clone the repository:
git clone <repository-url>
- Navigate to the project directory:
cd collaborative-scheduling-system
- Set up a virtual environment:
python3 -m venv venv source venv/bin/activate
- Install the required dependencies:
pip install -r requirements.txt
- Set up the PostgreSQL database and update the configuration in
app/__init__.py
. - Run the Flask server:
flask run
- Access the application in your browser at
http://localhost:5000
.
This project was collaboratively developed with the following task distribution:
- Schema Design: We have met together in order to discuss the design in-person.
- API Design: We have met together in order to discuss the API design, however, we split the listing between each other.
- Implementation: We have worked together and implemented 3 API's each.
- Deployment and Testing: We both independently configured the Flask server, integrated PostgreSQL, and performed manual end-to-end testing.
- Presentation: We both have contributed to creating the video demonstration.
The video presentation includes:
- An overview of the database schema and its design rationale.
- A demonstration of the system's features, including tutor availability management, student bookings, and notifications.
- A walkthrough of the collaborative process and task division.