{"id":31033127,"url":"https://github.com/sultanfariz/post-app-grpc","last_synced_at":"2026-04-17T02:31:16.609Z","repository":{"id":313922164,"uuid":"583198442","full_name":"sultanfariz/post-app-grpc","owner":"sultanfariz","description":"A basic project to implement the use of gRPC in learning. Implemented interceptor, API gateway, and gRPC client concepts. Also imitated microservices arch concept by using message broker.","archived":false,"fork":false,"pushed_at":"2023-02-26T04:16:34.000Z","size":748,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-09T16:22:51.152Z","etag":null,"topics":["auth","golang","grpc","grpc-client","grpc-gateway","grpc-go","interceptor","message-queue","microservice","rabbitmq","stream"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sultanfariz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-12-29T03:55:12.000Z","updated_at":"2024-09-10T10:19:31.000Z","dependencies_parsed_at":"2025-09-09T16:23:33.537Z","dependency_job_id":"4ad4a08c-67e1-4322-96d4-f2a27cd2a3a3","html_url":"https://github.com/sultanfariz/post-app-grpc","commit_stats":null,"previous_names":["sultanfariz/simple-grpc"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/sultanfariz/post-app-grpc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sultanfariz%2Fpost-app-grpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sultanfariz%2Fpost-app-grpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sultanfariz%2Fpost-app-grpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sultanfariz%2Fpost-app-grpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sultanfariz","download_url":"https://codeload.github.com/sultanfariz/post-app-grpc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sultanfariz%2Fpost-app-grpc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31912319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["auth","golang","grpc","grpc-client","grpc-gateway","grpc-go","interceptor","message-queue","microservice","rabbitmq","stream"],"created_at":"2025-09-14T01:34:37.569Z","updated_at":"2026-04-17T02:31:16.569Z","avatar_url":"https://github.com/sultanfariz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Post App\nThis is a simple post application that I developed as a part of learning gRPC in Go. The application has both server and client components.  \n\n## Server\nThe server component of the app has two services: auth and post. The auth service provides login and registration functionality, while the post service provides the following methods:\n\n- GetAllPosts\n- GetPostById\n- CreatePost\n- DeletePost\n\nThe post entity has the following fields:\n```\n- id\n- title\n- content\n- topic\n- created_at\n- updated_at\n```\nThe CreatePost method pushes the created post to RabbitMQ for each topic queue.\nThe server app uses Clean Architecture and MySQL as RDBMS with Gorm as the ORM. An interceptor is implemented to act as an auth middleware to check if the user is logged in.\n\n## Client\nThe client component of the app is a gRPC client that also serves a RESTful API through an API gateway. It provides the following methods:\n- GetAllPosts\n- GetPostById\n- SubscribePostByTopic. SubscribePostByTopic works as a server-stream and sends new posts by the requested topic from the message broker.\n\nThe client app is implemented using buf as the compiler.\nNote: The client app does not provide any authentication functionality.\n![System Design Diagram](./assets/simple%20grpc%20system%20design.png)\n\n## Usage\nClone the repository.\nRun go run main.go to start the server and go run client/main.go to start the client.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsultanfariz%2Fpost-app-grpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsultanfariz%2Fpost-app-grpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsultanfariz%2Fpost-app-grpc/lists"}