{"id":15161777,"url":"https://github.com/bagiasn/book-spot","last_synced_at":"2026-02-06T10:34:45.163Z","repository":{"id":241243860,"uuid":"197656868","full_name":"bagiasn/book-spot","owner":"bagiasn","description":"Sample microservices application using spring-boot and golang","archived":false,"fork":false,"pushed_at":"2020-06-14T20:59:02.000Z","size":443,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2025-07-15T01:30:14.590Z","etag":null,"topics":["docker-compose","go","java","microservices","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","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/bagiasn.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":"2019-07-18T21:04:57.000Z","updated_at":"2024-09-27T04:41:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"7712f217-fbb0-441c-bac9-b47b8d2caae8","html_url":"https://github.com/bagiasn/book-spot","commit_stats":null,"previous_names":["bagiasn/book-spot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bagiasn/book-spot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagiasn%2Fbook-spot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagiasn%2Fbook-spot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagiasn%2Fbook-spot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagiasn%2Fbook-spot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bagiasn","download_url":"https://codeload.github.com/bagiasn/book-spot/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bagiasn%2Fbook-spot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29157976,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T07:18:23.844Z","status":"ssl_error","status_checked_at":"2026-02-06T07:13:32.659Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["docker-compose","go","java","microservices","spring-boot"],"created_at":"2024-09-27T00:44:59.449Z","updated_at":"2026-02-06T10:34:45.141Z","avatar_url":"https://github.com/bagiasn.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://jenkins.book-spot.club/buildStatus/icon?style=flat-square\u0026job=book-spot%2Fdevelop)](https://jenkins.book-spot.club/job/book-spot/job/develop/)\n\n![Logo](docs/logo.png)\n\n## About\n\nBookSpot is a microservices demo application. It is a web-based book rating app.\n\nThe aim of this project is to showcase how we can setup a local development environment when working with microservices, since the hurdles of replicating a diverse production stack can be many.\n\n## Services\n\n| Name                 | Description                                                             |\n| -------------------- | ----------------------------------------------------------------------- |\n| [gateway](./gateway) | Acts as an API gateway that routes requests to downstream services      |\n| [catalog](./catalog) | Provides CRUD endpoints for all available books                         |\n| [user](./user)       | Provides CRUD endpoints for users along with login session              |\n| [announcement-server](./announcement/server) | Generates (fake) announcement events            |\n| [announcement-publisher](./announcement/publisher) | Listens for announcements and publishes them to connected clients |\n\n\n### Build with\nVarious technologies/frameworks were used in order to speed development and, happily, all of them are open-source:\n\n* [Spring Boot](https://github.com/spring-projects/spring-boot) - *Catalog*, *user* and *gateway* use Spring Boot, a popular Java framework, along with many of its plugins, such as Spring Data JPA/REST/Redis.\n* [PostgresSQL](https://www.postgresql.org/) - Postgres is the RDBMS used for persistent storage by both *catalog* and *user*.\n* [Redis](https://github.com/antirez/redis) - In-memory database serving as caching layer. Also used for storing login session info.\n* [Zuul](https://github.com/Netflix/zuul) - *Gateway* uses Netflix's Zuul as a gateway proxy.\n* [Gorilla](https://github.com/gorilla/websocket) - *Announcement-publisher* utilizes gorilla to provide a WebSockets server, written in Go.\n* [gRPC-Go](https://github.com/grpc/grpc-go) - *Announcement-server* uses this library as a gRPC server and *publisher* as a gRPC client. \n* [Faker](https://github.com/bxcodec/faker) - Fake data generator, used by *announcement-server*, written in Go.\n\nAll Java services were developed in [IntelliJ IDEA Ultimate Edition](https://www.jetbrains.com/idea/) (2019.3.3) (Educational license).\n\nAll Go services were developed in [VS Code](https://github.com/Microsoft/vscode/).\n\nLast but not least, HTML/CSS/JS \u0026 [Semantic UI](https://github.com/Semantic-Org/Semantic-UI) were used for frontend development.\n\nThe following diagram shows how all these fit together:\n\n![Architecture-diagram](docs/BookSpot-Architecture.png)\n\n### How to run\nIn order to avoid problems from different local configurations/runtimes, all services can run on docker containers. For convenience, various docker-compose configurations were created:\n- **docker-compose.yml**: Starts only Postgres and Redis, useful for everyday development, where you work and test individual services.\n- **docker-compose.dev.yml**: Starts all services using the local build context, useful for checking how the whole system works locally.\n- **docker-compose.all.yml**: Starts all services, by pulling pre-built images from Docker Hub.\n \nSo, assuming you are in the project's root directory you can start the system by executing:\n```sh\ndocker-compose -f docker-compose.all.yml up\n```\nAll things well, you can verify that the application runs at:\n```sh\n127.0.0.1:8080\n```\n\nTo stop press Ctrl+C or run\n```sh\ndocker-compose -f docker-compose.all.yml stop\n```\n\nreplace *stop* with *down* to destroy all containers, images etc.\n\n##### Note\n\nThis project is part of my MSc thesis.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbagiasn%2Fbook-spot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbagiasn%2Fbook-spot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbagiasn%2Fbook-spot/lists"}