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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0Njk4MjMsIm5iZiI6MTczOTQ2OTUyMywicGF0aCI6Ii8zODgwNTc1Ni8zNzM5OTgzMTAtNzM2Yjk4MTMtZjA4Ni00ZmQ0LWFlYjMtOThlMDhkZjUxZTdlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDE3NTg0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNlMzM0NDAyMDViNDgyNzc2MmJkZTQwZDhhZTZhNGY0ODczZDhhYmJiNzBiN2Q2ZDk1ODFiZWQzMjg5OWRkMTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2jr7HXIr5BRC3MT6HgFtqWzhsh-yuEQjn1VyQ89O-qU)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0Njk4MjMsIm5iZiI6MTczOTQ2OTUyMywicGF0aCI6Ii8zODgwNTc1Ni8zNzM5OTgwNDktMDIyNTkxOWItNTNkMS00OTAwLTliOWUtOGQ1ZDVmNjE2ZDczLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDE3NTg0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk3NTJlZjliMDE4ZmY3NzA5MjNkNDA1MDliMTE3N2M5NzExYjkxZjBmNGUxNzkzZmM5NDM2MzViNWQ2NGI2YzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2ufTsQPyFWytQEAZwlQUfWQFW0D1cuokcY8hoyZm-xQ)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0Njk4MjMsIm5iZiI6MTczOTQ2OTUyMywicGF0aCI6Ii8zODgwNTc1Ni8zNzM5OTgzNzYtYTU4NzFhMjItYmU2Ni00MjM2LTg2MzUtNjE2NjYyNDI0OWMxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDE3NTg0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYwOGIzNWI2NTU4MmM2N2RlYTAwZWVhNmU0NjkxOGY4ZTZiMTU0ODY1ZDBhODM2ZDJhNjZkNDc2ZjE4MTg1OTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.uJhzXRchaF3ufT-OekzBvp4Kv5pSSuYqqHlcutepxoQ)
![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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0Njk4MjMsIm5iZiI6MTczOTQ2OTUyMywicGF0aCI6Ii8zODgwNTc1Ni8zNzM5OTg1NzEtNTc4ZGU2MWQtNzNjYi00N2I5LTg4MDYtZWQ1OGE3YjI4MWExLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDE3NTg0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI0OGQ2ODQxZWE4NzFkNzAxNzliNjczMGJlYThhMjE1N2Q3ZWUxYmMyYmQxZjYwODFlYWY0Y2IxNDk2NDU5MTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.1E8Or9QG-QFZeq8rly2JZ0GryE6IhhP4WJCVz-fTcXE)
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