This project is a Spring Boot application that provides a RESTful API for scheduling calendar events. Users can create busy slots, fetch events, find conflicts, and schedule events with other users.
- Create busy slots for individual users.
- Fetch events for a specific user or multiple users.
- Identify conflicting events for a user on a particular day.
- Find the most favorable upcoming empty slot for a set of users and a specific duration.
- Schedule events with a defined start and end time involving multiple users
- Java 11 or later
- Maven
- Docker
- Start Docker Desktop.
- Clone the repository
- Navigate to the project directory
- Build and run the spring boot application.
mvn clean install
and thenmvn spring-boot:run
Base url : http://localhost:8080
- POST
/busy
- Body:
{
"userId": 1,
"startTime": "2023-12-09T10:00:00",
"endTime": "2023-12-09T11:00:00"
}
-GET /{userId}
-GET /conflicts/{userId}?date=2023-12-01
-POST /favaourable-slot
-Body:
{
"organiserId": 1,
"participantIds": [2, 3],
"durationMinutes": 120
}
-POST /create-event
-Body:
{
"organiserId": 1,
"participantIds": [2, 3],
"startTime": "2023-12-10T15:00:00",
"endTime": "2023-12-10T17:00:00"
}
It offers a vast ecosystem, including Spring Data JPA for database interactions.
open-source relational database that supports complex queries and transactions.
allows for easy setup and deployment of the application and its dependencies, ensuring consistency across different environments.
enables easy integration with various clients, including web and mobile applications, and follows stateless client-server architecture principles.
- Notifications and Reminders
- Time Zone Support
- Recurring Events
- Event invitations
- User Authentication and Authorization
You can test the API endpoints using tools like Postman or cURL.
For further reference, please consider the following sections:
- Official Apache Maven documentation
- Spring Boot Maven Plugin Reference Guide
- Create an OCI image
- Spring Web
- Spring Data JPA
- Spring Boot DevTools
The following guides illustrate how to use some features concretely: