{"id":25802287,"url":"https://github.com/ikenox/commenting-service-on-appengine","last_synced_at":"2026-05-13T11:32:15.140Z","repository":{"id":104426377,"uuid":"129490758","full_name":"ikenox/commenting-service-on-appengine","owner":"ikenox","description":" A commenting API service, run on Google App Engine and some Google Cloud Platform services, based on Clean Architecture, Domain Driven Design and Microservices Architecture","archived":false,"fork":false,"pushed_at":"2019-01-13T07:42:46.000Z","size":697,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-27T22:06:49.514Z","etag":null,"topics":["bounded-contexts","clean-architecture","ddd","ddd-example","domain-driven-design","event-driven-architecture","firebase","gcp","microservices-architecture"],"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/ikenox.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}},"created_at":"2018-04-14T06:58:54.000Z","updated_at":"2022-08-23T06:33:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"242ace5e-1b3e-4ab2-8c7e-927bcfea3255","html_url":"https://github.com/ikenox/commenting-service-on-appengine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ikenox/commenting-service-on-appengine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikenox%2Fcommenting-service-on-appengine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikenox%2Fcommenting-service-on-appengine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikenox%2Fcommenting-service-on-appengine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikenox%2Fcommenting-service-on-appengine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ikenox","download_url":"https://codeload.github.com/ikenox/commenting-service-on-appengine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikenox%2Fcommenting-service-on-appengine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32980694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T11:31:52.688Z","status":"ssl_error","status_checked_at":"2026-05-13T11:31:52.072Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bounded-contexts","clean-architecture","ddd","ddd-example","domain-driven-design","event-driven-architecture","firebase","gcp","microservices-architecture"],"created_at":"2025-02-27T16:57:49.518Z","updated_at":"2026-05-13T11:32:15.129Z","avatar_url":"https://github.com/ikenox.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Commenting service on Google App Engine\n\nA commenting service which is run on Google App Engine and some Google Cloud Platform services, based on Clean Architecture, Domain Driven Design and Microservices Architecture\n\n## About this project\n\nThis project provides commenting API service.\nFor example, this API can be called from a commenting form which is put into your blog site.\nBy using this API your commenting form can post a comment, delete a comment and get the list of comments. \n\n### Purpose of this project\n\nA purpose of this project is learning about followings.\n- Clean Architecture\n- Domain Driven Design\n- Microservices Architecture (just a little)\n\nThis project keeps these principles as much as possible.  \nSo this project has some over-engineered parts.\n\n## Application Architecture Overview\n\n![](doc/architecture-overview.png)\n\n- Based on Domain Driven Design, this project has 3 bounded contexts.\n  - Commenting context\n  - Auth context\n  - Notification context\n- These contexts are separated into services which independent of each other, like Microservices.\n- Commenting service is based on Clean Architecture.\n\n## Domain Driven Design in this project\n\n### Bounded contexts\n\n#### Commenting context (core domain)\n\nPost a comment, delete a comment and view posted comments.\n\n#### Notification context (generic sub domain)\n\nNotify about some events to users or administrators.  \nIn this project Google Cloud Pub/Sub are used for publishing/subscribing domain event.\nThis domain subscribes domain events and then notifies to appropriate persons.\n\n#### Auth context (generic sub domain)\n\nThis domain helps user authentication.  \nIn this project Firebase Authentication Service has auth domain role.\n\n## Clean Architecture in Commenting API\n\n### Architecture overview\n\nTo be written\n\n### Benefits of Clean Architecture\n\nBecause of Clean Architecture, application logic and domain logic are independent with detail of infrastructure.  \nFollowings are not appeared in the core of the application.\n\n- Various packages which is related to Google App Engine infrastructure\n- Technological details of web application on golang (e.g. context.Context)\n\n# Setup\n\n## Requirements\n\n- go 1.8\n- google-cloud-sdk\n    - goapp\n    - dev_appserver.py\n- dep\n\n# For local development\n\n### setup\n\n- Create yaml file for your Google App Engine environment\n    ```shell\n    $ cd /path/to/comment-api-on-gae/src/commenting\n    $ cp app/app.template.yaml app/app.yaml\n    $ cd /path/to/comment-api-on-gae/src/notification\n    $ cp app/app.template.yaml app/app.yaml\n    ```\n    \n- Resolve dependencies\n    ```shell\n    $ cd /path/to/comment-api-on-gae/src/commenting\n    $ GOPATH=/path/to/comment-api-on-gae dep ensure\n    $ cd /path/to/comment-api-on-gae/src/notification\n    $ GOPATH=/path/to/comment-api-on-gae dep ensure\n    ```\n\n### Run\n\nYou can run local servers of `commenting` and `notification` services for development.\n\n```shell\n$ cd /path/to/comment-api-on-gae/src/commenting\n$ GOPATH=/path/to/comment-api-on-gae dev_appserver.py app/XXX.yaml --enable_watching_go_path --log_level=debug --datastore_path=.storage\n$ cd /path/to/comment-api-on-gae/src/notification\n$ GOPATH=/path/to/comment-api-on-gae dev_appserver.py app/XXX.yaml --enable_watching_go_path --log_level=debug --datastore_path=.storage\n```\n\n# For production/staging\n\n## Setup Cloud Services\n\n### Firebase\n\n- Enable anonymous login\n\n### Google Cloud Pub/Sub\n\n- Create topic `domain-event`\n- Create subscriptions which push to following URLs\n    - `https://commenting-dot-[YOUR-PROJECT-NAME].appspot.com/_ah/push-handlers/domain-event`\n    - `https://notification-dot-[YOUR-PROJECT-NAME].appspot.com/_ah/push-handlers/domain-event`\n    \n### Google App Engine\n\n- Commenting service\n    - Create datastore index\n    - Issue service account which have following privileges\n       - Firebase data manager\n       - Pubsub editor\n- Notification service\n    - Issue service account which have following privileges\n       - Pubsub editor\n    - Add authorized mail sender\n    \n## Deploy\n\n- Rewrite yaml for your environment\n    \n- Execute following commands\n\n    ```shell\n    $ cd /path/to/comment-api-on-gae/src/commenting\n    $ GOPATH=/path/to/comment-api-on-gae goapp deploy app/[YOUR-GAE-CONFIG-FILE].yaml\n    $ cd /path/to/comment-api-on-gae/src/notification\n    $ GOPATH=/path/to/comment-api-on-gae goapp deploy /app/[YOUR-GAE-CONFIG-FILE].yaml\n    ```\n\n\n# Testing\n\ntodo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fikenox%2Fcommenting-service-on-appengine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fikenox%2Fcommenting-service-on-appengine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fikenox%2Fcommenting-service-on-appengine/lists"}