This project aims to refactor the Greenlight application by implementing clean architecture and SOLID principles. The goal is to improve the codebase's maintainability, scalability, and testability while increasing test coverage.
To understand the initial state of the project, please refer to the previous README file or check the API Docs from V1 application version.
graph LR
subgraph ModularMonolith
subgraph AuthModule
subgraph DomainLayer
D1[Entities]
D2[Value Objects]
end
subgraph ApplicationLayer
A1[Use Cases]
end
subgraph InfrastructureLayer
I1[Repositories]
I2[REST API External Services]
I3[GRPC Internal Service]
end
end
subgraph Legacy Module
subgraph RestServer
RS1[Controllers]
RS2[Handlers]
subgraph Middleware
RS3[Auth GRPC Client]
end
end
subgraph Data Models
end
end
end
The diagram represents the initial phase of the refactor process, focusing on separating the auth module from the existing codebase and applying a clean architecture to enhance its maintainability to each new module. The main objective is to isolate the auth module's functionality and ensure that other modules access user-related information and authentication through the internal GRPC auth service.
- Implement a modular monolith architecture style
- Refactor initial implementation into separate modules
- Add an authentication module
- Implement the create user feature
- Implement the activate user feature
- Implement the create authentication token feature
- Create auth gRPC methods
- Add a movies module
- Add a healthcheck module
- Add an authentication module
- Refactor multiple functionalities into internal packages
- Add support for background tasks
- Add
log/slog
package - Add
mailer
package - Add utils package
- Add validator
v2
package - Add validator helpers utilities
- Add general helpers utilities
- Add validator
- Add response package
- Add request package
- Add errors package
- Add config package
- Add shared middleware package
- https://github.com/golang-standards/project-layout
- https://autostrada.dev/
- https://github.com/qiangxue/go-rest-api/
- https://github.com/powerman/go-service-example/
- https://github.com/powerman/go-monolith-example
- https://github.com/amitshekhariitbhu/go-backend-clean-architecture
- https://github.com/evrone/go-clean-template/
- https://github.com/booscaaa/clean-go/
- https://github.com/bxcodec/go-clean-arch/