A plataforma que permiti aos usuários montar playlists com links para seus vídeos preferidos, separados por categorias.
🪧 Vitrine.Dev | |
---|---|
✨ Nome | Challenge Back-End 5ª edição - AluraFlix |
🏷️ Tecnologias | c#, .Net 6, SQL Server, Entity, Identity, JWT, XUnit |
🔥 Desafio | https://www.alura.com.br/challenges/back-end |
O objetivo do Alura Challenge é aplicar os conhecimentos obtidos através dos cursos disponíveis na plataforma. As tarefas são disponibilizadas ao início de cada uma das 4 semans de challenge. Não há restrição quanto a qual técnologia deva ser utilizada pelos alunos, ficando a cargo de cada um decidir como irá construir o projeto.
- As rotas agora requerem autenticação, menos get Videos e Categorias.
- Apenas o adminstrador pode cadastrar, alterar ou deletar uma categoria.
- Há um novo endpoint para acessar apenas os videos do próprio usuário.
- Apenas o proprietário do video pode alterar ou deletar um video.
- Implementado soft delete para videos.
- Implementada rota para que o adminstrador tenha acesso a todos os videos, incluindo os videos deletados.
Após alguns testes com protótipos feitos pelo time de UX de uma empresa, foi requisitada a primeira versão de uma plataforma para compartilhamento de vídeos. A plataforma deve permitir ao usuário montar playlists com links para seus vídeos preferidos, separados por categorias.
Os times de frontend e UI já estão trabalhando no layout e nas telas. Para o backend, as principais funcionalidades a serem implementadas são:
- API com rotas implementadas segundo o padrão REST;
- Validações feitas conforme as regras de negócio;
- Implementação de base de dados para persistência das informações;
- Serviço de autenticação para acesso às rotas POST, PUT e DELETE.
- Armazenar no banco de dados as informações sobre os vídeos
- Todos os campos de vídeos devem ser obrigatórios e validados.
- Implementar para /videos POST/GET/GET_ID/PUT/DELETE.
- PUT atualiza um ou mais campos de um vídeo.
- Armazenar no banco de dados as informações sobre as categorias.
- Uma nova categoria não pode ser criada caso tenha algum campo vazio.Caso em branco, informar:
O campo é obrigatório
. - Implementar para /categorias POST/GET/GET_ID/PUT/DELETE.
- Implemente uma relação entre vídeos e categorias, atribuindo para cada vídeo uma categoria.
- Criar uma rota
GET
relacionandocategorias
evideos
, exemplo:GET categorias/:id/videos/
. - Criar uma rota que busque vídeos por nome via
query parameters
, exemplo:GET /videos/?search=jogos
. - A categoria com
ID = 1
, deve chamarLIVRE
e caso ela não seja especificada na criação do vídeo, atribuir oID = 1
. - Criar testes de unidade para os modelos e controller.
- Crie testes de integração.
- Sistema de autenticação.
- Alteração no banco de dados para tabela de usuário.
- Deploy.
- .NET 6
- EntityFrameworkCore 6.0
- AutoMapper
- IdentityFramework 6.0
- JWT Bearer
- FluentResults
- DotEnv
- SQL Sever 2022
- Swagger
- Docker
Clone o projeto para seu repositório.
Instale as dependências através do comando:
dotnet restore
Configure sua connection string pelo user-secrets com o comando:
dotnet user-secrets "DbConnection" "SUA_STRING_AQUI"
Criar a base de dados:
dotnet ef database update
O adminstrador deve ser criado direto no banco de dados e deve ser atribuído o papel amdmin para o mesmo.
Crie um arquivo .env
na raiz do projeto PlayListAPI seguindo o modelo do arquivo .env.example
Método | Autorização | Rota | Descrição | Body Params | Query Params |
---|---|---|---|---|---|
POST | Admin | /categorias | Cadastra nova categoria | JSON | - |
GET | - | /categorias/{id} |
Retorna uma categoria por id numérico | - | - |
GET | - | /categorias/{id}/ /videos |
Retorna lista de videos pertencentes a categoria | - | - |
GET | - | /categorias | Retorna todas as categorias | - | - |
PUT | Admin | /categorias/{id} |
Permite atualizar uma categoria. | JSON | - |
Retorna dados atualizados. | |||||
DELETE | Admin | /categorias/{id} |
Exclui a categoria indicada pelo id. | - | - |
Método | Autorização | Rota | Descrição | Body Params | Query Params |
---|---|---|---|---|---|
POST | User | /videos | Cadastra novo video | JSON | - |
GET | - | /videos | Retorna lista de videos paginado | - | ?page=1 &pageSize=5 |
GET | - | /videos | Retorna videos com título informado | - | ?page=1 &pageSize=5 &search=Titulo do video |
GET | - | /videos/{id} |
Retorna um video por id numérico | - | - |
GET | User | /meus_videos | Retorna lista de videos do usuário logado | - | |
PUT | User | /videos/{id} |
Permite atualizar um ou mais dados do video. | JSON | - |
DELETE | User | /videos/{id} |
Exclui um video indicado pelo id. | - | - |
GET | Admin | /videos/Todos | Retorna todos os videos incluindo deletados. | - | - |
Método | Autorização | Rota | Descrição | Body Params | Query Params |
---|---|---|---|---|---|
POST | - | /User/CriarLogin | Cadastra novo Usuario | JSON | - |
POST | - | /User/Login | Verifica usuário e retorna token de acesso | JSON | - |
POST | - | /User/Logout | Desloga usuário | JSON | - |