From e47c2a33d73730c84b71b6cf37e7b42579aedc13 Mon Sep 17 00:00:00 2001 From: Peter Vacho Date: Mon, 30 Dec 2024 16:10:24 +0100 Subject: [PATCH] Rework the project description in readme --- README.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 926b8e5..2432960 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,72 @@ -# Backend for the Event Management System project +# Event Management Backend -This project was created as a part of the final assignment for AP7PD, alongside the frontend that is tracked in a separate repository. +The Event Management Backend is a REST API developed using the FastAPI framework. It serves as the backend for the Event +Management System, providing the essential data and functionality for a calendar-based event management application. -This project is also a dependency for the frontend project, which is re-used as the final project for AP7MP as well. +This project was created as part of the final assignment for **AP7PD**, which specifically required a backend +implementation. For **AP7MP**, the focus was on the frontend, however, since the same frontend project is being reused, +this backend is introduced as a dependency. While not formally part of the graded assignment for AP7MP, the backend +plays a crucial role in providing the necessary functionality. -## Description +## Overview / Key Features -This backend facilitates an Event Mangement System application, which is essentially a calendar-like application, where people can track various events. +The backend is designed with robust and secure API functionality to support the Event Management System. It includes the +following key features: -## Technology +- **User Management:** Provides endpoints for user registration and login. Passwords are securely stored as salted + bcrypt hashes, ensuring strong protection against unauthorized access. +- **Token-Based Authentication:** Implements JWT tokens using the Bearer scheme for secure and stateless authentication. + The system supports both access tokens (short-lived, typically one hour) and refresh tokens (long-lived, typically one + month), allowing users to obtain new access tokens without reauthentication. +- **Session and Token Management:** Tokens are server-side validated and tracked in a dedicated database table, enabling + advanced session management features: -The backend uses the [FastAPI](https://fastapi.tiangolo.com/) framework with [Python](https://www.python.org/) 3.12 or -higher. To facilitate MongoDB connection, I will be using the [motor](https://pypi.org/project/motor/) library with -[Beanie](https://beanie-odm.dev/) object-document mapper (ODM). The project will also contain a Dockerfile and a -docker-compose file, which will make starting it very easy and reproducible. + - Invalidation endpoints allow users to revoke access to individual tokens (e.g., in case of a lost device). + - Session endpoints provide details on token creation, expiration, and active sessions + +- **Security-First Design:** Every endpoint includes proper security measures to prevent unauthorized access to user + data. While the architecture is built to potentially allow for future admin-level accounts, no such functionality is + included in this implementation. +- **Category Management:** Users can manage their categories through dedicated endpoints, including creating, viewing, + and deleting their custom categories. +- **Event Management:** Includes comprehensive endpoints for managing events. Events support multiple categories and can + be customized to suit various use cases. +- **Invitation System:** Provides endpoints for inviting users to events. Invitations generate notifications, and + invitees can accept or decline invitations. Accepted invitations automatically add the invitee as an attendee, allowing + events to appear on their calendar. +- **Notification System:** Notifications are produced for specific actions, such as: + + - A user being invited to an event. + - The invitor being notified when the invitee accepts or declines their invitation. Notifications can be retrieved through dedicated endpoints. + - There is currently no support for creating custom notifications (e.g. by an administrator) through endpoints, + however, the project is designed with scalability in mind and support such functionality would be fairly easy to add + in the future, if needed. + +- **Logging Support:** Basic logging functionality records important actions and aids in debugging. While functional, + logging could be expanded for more comprehensive coverage in future iterations. +- **Deployment Ready:** The backend includes a Dockerfile and docker-compose configuration for simple and reproducible + deployment, complete with a MongoDB instance. + +## Technology Stack + +The backend is implemented using the following technologies: + +- **[Python](https://www.python.org/):** Version 3.12 or higher. +- **[FastAPI](https://fastapi.tiangolo.com/):** A modern, fast (high-performance), web framework for building APIs with + Python. +- **[MongoDB](https://www.mongodb.com)**: NoSQL database used to store events, users, and categories. +- **[motor](https://pypi.org/project/motor/):** Asynchronous MongoDB driver for Python. +- **[Beanie](https://beanie-odm.dev/):** An async ODM (Object Document Mapper) for MongoDB with Motor. +- **[Rye](https://rye.astral.sh/):** A dependency management tool for Python. +- **[Docker](https://www.docker.com/):** Used for containerization and deployment. + +## Frontend Integration + +This backend is designed to work seamlessly with the Event Management Frontend, a native Android application written in +Kotlin. The frontend interacts with this backend to manage users, events, attendees, and categories. + +You can find the source code and detailed information about the frontend at: [Event Management Frontend +Repository](https://git.itsdrike.com/ap7pd/event-management-frontend) ## Installation