‼️ Executando o projeto localmente
- Clone o repositório
- Use o comando:
git clone git@github.com:tryber/acc-csharp-0x-project-trybe-games.git
. - Entre na pasta do repositório que você acabou de clonar:
cd acc-csharp-0x-project-trybe-games
- Instale as dependências
- Entre na pasta
src/
. - Execute o comando:
dotnet restore
.
🛠 Testes
Para executar os testes com o .NET, execute o comando dentro do diretório do seu projeto src/TrybeGames
ou de seus testes src/TrybeGames.Test
!
dotnet test
Para executar um teste expecífico, basta executar o comando dotnet test --filter Name~TestMethod1
.
Este Projeto consiste em um sistema para gerenciar e armazenar dados de jogos jogados por Trybers.
Este sistema está dividido em pastas específicas, para que fique mais fácil de entender e separar as entidades.
Contracts/
Estão armazenadas asinterfaces
que uma classe pode implementar.Controller/
Estão armazenados os controllers responsáveis por realizar alguma ação que interage com a pessoa usuária e o banco de dados. No nosso caso há apenas um controller.Database/
Está armazenada a classe que representa o banco de dados do sistema. Essa classe contém uma lista de cada um dos modelos presentes no sistema e alguns métodos que podem ser utilizados para fazer consultas a essas listas e a relações entre elas.Models/
Contém os Modelos do sistema, no caso três:Game
,Player
,GameStudio
.
O arquivo Program.cs
utiliza a classe TrybeGamesController
para executar as ações com a pessoa usuária, então é possível ver o sistema em funcionamento ao executar o projeto em src/TrybeGames
com o comando dotnet test
. Porém algumas funcionalidades ainda não foram implementadas, e é para isso que você foi contratado.
Perceba que cada Game
possui duas relações com Player
:
- Um jogo
Game
pode ter várias pessoas jogadorasPlayer
utilizando para isso o membroGame.Players
, que é uma lista do tipo inteiro e armazena os Ids das pessoas jogadoras. - Uma pessoa jogadora
Player
pode ter vários jogosGame
comprados utilizando para isso o membroPlayer.GamesOwned
, que é uma lista do tipo inteiro e armazena os Ids dos jogos comprados.
GameStudio
, por sua vez, se relaciona apenas com Game
. Cada Game
é desenvolvido por um GameStudio
e é utilizado o campo Game.DeveloperStudio
, que é do tipo inteiro e armazena o Id do studio desenvolvedor do jogo.
Player
também pode ter uma lista de estúdios favoritos. Para isso é utilizado o seu membro Player.FavoriteGameStudios
, que é uma lista do tipo inteiro que armazena os Ids dos estúdios favoritos.
Esses Models, por sua vez, são utilizados na classe TrybeGamesDatabse
para compor o nosso banco de dados. E TrybeGamesDatabase
é utilizado em TrybeGamesController
para realizar as consultas e operações requisitadas pela pessoa usuária. Veja no diagrama completo abaixo todas as relações entre cada entidade do sistema.
Agora em mockConsole
temos um objeto mockado de IConsole
, e com ele podemos substituir o comportamento de funções e métodos de IConsole
. Para substituir o comportamento de uma função utilizamos o método .Setup()
desse novo objeto.
Este projeto pode ser executado com dotnet run
na pasta src/TrybeGames/
, várias funcionalidades de interação com a pessoa usuária foram implementadas.
Método AddPlayer()
no arquivo src/TrybeGames/TrybeGamesController.cs
Este método deve utiliza as entradas da pessoa usuária pelo Console
para criar uma nova pessoa jogadora e adicionar ao banco de dados
A nova pessoa jogadora inserida pelo Console
cria uma nova instância de Player
e insere no banco de dados database
, que é um atributo da classe TrybeGamesController
.
Desenvolva o teste para o método AddPlayer
Testes para o método AddPlayer
em src/TrybeGames.Test/TestTrybeGamesController.cs
no método TestAddPlayer
.
Método AddGameStudio()
no arquivo src/TrybeGames/TrybeGamesController.cs
Este método utiliza as entradas da pessoa usuária pelo Console
para criar um novo Estúdio de Jogos e adicionar ao banco de dados
Desenvolvido uma lógica para receber da pessoa usuária o nome do novo Estúdio de Jogos pelo Console
e assim criar uma nova instância de GameStudio
e inserir este no banco de dados database
, que é um atributo da classe TrybeGamesController
.
O atributo Id é incrementado a cada novo estúdio que entrar no banco de dados.
Desenvolvido o teste para o método AddGameStudio
Testes para o método AddGameStudio
em src/TrybeGames.Test/TestTrybeGamesController.cs
no método TestAddGameStudio
.
Método AddGame()
no arquivo src/TrybeGames/TrybeGamesController.cs
Este método utiliza as entradas da pessoa usuária pelo Console
para criar um novo Jogo e adicionar ao banco de dados
Desenvolvido uma lógica para receber da pessoa usuária os seguintes dados de um jogo:
- Nome (
Name
). - Data de lançamento (
ReleaseDate
). - Tipo de jogo (
GameType
).
Este método faz as conversões necessárias para criar uma nova instância de Game
corretamente inserindo-as no banco de dados database
, que é um atributo da classe TrybeGamesController
.
Desenvolvido o teste para o método AddGame
Testes para o método AddGame
em src/TrybeGames.Test/TestTrybeGamesController.cs
no método TestAddGame
.
Método GetGamesDevelopedBy()
no arquivo src/TrybeGames/Database/TrybeGamesDatabase.cs
Este método recebe por parâmetro um estúdio de jogos e retornar todos os jogos que aquele estúdio desenvolveu
Por se tratar de um método da classe TrybeGamesDatabase
, este não lida com entradas e interações com a pessoa usuária. Porém ele será utilizado pelo método QueryGamesFromStudio
para buscar os jogos desenvolvidos pelo estúdio selecionado neste método.
No método GetGamesDevelopedBy
, foi utilizado as listas de Game
, Player
e GameStudio
presentes em TrybeGamesDatabase
e suas relações para buscar e retornar uma lista de jogos List<Game>
.
Desenvolvido o teste para o método GetGamesDevelopedBy
Testes para o método GetGamesDevelopedBy
em src/TrybeGames.Test/TestTrybeGamesDatabase.cs
no método TestGetGamesDevelopedBy
.
Método GetGamesPlayedBy()
no arquivo src/TrybeGames/Database/TrybeGamesDatabase.cs
Este método recebe por parâmetro uma pessoa jogadora e retornar todos os jogos jogados por aquela pessoa jogadora
Por se tratar de um método da classe TrybeGamesDatabase
, este não lida com entradas e interações com a pessoa usuária. Porém ele será utilizado pelo método QueryGamesPlayedByPlayer
para buscar os jogos jogados pela pessoa jogadora selecionada neste método.
No método GetGamesPlayedBy
, foi utilizado as listas de Game
, Player
e GameStudio
presentes em TrybeGamesDatabase
e suas relações para buscar e retornar uma lista de jogos List<Game>
.
Desenvolvido o teste para o método GetGamesPlayedBy
Testes para o método GetGamesPlayedBy
em src/TrybeGames.Test/TestTrybeGamesDatabase.cs
no método TestGetGamesPlayedBy
.
Método GetGamesOwnedBy()
no arquivo src/TrybeGames/Database/TrybeGamesDatabase.cs
Este método recebe por parâmetro uma pessoa jogadora e retornar todos os jogos que aquela pessoa jogadora possui
Por se tratar de um método da classe TrybeGamesDatabase
, este não lida com entradas e interações com a pessoa usuária. Porém ele será utilizado pelo método QueryGamesBoughtByPlayer
para buscar os jogos comprados pela pessoa jogadora selecionada neste método.
No método GetGamesOwnedBy
, foi utilizado as listas de Game
, Player
e GameStudio
presentes em TrybeGamesDatabase
e suas relações para buscar e retornar uma lista de jogos List<Game>
.
Desenvolvido o teste para o método GetGamesOwnedBy
Testes para o método GetGamesOwnedBy
em src/TrybeGames.Test/TestTrybeGamesDatabase.cs
no método TestGetGamesOwnedBy
.