{"id":22339818,"url":"https://github.com/rahugg/crm-system-go-microservices","last_synced_at":"2025-07-30T00:31:24.777Z","repository":{"id":208312070,"uuid":"698148799","full_name":"Rahugg/CRM-system-go-microservices","owner":"Rahugg","description":"Customer Relationship Management helps to manage tasks, assign deadlines, control user roles, use of admin panel, feedback management, sales representation, deal management","archived":false,"fork":false,"pushed_at":"2024-06-06T05:13:35.000Z","size":1725,"stargazers_count":34,"open_issues_count":1,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T22:02:06.213Z","etag":null,"topics":["crm-system","golang","grpc","kafka","microservices-architecture","swagger"],"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/Rahugg.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}},"created_at":"2023-09-29T09:10:52.000Z","updated_at":"2025-03-18T11:42:25.000Z","dependencies_parsed_at":"2023-12-08T13:27:40.303Z","dependency_job_id":"4ce7fd9e-e0c4-469a-9ebf-6630785ab261","html_url":"https://github.com/Rahugg/CRM-system-go-microservices","commit_stats":null,"previous_names":["rahugg/crm-system-go-microservices"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Rahugg/CRM-system-go-microservices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahugg%2FCRM-system-go-microservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahugg%2FCRM-system-go-microservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahugg%2FCRM-system-go-microservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahugg%2FCRM-system-go-microservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rahugg","download_url":"https://codeload.github.com/Rahugg/CRM-system-go-microservices/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rahugg%2FCRM-system-go-microservices/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267785731,"owners_count":24144119,"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","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"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":["crm-system","golang","grpc","kafka","microservices-architecture","swagger"],"created_at":"2024-12-04T07:09:29.464Z","updated_at":"2025-07-30T00:31:24.393Z","avatar_url":"https://github.com/Rahugg.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n[![MIT License][license-shield]][license-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Rahugg/CRM-system-go-microservices\"\u003e\n    \u003cimg src=\"pkg/crm_core/img/crm-icon.png\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n\u003ch3 align=\"center\"\u003eCRM-system-go-microservices\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Simple Customer Relationship Management helps to manage tasks, assign deadlines, control user roles, use of admin panel, feedback management, sales representation, deal management\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#tech-features\"\u003eTech features\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#folder-structure\"\u003eFolder Structure\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n     \u003cli\u003e\n      \u003ca href=\"#architecture-of-project\"\u003eArchitecture of project\u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#detailed\"\u003eDetailed Architecture\u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003ca href=\"#installation\"\u003eGetting started\u003c/a\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ca href=\"#launch\"\u003eHow to launch the service\u003c/a\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ca href=\"#migrate\"\u003eHow to migrate the mock data\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n     \u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#reasons-why-i-used-these-technologies\"\u003eReasons of using these Technologies\u003c/a\u003e\n    \u003c/li\u003e\n    \n  \u003c/ol\u003e\n\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\nCustomer Relationship Management \n### My application's features:\n\u003cul\u003e\n  \u003cli\u003eAssign deadlines\u003c/li\u003e\n  \u003cli\u003eContact management\u003c/li\u003e\n  \u003cli\u003eControl user roles\u003c/li\u003e\n  \u003cli\u003eDeal management\u003c/li\u003e\n  \u003cli\u003eFeedback management\u003c/li\u003e\n  \u003cli\u003eHelps to manage tasks\u003c/li\u003e\n  \u003cli\u003eMonitor the metrics\u003c/li\u003e\n  \u003cli\u003eSales representation\u003c/li\u003e\n  \u003cli\u003eUse of admin panel\u003c/li\u003e\n\u003c/ul\u003e\n\n\n\n## Built With\n* [![Golang][Golang-badge]][Golang-url] \n* [![Gin][Gin-badge]][Gin-url]\n* [![gRPC][gRPC-badge]][gRPC-url]\n* [![PostgreSQL][PostgreSQL-badge]][PostgreSQL-url] \n* [![Redis][Redis-badge]][Redis-url] \n* [![Kafka][Kafka-badge]][Kafka-url] \n* [![Docker][Docker-badge]][Docker-url] \n* [![Swagger][Swagger-badge]][Swagger-url] \n* [![Grafana][Grafana-badge]][Grafana-url]\n* [![Prometheus][Prometheus-badge]][Prometheus-url]\n\n## Tech features\n* Concurrency\n* Design Patterns\n* Docker\n* gRPC\n* JWT Auth\n* Kafka\n* Linters\n* Migrations\n* Metrics Grafana/Prometheus\n* Middleware\n* PostgreSQL\n* Redis\n* RESTful APIs\n* Swagger\n* Viper Config\n\n## Folder Structure\n\n## Internal\n\n### `app`\nMain application logic and resource management.\n\n### `controller`\nHTTP and/or gRPC controllers for request handling.\n\n### `docs`\nInternal documentation.\n\n### `entity`\nData structures representing domain entities.\n\n### `repository`\nData access methods for persistence and retrieval.\n\n### `service`\nEncapsulated business logic.\n\n### `storage`\nInteraction with specific data storage systems.\n\n## Cmd\n\n### `auth`\nEntry point for the authentication service.\n\n### `crm_core`\nEntry point for the core CRM service.\n\n## Config\n\n### `auth`\nConfiguration specific to the authentication service.\n\n### `crm_core`\nConfiguration specific to the core CRM service.\n\n## Data\n\n### `kafka1`\nData for the Kafka service (topics, messages).\n\n### `zookeeper`\nConfiguration files and state information for Zookeeper.\n\n## Migrations\n\n### `auth`\nDatabase schema migration scripts for the authentication service.\n\n### `crm_core`\nDatabase schema migration scripts for the core CRM service.\n\n## Pkg\n\n### `auth`\nReusable functions and utilities specific to the authentication service.\n\n### `crm_core`\nReusable functions and utilities specific to the core CRM service.\n  \n## Reasons why I used these technologies \n\u003csummary\u003eTechnologies\u003c/summary\u003e\n  \u003cul\u003e\n    \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003eGolang\u003c/summary\u003e\n        I used Golang as a main backend language. And I wrote a backend by using Gin framework, It was easy to learn and write code in it, and Golang helped me to deal with concurrency. \n        Features where I used concurrency:\n        * Graceful Shutdown\n        * Kafka producer-consumer relation\n        * User confirm.\n        * In-memory caching\n      \u003c/details\u003e\n    \u003c/li\u003e\n     \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003ePostgreSQL\u003c/summary\u003e\n        As a main database storage. Because of their open-source and availability, I preffered to use this database. Relational Database helped me to build relations among the entities, and it helped\n        to build an application structured around a relationship between data tables.\n      \u003c/details\u003e\n    \u003c/li\u003e\n     \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003eRedis\u003c/summary\u003e\n        As a NoSQL database, I used Redis to cache the most used and unchanged data, and this helped me to retrieve the data faster.\n        This provides improved read performance (as requests can be split among the servers) and faster recovery when the primary server experiences an outage\n      \u003c/details\u003e\n    \u003c/li\u003e\n      \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003eKafka\u003c/summary\u003e\n        I used Kafka as a message broker. Because Kafka streams messages with very low latency and is suitable to analyze streaming data in real time. \n        It can be used as a monitoring service to raise alerts and etc.\n        Kafka is suitable for my app that need to reanalyze the received data\n      \u003c/details\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003egRPC\u003c/summary\u003e\n         gRPC uses a binary format for data serialization and communication, which is much more efficient than traditional text-based formats such as JSON or XML. \n        This results in faster and more efficient communication between microservices.\n      \u003c/details\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003eDocker\u003c/summary\u003e\n         Docker helps to containerize the application which can help to easy-sharing among the users and by installing some dependencies such as Redis and Kafka to project.\n         Docker lets you build, test, and deploy applications quickly\n         Because Docker containers encapsulate everything an application needs to run (and only those things), they allow applications to be shuttled easily between environments.\n      \u003c/details\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003eSwagger\u003c/summary\u003e\n        Swagger allowed me to describe the structure of my APIs so that machines can read them. The ability of APIs to describe their own structure is the root of all awesomeness in Swagger.\n      \u003c/details\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003eGrafana\u003c/summary\u003e\n         Grafana helps me to visualize the data and monitor the proccess of my app, I collect the metrics from Prometheus and visualizing them in Grafana on localhost:3000\n      \u003c/details\u003e\n    \u003c/li\u003e\n     \u003cli\u003e\n      \u003cdetails\u003e\n        \u003csummary\u003ePrometheus\u003c/summary\u003e\n        Prometheus can collect and store metrics as time-series data, recording information with a timestamp, and I am visualizing them in Grafana\n      \u003c/details\u003e\n    \u003c/li\u003e\n  \u003c/ul\u003e\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\n## Installation\n\n2. Clone the repo\n   ```sh\n   git clone https://github.com/Rahugg/CRM-system-go-microservices.git\n   ```\n3. Install go packages\n   ```sh\n   go mod tidy\n   ```\n4. Launch docker-compose \n   ```\n   docker-compose up\n   ```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Launch\n  1. To launch the auth-service: (make sure that the docker-compose is up) \n  ```\n    make start-auth\n  ```\n  (Check makefile for other scripts)\n  \u003cbr/\u003e\n  2. To launch the crm_core service: (make sure that the docker-compose is up)\n  ```\n    make start-crm\n  ```\n  (Check makefile for other scripts)\n  \n## Migrate\n  1. To migrate the data and tables on services:(Check makefile for other scripts)\n  ```\n    make migrate-up\n  ```\n  2. To mock the database with mock data:(Check makefile for other scripts)\n  ```\n    make mock-data\n  ```\n  3. To drop all of the tables:\n  ```\n    make migrate-down\n  ```\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n  \n## [Architecture of project](pkg/crm_core/img/architecture-of-project.png)\n## [Detailed](pkg/crm_core/img/detailed-architecture.png)\n\n\u003c!-- CONTACT --\u003e\n## Contact\n\nAmanbek - [@telegram_handle](https://t.me/Rahuggg) - Rahuggg\n\nProject Link: [https://github.com/Rahugg/CRM-system-go-microservices](https://github.com/Rahugg/CRM-system-go-microservices)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[forks-shield]: https://img.shields.io/github/forks/Rahugg/CRM-system-go-microservices.svg?style=for-the-badge\n[forks-url]: https://github.com/Rahugg/CRM-system-go-microservices/network/members  \n[stars-shield]: https://img.shields.io/github/stars/Rahugg/CRM-system-go-microservices.svg?style=for-the-badge\n[stars-url]: https://github.com/Rahugg/CRM-system-go-microservices/stargazers\n[license-shield]: https://img.shields.io/badge/license-MIT-blue\n[license-url]: https://github.com/Rahugg/CRM-system-go-microservices/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://linkedin.com/in/amanbek-faizolla\n[Golang-badge]: https://img.shields.io/badge/Go-00ADD8?style=for-the-badge\u0026logo=go\u0026logoColor=white\n[Golang-url]: https://golang.org/\n[Gin-badge]: https://img.shields.io/badge/Gin-00ADD8?style=for-the-badge\u0026logo=go\u0026logoColor=white\n[Gin-url]: https://gin-gonic.com/\n[PostgreSQL-badge]: https://img.shields.io/badge/PostgreSQL-336791?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white\n[PostgreSQL-url]: https://www.postgresql.org/\n[Redis-badge]: https://img.shields.io/badge/Redis-DC382D?style=for-the-badge\u0026logo=redis\u0026logoColor=white\n[Redis-url]: https://redis.io/\n[Kafka-badge]: https://img.shields.io/badge/Apache%20Kafka-231F20?style=for-the-badge\u0026logo=apache-kafka\u0026logoColor=white\n[Kafka-url]: https://kafka.apache.org/\n[gRPC-badge]: https://img.shields.io/badge/gRPC-00ADD8?style=for-the-badge\u0026logo=go\u0026logoColor=white\n[gRPC-url]: https://grpc.io/\n[Docker-badge]: https://img.shields.io/badge/Docker-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white\n[Docker-url]: https://www.docker.com/\n[Swagger-badge]: https://img.shields.io/badge/Swagger-85EA2D?style=for-the-badge\u0026logo=swagger\u0026logoColor=black\n[Swagger-url]: https://swagger.io/\n[Grafana-badge]: https://img.shields.io/badge/Grafana-F46800?style=for-the-badge\u0026logo=grafana\u0026logoColor=white\n[Grafana-url]: https://grafana.com/\n[Prometheus-badge]: https://img.shields.io/badge/Prometheus-E6522C?style=for-the-badge\u0026logo=prometheus\u0026logoColor=white\n[Prometheus-url]: https://prometheus.io/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahugg%2Fcrm-system-go-microservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frahugg%2Fcrm-system-go-microservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahugg%2Fcrm-system-go-microservices/lists"}