Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kpsantiago/gym-pass-api
Re-implementation of a API of check-ins at Gyms, which is used .NET to make the API
https://github.com/kpsantiago/gym-pass-api
api api-rest aspnet cqrs csharp ddd dotnet
Last synced: about 2 months ago
JSON representation
Re-implementation of a API of check-ins at Gyms, which is used .NET to make the API
- Host: GitHub
- URL: https://github.com/kpsantiago/gym-pass-api
- Owner: KpSantiago
- Created: 2024-11-09T16:01:26.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2024-11-17T18:48:33.000Z (about 2 months ago)
- Last Synced: 2024-11-17T19:36:31.878Z (about 2 months ago)
- Topics: api, api-rest, aspnet, cqrs, csharp, ddd, dotnet
- Language: C#
- Homepage:
- Size: 2.02 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Gym-Pass API 2.0
API para a gestão de check-ins em academias, feita em .NET 8 é uma recriação de uma antiga API feita em Node.js.
Nela é possível realizar o gerenciamento de academias, check-ins e informações de usuário, abordando conceitos, como
CQRS, RBAC, DDD e SOLID principles.#### Tecnologias usadas
- .NET 8
- ASP.NET
- xUnit (Unit Testing)
- Entity Framework Core
- Swagger (Documentação de API)#### Conceitos usados
- Domain-Driven Design (DDD)
- SOLID principles
- Role-Based Access Controll (RBAC)
- Command Query Responsability Segregation (CQRS)`User`
| Method | Path | Action |
| ------ | ---- | ------ |
| POST | /api/v1/register | Realiza o cadastro de um novo usuário |
| POST | /api/v1/session | Realiza a autenticação do usuário |
| GET | /api/v1/user/profile | Resgata as informações do usuário |`Gyms`
| Method | Path | Action |
| ------ | ---- | ------ |
| POST | /api/v1/gyms | Realiza o cadastro de uma nova academia (Apenas admin) |
| GET | /api/v1/nearby | Busca as academias próxmias com base na localização do usuário |
| GET | /api/v1/search | Busca por academias |`Check-Ins`
| Method | Path | Action |
| ------ | ---- | ------ |
| POST | /api/v1/check-ins | Realiza o cadastro de um novo check-in |
| GET | /api/v1/check-ins/user/:userId/history | Resgata o histórico de check-ins do usuário |
| GET | /api/v1/check-ins/user/:userId/metrics | Resgata as métricas de check-ins do usuário |
| PATCH | /api/v1/check-ins/:checkInId/validate | Faz a validação de um check-in ao chegar na academia |### Application with DDD in .NET C#
```plaintext
/src
/Domain
- Biblioteca de Classes
- Entidades, Agregados, Repositórios (Interfaces), Serviços de Domínio
/Application
- Biblioteca de Classes
- Comandos, Consultas, Manipuladores
/Infrastructure
- Biblioteca de Classes
- Persistência, Repositórios (Implementações), Serviços Externos
/Shared
- Biblioteca de Classes
- DTOs, Eventos, Exceções Comuns
/API
- WebAPI
- Controladores, Configuração de Roteamento
```1. **Domain**
- ***Tipo de Projeto:*** Biblioteca de Classes- ***Responsabilidade:*** Contém as regras de negócio fundamentais e a lógica central do sistema, incluindo entidades, objetos de valor, agregados e serviços de domínio.
2. **Shared**
- ***Tipo de Projeto:*** Biblioteca de Classes
- ***Responsabilidade:*** Contém componentes reutilizáveis em toda a aplicação, como DTOs, eventos de domínio, exceções comuns, etc.
3. **Infra (Infrastructure) e Application**
<<<<<<< HEAD
- **Infrastructure:**
=======
- **Infrastructure:**
>>>>>>> origin/main
- ***Tipo de Projeto:*** Biblioteca de Classes- ***Responsabilidade:*** Implementa componentes de infraestrutura, como persistência de dados (contextos de banco de dados, repositórios concretos), serviços externos e outras dependências que suportam a aplicação.
<<<<<<< HEAD
- **Application:**
=======
- **Application:**
>>>>>>> origin/main- ***Tipo de Projeto:*** Biblioteca de Classes
- ***Responsabilidade:*** Orquestra a execução das operações de negócio, utilizando comandos e consultas (em uma abordagem CQRS). Esta camada coordena a comunicação entre a camada de domínio e outras camadas.
4. **API**
- ***Tipo de Projeto:*** WebAPI
- ***Responsabilidade:*** Expor endpoints HTTP para clientes externos, como aplicações front-end ou outros serviços. Inclui controladores que recebem requisições HTTP e orquestram a execução dos comandos e consultas.
### RF(Requisitos funcionais)
- [x] Deve ser possível o usuário realizar cadastro;
- [x] Deve ser possível o usuário se autenticar;
- [x] Deve ser possível obter o perfil de um usuário logado;
- [x] Deve ser possível obter o número de check-in feitos pelo cliente logado;
- [x] Deve ser possível o cliente buscar academias proximas;
- [x] Deve ser possível o usuário buscar cliente pelo nome;
- [x] Deve ser possível o cliente realizar check-in em uma academia;
- [x] Deve ser possível validar o check-in de um cliente;
- [x] Deve ser possível cadastrar uma academia;
- [x] Deve ser possível o cliente obter seu histórico de check-ins
- [x] Deve ser possível obter o número de check-ins feitos pelo cliente logado### RN(Regras de negócios)
- [x] O usuário não deve se cadastrar com um e-mail duplicado;
- [x] O usuário não pode fazer 2 check-ins no mesmo dia;
- [x] O usuário não deve fazer check-in se não estiver perto (100 metros) da academia;
- [x] O check-in só pode ser validado até 20 minutos após ter sido criado;
- [x] O check-in só pode ser validado por administradores;
- [x] A academia só poder cadastrada por administradores;### RNF(Requisitos não-funcionais)
- [x] A senha do usuário precisa ser criptografada
- [x] Os dados da aplicação precisam estar persistidos em bacno Postgres SQL;
- [x] Todas listas de dados precisam estar paginados com 20 items por página;
- [x] O usuário deve ser indentificado por token JWT(JSON Web Token);