{"id":15034656,"url":"https://github.com/naeemaei/golang-clean-web-api","last_synced_at":"2025-05-16T17:08:30.954Z","repository":{"id":65963286,"uuid":"588623322","full_name":"naeemaei/golang-clean-web-api","owner":"naeemaei","description":"Golang Clean architecture REST API example with a comprehensive real project. It uses docker,  docker compose, redis, elasticsearch, kibana, filebeat, postgresql, prometheus, grafana. also use gin, gorm, viper, zerolog, zap, validator, dynamic search, swagger and JWT ","archived":false,"fork":false,"pushed_at":"2025-05-15T13:32:30.000Z","size":19354,"stargazers_count":277,"open_issues_count":0,"forks_count":50,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-15T14:38:58.628Z","etag":null,"topics":["clean-architecture","docker","docker-compose","elasticsearch","example-project","filebeat","gin","go","go-api","go-rest-api","golang","golang-api","golang-examples","kibana","postgresql","redis","rest-api","swagger","webapi"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/naeemaei.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-01-13T15:22:34.000Z","updated_at":"2025-05-15T13:32:36.000Z","dependencies_parsed_at":"2024-01-25T19:36:44.829Z","dependency_job_id":"793948f8-f6aa-4bef-abd5-e38a9bd81e29","html_url":"https://github.com/naeemaei/golang-clean-web-api","commit_stats":{"total_commits":130,"total_committers":2,"mean_commits":65.0,"dds":"0.023076923076923106","last_synced_commit":"52c8419297ee931ee5fcf3a3939034a4cc53cc47"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naeemaei%2Fgolang-clean-web-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naeemaei%2Fgolang-clean-web-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naeemaei%2Fgolang-clean-web-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naeemaei%2Fgolang-clean-web-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/naeemaei","download_url":"https://codeload.github.com/naeemaei/golang-clean-web-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254573589,"owners_count":22093731,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clean-architecture","docker","docker-compose","elasticsearch","example-project","filebeat","gin","go","go-api","go-rest-api","golang","golang-api","golang-examples","kibana","postgresql","redis","rest-api","swagger","webapi"],"created_at":"2024-09-24T20:25:53.336Z","updated_at":"2025-05-16T17:08:30.946Z","avatar_url":"https://github.com/naeemaei.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Golang Clean Web API (Dockerize) with a full sample project (Car Sale project)\n\n## System Design Diagram\n\n\u003cp align=\"center\"\u003e\u003cimg src='/docs/files/system_diagram.png' alt='Golang Web API System Design Diagram' /\u003e\u003c/p\u003e\n\n## Database Design Diagram\n\n\u003cp align=\"center\"\u003e\u003cimg src='/docs/files/db_diagram.png' alt='Golang Web API System Design Diagram' /\u003e\u003c/p\u003e\n\n## Give a Star! :star:\n\nIf you like this repo or found it helpful, please give it a star. Thanks!\n\n## Used Tools\n\n1. [Gin as web framework](https://github.com/gin-gonic/gin)\n2. [JWT for authentication and authorization](https://github.com/golang-jwt/jwt)\n3. [Redis for caching](https://github.com/redis/redis)\n4. [Elasticsearch for logging database](https://github.com/elastic/elasticsearch)\n5. [Beat for log shipping](https://github.com/elastic/beats)\n6. [Kibana as log viewer](https://github.com/elastic/kibana)\n7. [Postgresql as main database engine](https://github.com/postgres/postgres)\n8. [PgAdmin as database management tool](https://github.com/pgadmin-org/pgadmin4)\n9. [Prometheus for metric database](https://github.com/prometheus/prometheus)\n10. [Grafana for metric dashboards](https://github.com/grafana/grafana)\n11. [Validator for endpoint input Validation](https://github.com/go-playground/validator)\n12. [Viper for configurations](https://github.com/spf13/viper)\n13. [Zap for logging](https://github.com/uber-go/zap)\n14. [Zerolog for logging](https://github.com/rs/zerolog)\n15. [Gorm as ORM](https://github.com/go-gorm/gorm)\n16. [Swagger for documentation](https://github.com/swaggo/swag)\n17. Docker compose to run project with all dependencies in docker\n\n## How to run\n\n### Run on local system\n\n#### Start dependencies on docker\n```bash \ndocker compose -f \"docker/docker-compose.yml\" up -d setup elasticsearch kibana filebeat postgres pgadmin redis prometheus node-exporter alertmanager grafana\n```\n\n#### Install swagger and run app\n```bash\ncd src\ngo install github.com/swaggo/swag/cmd/swag@latest\ncd src/cmd\ngo run main.go\n```\n\n##### Address: [http://localhost:5005](http://localhost:5005)\n\n#### Stop\n```bash\ndocker compose -f \"docker/docker-compose.yml\" down\n```\n\n#### Examples\n\n##### Login\n```bash\ncurl -X 'POST' \\\n  'http://localhost:5005/api/v1/users/login-by-username' \\\n  -H 'accept: application/json' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"password\": \"12345678\",\n  \"username\": \"admin\"\n}'\n```\n\n##### Sample filters request body\n\n###### City filter and sort\n\n```json\n{\n  \"filter\": {\n    \"Name\": {\n      \"filterType\": \"text\",\n      \"from\": \"t\", \n      \"type\": \"contains\"\n    } \n  },\n  \"pageNumber\": 1,\n  \"pageSize\": 10,\n  \"sort\": [\n    {\n      \"colId\": \"name\",\n      \"sort\": \"desc\"\n    }\n  ]\n}\n```\n\n\n###### City in range filter \n\n```json\n{\n  \"filter\": {\n    \"Id\": { // Column name\n      \"filterType\": \"number\", // number, text,...\n      \"from\": \"1\", \n      \"to\": \"7\", \n      \"type\": \"inRange\" // contains, equals,...\n    } \n  },\n  \"pageNumber\": 1,\n  \"pageSize\": 10,\n  \"sort\": [\n    {\n      \"colId\": \"name\",\n      \"sort\": \"desc\"\n    }\n  ]\n}\n```\n\n### Run project with dependencies on Docker\n\n```bash\ndocker compose -f \"docker/docker-compose.yml\" up -d --build\n```\n\n#### Web API  Run in docker  [http://localhost:9002](http://localhost:9002)\n\n```\nToken Url: http://localhost:9002/api/v1/users/login-by-username\nUsername: admin\nPassword: 12345678\n```\n\n#### Kibana  [http://localhost:5601](http://localhost:5601)\n\n```\nUsername: elastic\nPassword: @aA123456\n```\n\n#### Prometheus  [http://localhost:9090](http://localhost:9090)\n\n#### Grafana  [http://localhost:3000](http://localhost:3000)\n\n```\nUsername: admin\nPassword: foobar\n```\n\n#### PgAdmin  [http://localhost:8090](http://localhost:8090)\n\n```\nUsername: h.naimaei@gmail.com\nPassword: 123456\n```\n\nPostgres Server info:\n\n```\nHost: postgres_container\nPort: 5432\nUsername: postgres\nPassword: admin\n```\n\n### Docker Stop\n\n```bash\ndocker compose -f 'docker/docker-compose.yml' --project-name 'docker' down\n```\n\n### Linux\n\n0. build Project and copy configuration\n\n```bash\n/src \u003e go build -o ../prod/server ./cmd/main.go\n/src \u003e mkdir ../prod/config/ \u0026\u0026 cp config/config-production.yml ../prod/config/config-production.yml\n```\n\n1. Create systemd unit\n\n```bash\nsudo vi /lib/systemd/system/go-api.service\n```\n\n2. Service config\n\n```\n[Unit]\nDescription=go-api\n\n[Service]\nType=simple\nRestart=always\nRestartSec=20s\nExecStart=/home/hamed/github/golang-clean-web-api/prod/server\nEnvironment=\"APP_ENV=production\"\nWorkingDirectory=/home/hamed/github/golang-clean-web-api/prod\n[Install]\nWantedBy=multi-user.target\n```\n\n3. Start service\n\n```bash\nsudo systemctl start go-api\n```\n\n4. Stop service\n\n```bash\nsudo systemctl stop go-api\n```\n\n5. Show service logs\n\n```bash\nsudo journalctl -u go-api -e\n```\n\n## Project preview\n\n## Swagger\n\n\u003cp align=\"center\"\u003e\u003cimg src='/docs/files/swagger.png' alt='Golang Web API preview' /\u003e\u003c/p\u003e\n\n## Grafana\n\n\u003cp align=\"center\"\u003e\u003cimg src='/docs/files/grafana.png' alt='Golang Web API grafana dashboard' /\u003e\u003c/p\u003e\n\n## Kibana\n\n\u003cp align=\"center\"\u003e\u003cimg src='/docs/files/kibana.png' alt='Golang Web API grafana dashboard' /\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaeemaei%2Fgolang-clean-web-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnaeemaei%2Fgolang-clean-web-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaeemaei%2Fgolang-clean-web-api/lists"}