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/slogpackage -  Add 
mailerpackage -  Add utils package
-  Add validator 
v2package - 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/