{"id":50747911,"url":"https://github.com/lechitz/chat-grpc","last_synced_at":"2026-06-10T22:31:40.016Z","repository":{"id":322385975,"uuid":"1089271870","full_name":"lechitz/chat-grpc","owner":"lechitz","description":null,"archived":false,"fork":false,"pushed_at":"2025-11-04T06:35:32.000Z","size":7477,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-04T08:17:44.447Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/lechitz.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":"2025-11-04T05:45:03.000Z","updated_at":"2025-11-04T06:35:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lechitz/chat-grpc","commit_stats":null,"previous_names":["lechitz/chat-grpc"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/lechitz/chat-grpc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lechitz%2Fchat-grpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lechitz%2Fchat-grpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lechitz%2Fchat-grpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lechitz%2Fchat-grpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lechitz","download_url":"https://codeload.github.com/lechitz/chat-grpc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lechitz%2Fchat-grpc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34174148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"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":[],"created_at":"2026-06-10T22:31:39.386Z","updated_at":"2026-06-10T22:31:40.009Z","avatar_url":"https://github.com/lechitz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# chat-grpc\n\nServidor de chat em Go com gRPC bidirecional, salas em memória e suporte opcional a OpenTelemetry (traces e métricas) para ambientes locais ou baseados em containers.\n\n\nEste repositório foi pensado como um laboratório prático para experimentar e validar padrões importantes em sistemas distribuídos baseados em gRPC. A ideia não é apenas fornecer um servidor de chat funcional, mas oferecer uma base enxuta e repetível para testar:\n\n- Conectividade e streaming bidirecional: como clientes mantêm streams long‑lived com o servidor e como o servidor distribui eventos (join/leave/message) para participantes.  \n- Concorrência e coerência de sala: comportamento sob múltiplos clientes concorrentes (ordem de mensagens, perda de mensagens, limpeza de sessões).  \n- Resiliência e tratamento de erros: como o sistema reage a cancelamentos, quedas de cliente e reconexões.  \n- Observability / Telemetria: como instrumentar o serviço com OpenTelemetry (traces + métricas) e validar que spans e métricas chegam ao collector (OTLP gRPC/HTTP).  \n- Integração e deploy em containers: padrões práticos para empacotar o servidor/cliente em imagem Docker e testar redes entre serviços no Docker Compose.\n\n---\n\n## Sumário\n\n- [Visão geral](#visão-geral)\n- [Estrutura do repositório](#estrutura-do-repositório)\n- [Pré‑requisitos](#pre-requisitos)\n- [Execução local](#execução-local)\n- [Execução com Docker Compose](#execução-com-docker-compose)\n- [Cliente CLI](#cliente-cli)\n- [Geração de protos](#geração-de-protos)\n- [Testes e qualidade](#testes-e-qualidade)\n- [Comandos úteis](#comandos-úteis)\n\n---\n\n## Visão geral\n\n- Serviço gRPC com streaming bidirecional trocando envelopes (`ClientEnvelope` ↔ `ServerEvent`).\n- Núcleo de domínio em memória que gerencia salas, sessões e broadcast sem dependências externas.\n- Cliente CLI interativo para depuração e demonstrações rápidas.\n\n---\n\n## Estrutura do repositório\n\n- `cmd/chat-grpc` — entrypoint do servidor gRPC.\n- `cmd/chat-client` — cliente CLI interativo.\n- `api/proto` — definição `chat.proto` e o código gerado em `api/proto/chatv1`.\n- `internal/chat` — domínio, salas, sessão, orchestrators e adapters.\n- `internal/platform` — config, observability, logger adapter, servidor gRPC.\n- `infra/docker` — Dockerfile + ambiente Compose.\n- `infra/observability/otel` — configuração do Collector utilizado no Compose.\n- `tests/integration` — suíte de integração.\n- `makefiles` — alvos especializados usados pelo Makefile principal.\n\n---\n\n## Pre‑requisitos\n\n- Go 1.22+\n- Docker 24+ e Docker Compose Plugin (opcional)\n- `protoc` instalado para regenerar protos (opcional)\n\n---\n\n## Execução local\n\n1. (Opcional) Garanta caches locais para builds determinísticos:\n\n```bash\nexport GOCACHE=$PWD/.gocache\nexport GOMODCACHE=$PWD/.gomodcache\n```\n\n2. Suba o servidor diretamente:\n\n```bash\ngo run ./cmd/chat-grpc\n```\n\n3. Abra quantos clientes desejar (cada um em um terminal):\n\n```bash\ngo run ./cmd/chat-client\n```\n\n---\n\n## Execução com Docker Compose\n\nExistem três alvos principais no `Makefile` para o ambiente de desenvolvimento:\n\n- `make build-dev` — constrói a imagem Docker atualizada.\n- `make dev` —  sobe o ambiente completo (server + otel collector).\n- `make server` — sobe apenas o serviço `chat-grpc`.\n- `make client` — abre o cliente CLI dentro do Compose.\n\nFluxos recomendados:\n\n- Primeira vez / ambiente completo:\n\n```bash\nmake dev\n```\n\n- Iteração rápida se a imagem já existe:\n\n```bash\nmake server\n```\n\n- Forçar rebuild da imagem e subir o servidor:\n\n```bash\nmake build-dev\nmake server\n```\n---\n\n## Cliente CLI\n\nModo local:\n\n```bash\ngo run ./cmd/chat-client\n```\n\nModo via compose:\n\n```bash\nmake client\n```\n---\n\n## Geração de protos\n\nSe `api/proto/chat.proto` for modificado, regenere os artefatos:\n\n```bash\nmake proto\n```\n---\n\n## Testes e qualidade\n\n### Testes unitários\n\n```bash\nmake test\n```\n\n### Testes de integração\n\nOs testes de integração estão em `tests/integration`. Execute com:\n\n```bash\nmake test-integration\n```\n\n---\n\n## Comandos úteis\n\n- `make build` — compila binário do servidor local\n- `make run` — executa o servidor local\n- `make build-dev` — constrói imagem dev\n- `make dev` — sobe ambiente completo (build + up)\n- `make server` — sobe apenas o serviço do servidor\n- `make client` — abre cliente dentro do compose\n- `make test-integration` — roda testes de integração (tag integration)\n- `make lint` — roda linters/format\n- `make proto` — regenera código a partir do proto\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flechitz%2Fchat-grpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flechitz%2Fchat-grpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flechitz%2Fchat-grpc/lists"}