Skip to content

Uma RestAPI, desenvolvida em ASP.NET com o objetivo de gerenciar uma casa de apostas, através de um CRUD em microsserviços.

License

Notifications You must be signed in to change notification settings

hiagoisoppo/trybets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Application Preview

TryBets

Static Badge Static Badge Static Badge Static Badge Static Badge Static Badge Static Badge

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

⚠️ 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.
  git clone git@github.com:hiagoisoppo/trybets.git
  • Acesse a pasta clonada do repositório.
  cd trybets
  • Execute o conjunto de microsserviços.
  docker-compose up -d --build
  • Acesse a pasta do app em monolito e execute as migrações e seeder.
  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 ou Insomnia.
  • 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