# Folders ## Reason The goals for a common project's folder structure is to mantain the organization and to promote a common language between the programmers, decreasing the new members' learning curve. ## Definitions ### Structure - `domain`: - `service`: contains the business logic and persistence, i.e. validating values based on business rules - `contract`: contains the interfaces for the whole app; useful for mocking dependencies on the tests and also decoupling the packages from each other, making the code independent from external technologies, e.g. databases - `entity`: represents the values our domain understands - `infra`: contains utilities that will be used across the whole app - `data`: contains the connection with the database or any other way to do the persistence - `data*`: an "implementation" - `application`: represents our application as a whole - `applicationservice`: contains the application logic, i.e. parses and validates the data received, calls many domain's services, parses the output data and sends it - `entitymapping`: contains the functions that parses the application's view model to the domain's entities, and vice-versa - `viewmodel`: the data that will be sent and received from the app; it differs from the entity because it does not represent the values of our app, but rather the values the front-end server will understand - `server`: contains the definitions for the web server - `router`: defines the routes and its handlers; contains no logic, only calls the application package - `serverconfig`: defines the middlewares and the server's configurations - `static`: not required; mostly used for static files, such as large texts, email templates, static values, etc, or temporary files (commonly in `static/temp`)