https://github.com/hiagoisoppo/trybets
Uma RestAPI, desenvolvida em ASP.NET com o objetivo de gerenciar uma casa de apostas, através de um CRUD em microsserviços.
https://github.com/hiagoisoppo/trybets
asp-net asp-net-core asp-net-mvc authentication csharp dotnet dotnet-core efcore entity-framework-core jwt-bearer-tokens xunit
Last synced: about 2 months ago
JSON representation
Uma RestAPI, desenvolvida em ASP.NET com o objetivo de gerenciar uma casa de apostas, através de um CRUD em microsserviços.
- Host: GitHub
- URL: https://github.com/hiagoisoppo/trybets
- Owner: hiagoisoppo
- License: mit
- Created: 2024-05-21T20:15:09.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-05-22T02:10:50.000Z (about 2 years ago)
- Last Synced: 2025-02-28T12:09:00.446Z (over 1 year ago)
- Topics: asp-net, asp-net-core, asp-net-mvc, authentication, csharp, dotnet, dotnet-core, efcore, entity-framework-core, jwt-bearer-tokens, xunit
- Language: C#
- Homepage:
- Size: 7.97 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README

# TryBets







## Descrição:
A Trybets é uma RestAPI, desenvolvida em ASP.NET com o objetivo de gerenciar uma casa de apostas, através de um CRUD em microsserviços, e armazenar todas informações em um banco de dados com segurança e validações necessarias. Durante o desenvolvimento foi utilizado as seguintes tecnologias: .NET Core, ASP.NET Core Mvc, JWT Authentication, C#, Entity Framework Core, xUnit, Microsoft SQL Server e Docker.
## Funcionalidades:
- Endpoints que serão conectados ao banco de dados seguindo princípios REST.
- Gerenciamento de times e partidas.
- Controle de usuários através de validação JWT.
- Gerenciamento de apostas, individuais por usuário.
- Controle dinâmico das chances de vitória (odd).
## Como acessar com Docker
**:warning: Docker Compose `1.29`, Entity Framewok CLI `8.0.3` ou versões superiores**
- Abra o terminal e faça um clone do repositório.
```bash
git clone git@github.com:hiagoisoppo/trybets.git
```
- Acesse a pasta clonada do repositório.
```bash
cd trybets
```
- Execute o conjunto de microsserviços.
```bash
docker-compose up -d --build
```
- Acesse a pasta do app em monolito e execute as migrações e seeder.
```bash
cd src/TryBets
dotnet ef migrations add Master
dotnet ef database update
dotnet ef migrations add Seeder
dotnet ef database update
```
- Agora vá em “Usando solicitações HTTP para testar a API”.
## Usando solicitações HTTP para testar a API
- Acesse uma plataforma de sua preferência para fazer solicitações HTTP, como [ThunderClient](https://www.thunderclient.com/) ou [Insomnia](https://insomnia.rest/).
- Importe o arquivo de solicitação HTTP válido para sua plataforma da pasta `requestCollection`.
- Agora você pode testar esta API.
## ASP.NET RestAPI - Endpoints
### `GET` /team
Rota utilizada para obter a lista de times.
Request
Token?
Status
Response
(em branco)
Não
200
[
{
"teamId": 1,
"teamName": "Sharks"
}, /*...*/
]
### `GET` /match/{finished}
Rota utilizada para obter a lista de partidas. Parâmetro {finished} varia entre `true` e `false` para listar partidas finalizadas ou não.
Request
Token?
Status
Response
(em branco)
Não
200
[
{
"matchId": 1,
"matchDate": "2023-07-23T15:00:00",
"matchTeamAId": 1,
"matchTeamBId": 8,
"teamAName": "Sharks",
"teamBName": "Bulls",
"matchTeamAOdds": "3,33",
"matchTeamBOdds": "1,43",
"matchFinished": true,
"matchWinnerId": 1
}, /*...*/
]
### `POST` /user/signup
Rota utilizada para cadastrar uma nova pessoa usuária. Ao cadastrar com sucesso, retorna um token. Não permitido adicionar duas pessoas usuárias com o mesmo e-mail.
Request
Token?
Status
Response
Observações
{
"Name": "Isabel Santos",
"Email": "isabel.santos@trybets.com",
"Password": "123456"
}
Não
201
{
"token": "eyJhbG..."
}
{
"Name": "Isabel Santos",
"Email": "isabel.santos@trybets.com",
"Password": "123456"
}
Não
400
{
"message": "E-mail already used"
}
Caso o e-mail da pessoa usuária já tenha sido cadastrado no banco de dados.
### `POST` /user/login
Rota utilizada para realizar o login de uma pessoa usuária.
Request
Token?
Status
Response
Observações
{
"Email": "isabel.santos@trybets.com",
"Password": "123456"
}
Não
200
{
"token": "eyJhbG..."
}
{
"Email": "isabel.santos@trybets.com",
"Password": "1234567"
}
Não
400
{
"message": "Authentication failed"
}
Caso a pessoa usuária não tenha os dados autenticados ou não informe algum dos parâmetros corretamente.
### `POST` /bet
Rota utilizada para realizar uma nova aposta
Request
Token?
Status
Response
Observações
{
"MatchId": 5,
"TeamId": 2,
"BetValue": 550.65
}
Sim
201
{
"betId": 1,
"matchId": 5,
"teamId": 2,
"betValue": 550.65,
"matchDate": "2024-03-15T14:00:00",
"teamName": "Eagles",
"email": "isabel.santos@trybets.com"
}
{
"MatchId": 5,
"TeamId": 2,
"BetValue": 550.65
}
Não
401
Caso o token não tenha sido informado ou esteja errado
{
"MatchId": 5,
"TeamId": 6,
"BetValue": 550.65
}
Sim
400
{
"message": "Team is not in this match"
}
Caso o time não esteja na partida correta
{
"MatchId": 5,
"TeamId": 60,
"BetValue": 550.65
}
Sim
400
{
"message": "Team not founded"
}
Caso o time não exista
{
"MatchId": 50,
"TeamId": 6,
"BetValue": 550.65
}
Sim
400
{
"message": "Match not founded"
}
Caso a partida não exista
{
"MatchId": 1,
"TeamId": 6,
"BetValue": 550.65
}
Sim
400
{
"message": "Match finished"
}
Caso a partida já tenha sido finalizada
### `GET` /bet/{BetId}
Rota utilizada para visualizar uma aposta criada. Uma aposta só pode ser visualizada pela pessoa que a criou.
Request
Token?
Status
Response
Observações
Sim
200
{
"betId": 1,
"matchId": 5,
"teamId": 2,
"betValue": 550.65,
"matchDate": "2024-03-15T14:00:00",
"teamName": "Eagles",
"email": "isabel.santos@trybets.com"
}
Sim
400
(Indiferente)
Caso a aposta não pertencer à pessoa usuária do token.
Sim
400
{
"message": "Bet not founded"
}
Caso a aposta não exista.
Não
401
Caso não seja informado um token.
### `PATCH` /odds/{matchId}/{teamId}/{BetValue}
Rota utilizada para atualizar o valor apostado em um time e em uma partida. O retorno da requisição seguirá a model `Match` sem necessitar realizar nenhuma operação de tratamento de dados, já que este microsserviço só será acessado pelo microsserviço `TryBets.Bet`.
Request
Token?
Status
Response
Observações
(em branco)
Não
200
{
"matchId": 1,
"matchDate": "2024-03-17T14:00:00",
"matchTeamAId": 5,
"matchTeamBId": 6,
"matchTeamAValue": 300.00,
"matchTeamBValue": 1501.50,
"matchFinished": false,
"matchWinnerId": null,
"matchTeamA": null,
"matchTeamB": null,
"bets": null
}
(em branco)
Não
400
(indiferente)
Qualquer tipo de erro que impeça a atualização