{"id":36726068,"url":"https://github.com/microphoneabuser/balance-service","last_synced_at":"2026-01-12T12:01:49.516Z","repository":{"id":65389398,"uuid":"418022684","full_name":"microphoneabuser/balance-service","owner":"microphoneabuser","description":"Golang REST API реализующий работу с балансом пользователей","archived":false,"fork":false,"pushed_at":"2021-11-03T16:07:40.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-16T00:43:14.951Z","etag":null,"topics":["docker","docker-compose","postgresql","rabbitmq"],"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/microphoneabuser.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}},"created_at":"2021-10-17T04:50:16.000Z","updated_at":"2022-06-27T08:26:26.000Z","dependencies_parsed_at":"2023-01-21T00:40:14.435Z","dependency_job_id":null,"html_url":"https://github.com/microphoneabuser/balance-service","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/microphoneabuser/balance-service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microphoneabuser%2Fbalance-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microphoneabuser%2Fbalance-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microphoneabuser%2Fbalance-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microphoneabuser%2Fbalance-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microphoneabuser","download_url":"https://codeload.github.com/microphoneabuser/balance-service/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microphoneabuser%2Fbalance-service/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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","docker-compose","postgresql","rabbitmq"],"created_at":"2026-01-12T12:01:49.310Z","updated_at":"2026-01-12T12:01:49.491Z","avatar_url":"https://github.com/microphoneabuser.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Микросервис для работы с балансом пользователей\n\n## Список используемых технологий:\n\n* [Gin](https://github.com/gin-gonic/gin) - HTTP Go Framework\n* [Postgres](https://github.com/lib/pq) - СУБД PostgreSQL\n* [Redis](https://github.com/go-redis/redis) - Реализация кэширования курса валют (ответа [freecurrencyapi.net](https://freecurrencyapi.net))\n* [RabbitMQ](https://github.com/streadway/amqp) - RabbitMQ для реализации очереди SMS-уведомлений для последующей отправки, выполняемой другим микросервисом\n* [Docker](https://www.docker.com/) - Docker\n* [viper](https://github.com/spf13/viper) - Работа с файлами конфигурации\n* [sqlx](https://github.com/jmoiron/sqlx) - Работа с БД\n* [migrate](https://github.com/golang-migrate/migrate) - Миграции в БД\n\n## Для запуска приложения:\n\n``` bash\nmake build \u0026\u0026 make run\n```\n\nЕсли приложение запускается впервые, необходимо применить миграции к базе данных:\n\n``` bash\nmake migrate\n```\n\n# Примеры запросов/ответов\n\n[![Run in Postman](https://run.pstmn.io/button.svg)](https://www.postman.com/altimetry-cosmonaut-24747535/workspace/9b7c651f-7961-43ec-99a6-3af777ee7f1e/documentation/17406947-515440b7-8466-465d-bc3e-a49c8e40cc53)\n\n### Получить баланс пользователя\n``` bash\nGET http://localhost:8080/balance\n# Body(json)\n{\n    \"id\": 1\n}\n```\n\n### Получить баланс пользователя в валюте, отличной от рубля (пример - USD)\n``` bash\nGET http://localhost:8080/balance?currency=USD\n# Body(json)\n{\n    \"id\": 1\n}\n```\n\n### Зачислить деньги на счет\n``` bash\nPOST http://localhost:8080/accrual\n# Body(json)\n{\n    \"id\": 1,\n    \"amount\": 1000.0\n}\n```\n\n### Списать деньги со счета\n``` bash\nPOST http://localhost:8080/debiting\n# Body(json)\n{\n    \"id\": 1,\n    \"amount\": 200.0\n}\n```\n\n### Перевести деньги с одного счета на другой\n``` bash\nPOST http://localhost:8080/transfer\n# Body(json)\n{\n    \"sender_id\": 1,\n    \"recipient_id\": 2,\n    \"amount\": 1000.0,\n    \"description\": \"Перевод на покупку чего-то\"\n}\n```\n\n### Просмотреть транзакции связанные с заданным счетом (с сортировкой по убыванию даты и пагинацией)\n``` bash\nGET http://localhost:8080/transactions?limit=10\u0026offset=0\u0026sort=timestamp:desc\n# Body(json)\n{\n    \"id\": 2\n}\n```\n\n### Просмотреть транзакции связанные с заданным счетом (с сортировкой по возрастанию суммы и пагинацией)\n``` bash\nGET http://localhost:8080/transactions?limit=10\u0026offset=0\u0026sort=amount:asc\n# Body(json)\n{\n    \"id\": 2\n}\n```\n\n## RabbitMQ\n\nЧтобы просмотреть содержимое очереди для отправки SMS-уведомлений нужно перейти по ссылке: http://localhost:15672/#/queues/%2F/sms-queue\n* Username: guest\n* Password: guest\n\nДанная очередь предназначена для уведомления пользователей о всех действиях произведенных с его счетом (зачисления, списания, переводы). В коде данного микросервиса формируется и публикуется в очередь полное сообщение с id пользователя, которому нужно отправить SMS. \nПример сообщения:\n``` bash\n{\n    \"account_id\":2,\n    \"message\":\"Счет-2 Зачисление 1000.00р Баланс: 1000.00р\"\n}\n```\nЗадумка в том, что данные сообщения должен читать другой микросервис (consumer) и непосредственно производить отправку SMS-сообщения. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrophoneabuser%2Fbalance-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrophoneabuser%2Fbalance-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrophoneabuser%2Fbalance-service/lists"}