A progressive framework-agnostic API template following CLEAN architecture and SOLID principles. DDD inspired :)
Gomora provides the example for a module-based gRPC and REST server suitable for building progressive APIs (from monolith to distributed microservices).
![Screen Shot 2024-10-07 at 9 43 31 AM](https://private-user-images.githubusercontent.com/38805756/373998310-736b9813-f086-4fd4-aeb3-98e08df51e7e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNzExMjMsIm5iZiI6MTczOTM3MDgyMywicGF0aCI6Ii8zODgwNTc1Ni8zNzM5OTgzMTAtNzM2Yjk4MTMtZjA4Ni00ZmQ0LWFlYjMtOThlMDhkZjUxZTdlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE0MzM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTliNjE3MzlhNjNiNjM5MDFmZDcwNjYwZDEwMWQxNTljNTY5ZDA4N2ZjNWQzMWM3M2ViYzI0ZGY3Y2U3NWM0NzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.3pvvc-OcFQIZ5Pl701zVplAXl0mCZQAz0WJdIYqoPBU)
![Screen Shot 2024-10-07 at 9 41 10 AM](https://private-user-images.githubusercontent.com/38805756/373998049-0225919b-53d1-4900-9b9e-8d5d5f616d73.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNzExMjMsIm5iZiI6MTczOTM3MDgyMywicGF0aCI6Ii8zODgwNTc1Ni8zNzM5OTgwNDktMDIyNTkxOWItNTNkMS00OTAwLTliOWUtOGQ1ZDVmNjE2ZDczLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE0MzM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYwNzA5ZWUzNTIzZWNjYmU3MTkxMGZhNTg4YzFkYzA1MTM4Y2QyY2RjZDE3YTRlNjgzMDEyNzgwODg5Y2M4MmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.gqEnonLVK1wihLnlhUbWUAKNjmei-j-nVDwoLQP37Ac)
![Screen Shot 2024-10-07 at 9 44 17 AM](https://private-user-images.githubusercontent.com/38805756/373998376-a5871a22-be66-4236-8635-6166624249c1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNzExMjMsIm5iZiI6MTczOTM3MDgyMywicGF0aCI6Ii8zODgwNTc1Ni8zNzM5OTgzNzYtYTU4NzFhMjItYmU2Ni00MjM2LTg2MzUtNjE2NjYyNDI0OWMxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE0MzM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdjYTVkOWQ2NzgwYmQ1ZTgzNjY1YmU3MGEyMTg0MDZiNjZhY2MzMjYzZWMwNDA2ZTlkYzc2MTZhMjRiOWU1MzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.df4E6G8TmCnRlrNY0npPt81s4OosmsG6KC_LySRDLWA)
![Screen Shot 2024-10-07 at 9 46 05 AM](https://private-user-images.githubusercontent.com/38805756/373998571-578de61d-73cb-47b9-8806-ed58a7b281a1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNzExMjMsIm5iZiI6MTczOTM3MDgyMywicGF0aCI6Ii8zODgwNTc1Ni8zNzM5OTg1NzEtNTc4ZGU2MWQtNzNjYi00N2I5LTg4MDYtZWQ1OGE3YjI4MWExLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDE0MzM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU4OTUyNjY2OWI0OTJkYTJmY2ZjMzBkNjI4MDM4NjYyNDkxMmE1ZDQxMDY3Y2RlY2U1ZmQ3ODRiNWU2MDZkM2QmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.fA98pMk9-SiuwBnlA957K3XikY01leeGLnBMHdA7OHY)
Setup the .env file first
cp .env.example .env
To bootstrap everything, run:
make
The command above will install, build, and run the binary
For manual install:
make install
For lint:
make lint
Just ensure you installed golangci-lint.
To test:
make test
For manual build:
make build
# The output for this is in bin/
To build, run:
make run
To run the container:
make up
Gomora uses go-migrate (https://github.com/golang-migrate/migrate) to handle migration. Download and change your migrate database command accordingly.
To create a schema, run:
NAME=<init_schema> make migrate-schema
To migrate up, run:
STEPS=<remove STEPS to apply all or specify step number> make migrate-up
To migrate down, run:
STEPS=<remove STEPS to apply all or specify step number> make migrate-down
To check migrate version, run:
make migrate-version
To force migrate, run:
STEPS=<specify step number> make migrate-force
Made with ❤️ at Nuxify