A universal backend API designed for reservation systems, staff management, and client scheduling.
This project provides a comprehensive and flexible backend solution designed to power scheduling and management applications for a wide variety of service-based businesses. Its universal architecture makes it suitable for organizations like:
-
Sports clubs: managing class schedules, booking courts or facilities, and assigning trainers.
-
Medical clinics: scheduling patient appointments, managing doctor availability, and handling patient records.
-
Wellness centers: booking spa treatments, yoga classes, or consultations.
-
Any business that relies on managing appointments, staff availability, and client reservations.
The API is built to handle complex relationships between companies (or locations), staff members, available services (events), and clients (participants), providing a robust foundation for a custom-tailored front-end application.
The system currently supports the following core functionalities:
-
Staff registration and secure login (JWT-based).
-
Multi-company context switching (staff choose one of their assigned companies).
-
Role-based access control (RBAC) for staff roles (e.g., Manager, Reception employee, Trainer).
-
Company-scoped data isolation.
-
CRUD operations for companies/locations, including hierarchy management (e.g., main office and receptions).
-
CRUD operations for staff members, assignment to companies, and specialization management.
-
Defining staff availability schedules.
-
Time range validation with mandatory breaks to prevent scheduling conflicts.
-
Defining event templates (EventTypes) and creating specific instances in the schedule (EventSchedules).
-
Creating reservations and assigning multiple participants.
-
Managing the payment status of reservations.
-
CRUD operations for participant (client) data.
For a complete list of endpoints, request schemas, and response types, please refer to the full documentation linked below:
The system is built as a modular monolith following clean architecture principles. This ensures maintainability, testability, and clear separation of concerns while keeping a single deployable service.
-
Full implementation of Email/SMS notifications (based on the Notifications table).
-
Expansion of the internal messaging module (based on the Messages table).
-
Integration with an online payment gateway.
-
A dedicated client-facing panel for managing reservations.
-
Reporting and statistics module.
-
.NET 8: The latest LTS version of Microsoft's cross-platform framework.
-
ASP.NET Core: For building the RESTful API.
-
ADO.NET: For direct database communication and executing raw SQL queries.
-
Swashbuckle (Swagger): For API documentation generation.
-
TimePeriodLibrary.NET: Used for handling time-period logic, such as in availability schedules.
-
JSON Web Token: For stateless authentication and authorization.
-
AutoMapper: For object-to-object mapping between DTOs and domain entities.
-
BCrypt.Net: For secure password hashing using the BCrypt algorithm.
-
Microsoft SQL Server: Relational database management system used for persistent data storage.
- Docker Desktop installed and running.
-
Clone the repository:
git clone <repository-url> cd <repository-folder>
-
Run Docker Compose:
docker-compose up -d --build
-
Open Swagger:
http://localhost:5000/swagger
Use this connection string to connect to the database from your local machine:
Server=localhost,1433;Database=PlannerDB;User Id=sa;Password=YourStrong@Password123;TrustServerCertificate=True;MultipleActiveResultSets=True;JDBC equivalent:
jdbc:sqlserver://localhost:1433;databaseName=PlannerDB;user=sa;password=YourStrong@Password123;trustServerCertificate=true;multipleActiveResultSets=trueNote: From inside Docker containers,
localhostmeans the container itself.
Other containers should use the service namesqlserverinstead oflocalhost.
Use the following credentials to log in to the demo environment:
| Role | Password | |
|---|---|---|
| Manager | m@m.pl |
demo |
| Trainer | t@t.pl |
demo |
| Reception employee | r@r.pl |
demo |
Demo users are automatically created
during application startup.
- SQL Server starts up (port 1433).
- Database is created and populated with sample data.
- RSA keys are generated.
- API is ready to use (port 5000).
docker-compose down