A fully-featured backend developed in Java for a Conference Management System.
- Authentication/Authorization using Json Web Tokens
- Create and Management Speakers
- Create and Management Sessions
- Create and Management Conferences
- Subscribe to a Conference
- Send reminder email to the participants
- Spring Boot
- Spring MVC
- Spring Data JPA
- Spring Email
- Clean Architecture
- Springdoc
- PostgreSQL
- JWT
- Jacoco
- Mailhog
This is a brief description of project structure
- Authentication: this component is responsible for user sign in, sign up and contains all the code related to authorization.
- Conference Management: this component is responsible for creating managing entities like Speaker, Session, Conference and Participant. It is directly used for participants when subscribing to a conference.
- Notifier: this component is responsible for sending email to the participants reminding then about the upcoming conferences.
- Web: this module contains the Spring MVC controller. It relies on the usecase module, but no other module references it.
- Usecase: this module contains the application specific business rules. It relies on the Exception and Entity modules, and it is referenced by the Web module. I tried my best to keep the usecase(and entity) completely decoupled from implementation details of external libraries (Spring included).
- Persistence: this module contains the code necessary to persist and retrieve data from the database. It relies on the Usecase and Entity modules, but no other module references it. I've opted to place the JPA separately from the domain code (Usecase and Entity modules) because I want to be able to change to a complete difference persistence approach without having to touch on the other modules.
- Exception: this module contains the customer exceptions that will be used in the web module that render specific HTTP responses.
- Entity: this module contains the domain entities.
- Execute docker containers
docker-compose up -d
- Execute the app in your favorite IDE