{"id":25860085,"url":"https://github.com/leandrordg/api-restaurantes","last_synced_at":"2025-10-24T11:29:34.975Z","repository":{"id":279984704,"uuid":"940624980","full_name":"leandrordg/api-restaurantes","owner":"leandrordg","description":"Uma API de gerenciamento de mesas e reservas para restaurantes.","archived":false,"fork":false,"pushed_at":"2025-03-01T13:58:38.000Z","size":36,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T14:34:11.991Z","etag":null,"topics":["drizzle","fastify","postgresql","typescript"],"latest_commit_sha":null,"homepage":"https://api-restaurantes.vercel.app/docs","language":"TypeScript","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/leandrordg.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":"2025-02-28T14:04:25.000Z","updated_at":"2025-03-01T13:58:45.000Z","dependencies_parsed_at":"2025-03-01T14:34:15.884Z","dependency_job_id":null,"html_url":"https://github.com/leandrordg/api-restaurantes","commit_stats":null,"previous_names":["leandrordg/reservas-restaurantes","leandrordg/api-restaurantes"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fapi-restaurantes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fapi-restaurantes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fapi-restaurantes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandrordg%2Fapi-restaurantes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leandrordg","download_url":"https://codeload.github.com/leandrordg/api-restaurantes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241430317,"owners_count":19961635,"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","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":["drizzle","fastify","postgresql","typescript"],"created_at":"2025-03-01T21:53:16.268Z","updated_at":"2025-10-24T11:29:34.912Z","avatar_url":"https://github.com/leandrordg.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🍽️ API Restaurantes\n\n## 📝 Sobre o Projeto\nA **API Restaurantes** é um sistema de gerenciamento de mesas e reservas para restaurantes. Permite que usuários façam cadastro, login, visualizem mesas disponíveis e realizem reservas. Administradores possuem permissões adicionais para gerenciar mesas e reservas, garantindo um controle eficiente do restaurante.\n\n🔗 **Documentação interativa da API:** [Swagger Docs](https://api-restaurantes.vercel.app/docs)\n\n## 🚀 Tecnologias Utilizadas\n- **🦕 Linguagem:** TypeScript\n- **⚡ Framework:** Fastify\n- **🗄️ ORM:** Drizzle ORM\n- **✅ Validação:** Zod\n- **🔐 Autenticação:** JSON Web Token (JWT)\n- **🛡️ Middlewares de Segurança:** verifyJWT e verifyAdmin\n- **🐘 Banco de Dados:** PostgreSQL\n- **📦 Containerização:** Docker\n- **📖 Documentação:** Swagger\n\n---\n\n## 🏗️ Estrutura do Banco de Dados\n\n```sql\nCREATE TABLE \"reservations\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"usuario_id\" uuid NOT NULL,\n\t\"mesa_id\" uuid NOT NULL,\n\t\"data_reserva\" timestamp NOT NULL,\n\t\"status\" text DEFAULT 'ativo' NOT NULL,\n\t\"created_at\" timestamp DEFAULT now()\n);\n\nCREATE TABLE \"tables\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"nome\" text NOT NULL,\n\t\"capacidade\" integer NOT NULL,\n\t\"status\" text DEFAULT 'disponivel' NOT NULL,\n\t\"created_at\" timestamp DEFAULT now()\n);\n\nCREATE TABLE \"users\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"nome\" text NOT NULL,\n\t\"email\" text NOT NULL,\n\t\"senha\" text NOT NULL,\n\t\"role\" text DEFAULT 'cliente' NOT NULL,\n\t\"created_at\" timestamp DEFAULT now(),\n\tCONSTRAINT \"users_email_unique\" UNIQUE(\"email\")\n);\n\nALTER TABLE \"reservations\" ADD CONSTRAINT \"reservations_usuario_id_users_id_fk\" FOREIGN KEY (\"usuario_id\") REFERENCES \"users\"(\"id\");\nALTER TABLE \"reservations\" ADD CONSTRAINT \"reservations_mesa_id_tables_id_fk\" FOREIGN KEY (\"mesa_id\") REFERENCES \"tables\"(\"id\");\n```\n\n---\n\n## 🔗 Endpoints Principais\n\n### 🧑‍💼 Usuários\n- **`POST /usuarios/registrar`** - Registrar um novo usuário\n- **`POST /usuarios/login`** - Fazer login\n\n### 🍽️ Mesas *(Requer [verifyJWT, verifyAdmin] para modificações)*\n- **`GET /mesas`** - Listar todas as mesas\n- **`POST /mesas`** - Criar uma nova mesa *([verifyJWT, verifyAdmin])*\n- **`PATCH /mesas/:id`** - Atualizar uma mesa *([verifyJWT, verifyAdmin])*\n- **`DELETE /mesas/:id`** - Excluir uma mesa *([verifyJWT, verifyAdmin])*\n\n### 📆 Reservas *(Requer verifyJWT para acesso)*\n- **`GET /reservas`** - Listar todas as reservas *(verifyJWT)*\n- **`POST /reservas`** - Criar uma nova reserva *(verifyJWT)*\n- **`PATCH /reservas/:id/cancelar`** - Cancelar uma reserva *(verifyJWT)*\n\n---\n\n## ⚙️ Como Rodar o Projeto\n\n1️⃣ Clone o repositório:\n```sh\ngit clone https://github.com/leandrordg/api-restaurantes.git\ncd api-restaurantes\n```\n\n2️⃣ Instale as dependências com pnpm:\n```sh\npnpm install\n```\n\n3️⃣ Configure o Docker e inicie o banco de dados:\n```sh\ndocker-compose up -d\n```\n\n4️⃣ Inicie o servidor:\n```sh\npnpm dev\n```\n\n---\n\n## 🎯 Funcionalidades\n\n👥 **Clientes podem:**\n✅ Criar conta e fazer login\n✅ Visualizar mesas disponíveis\n✅ Consultar suas reservas\n✅ Realizar novas reservas\n✅ Cancelar reservas\n\n🛠️ **Administradores podem:**\n✅ Fazer tudo que um cliente pode\n✅ Criar, editar e excluir mesas\n✅ Gerenciar reservas\n\n---\n\n## 💡 Decisões Técnicas\nAs tecnologias foram escolhidas por sua eficiência e velocidade:\n- **Fastify**: Framework rápido e leve para APIs.\n- **Drizzle ORM**: ORM moderno e flexível.\n- **PostgreSQL**: Banco de dados robusto e confiável.\n- **Docker**: Facilita a gestão de dependências.\n- **Zod**: Validação segura de dados.\n- **JWT**: Autenticação baseada em tokens para maior segurança.\n- **Middlewares verifyJWT e verifyAdmin**: Utilizados como `[verifyJWT, verifyAdmin]` para proteger rotas administrativas.\n- **Swagger**: Documentação clara e acessível para facilitar o uso da API.\n\n---\n\n🚀 **Feito com 💙 para restaurantes e desenvolvedores!**\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleandrordg%2Fapi-restaurantes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleandrordg%2Fapi-restaurantes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleandrordg%2Fapi-restaurantes/lists"}