The application provides the functionality to create an household and invite other members to this household. In a household it is possible to maintain
- shopping lists
- todo lists
- periodic tasks
- single tasks
- a food plan
- a cookbook
Each module is implemented using a hexagonal architecture. It consists of the following sub projects:
- domain
Provides a service implementation and an domain objects to implement the business logic. Also a repository and an observer interface is present to define what methods are needed for persistence (repository) and what events a broadcasted to notify other modules (observer). - rest
Provides HTTP endpoints that might take DTO objects. Requests are delegated to the service in the domain project. - persistence
Implements the repository interface of the domain. This implementation transforms the domain objects into a representation that is actually persisted. - messaging
Implements the observer interface of the domain. This implementation publishes an event that can be consumed by other modules. It also provides an event handler that consumes events from other modules and delegates that action to the domain service.
This design makes sure, that rest, messaging and persistence depend on the domain sub project. That way there are no unwanted transitive dependencies, for example a REST controller has no access to the underlying database connector.