Olá! Seja bem vindo(a) a documentação da API, esta que tem como objetivo o gerenciamento de uma plataforma em que serão hospedados vídeos e seus respectivos marcadores, a aplicação também conta com sistema de usuários, turmas, módulos e sprints, permissão de aluno, instrutor, e administrador.
Visão geral do projeto, abaixo as principais tecnologias utilizadas e a url base da API.
URL base da API: https://backend-timestamp.herokuapp.com/
Clone o projeto em sua máquina e instale as dependências do projeto com o seguinte comando:
yarn
Em seguida, crie um arquivo .env, copiando o formato do arquivo .env.example:
.env
Configure suas variáveis de ambiente com suas credenciais do Postgres do seu banco de dados criado anteriormente.
Execute as migrations com o seguinte comando:
yarn prisma migrate dev
- POST - Criar usuário
- POST - Fazer login
- GET - Mostrar todos os dados do usuário
- GET - Listar todos os usuários
- GET - Mostrar um usuário a partir do id
- DELETE - Deletar usuário
- PATCH - Atualizar usuário
Rota responsável por criar um usuário, por padrão, o usuário criado será um estudante
Campos obrigatórios:
Campo | Tipo | Descrição |
---|---|---|
name | string | O nome do usuário. |
string | O email do usuário. | |
password | string | A senha de acesso do usuário |
groupId | string | O grupo do usuário. |
moduleId | string | O módulo do usuário. |
Exemplo de requisição de criação de usuário válida, corpo da requisição:
{
"name": "Sara Lins",
"email": "[email protected]",
"password": "sara#321",
"groupId": "5bd3b8cc-c522-406f-8218-b06fb2af4bca",
"moduleId": "430ec768-812c-4241-adb5-1c1129bb60d7"
}
Retorno da requisição:
{
"id": "22322984-3ebc-460d-8321-4ded36eeafa6",
"name": "Sara Lins",
"email": "[email protected]",
"role": "STUDENT",
"createdAt": "2022-11-08T15:23:59.091Z",
"updatedAt": "2022-11-08T15:23:59.091Z",
"groupId": "5bd3b8cc-c522-406f-8218-b06fb2af4bca",
"modules": [
{
"id": "21d5d36e-ee74-4514-a0f8-591fc7f5d37e",
"createdAt": "2022-11-08T15:23:59.091Z",
"updatedAt": "2022-11-08T15:23:59.091Z",
"userId": "22322984-3ebc-460d-8321-4ded36eeafa6",
"moduleId": "430ec768-812c-4241-adb5-1c1129bb60d7"
}
]
}
Status Code |
---|
201 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa de criar um usuário sem nome | You must provide a name | 400 |
Tentativa de criar um usuário sem email | You must provide a email | 400 |
Tentativa de criar um usuário sem senha | You must provide a password | 400 |
Tentativa de criar um usuário sem groupId | You must provide a group id | 400 |
Tentativa de criar um usuário sem moduleId | You must provide a module id | 400 |
Tentativa de criar um usuário com um group id inválido | Group not found | 404 |
Tentativa de criar um usuário com um module id inválido | Module not found | 404 |
Tentativa de criar um usuário com um email já cadastrado | Email is already in use | 409 |
Rota responsável pelo login do usuário, seja ele estudante, instrutor ou administrador, rota retorna um token de acesso
Campos obrigatórios:
Campo | Tipo | Descrição |
---|---|---|
string | O email do usuário. | |
password | string | A senha de acesso do usuário |
Exemplo de requisição de login válida, corpo da requisição:
{
"email": "[email protected]",
"password": "sara#321"
}
Retorno da requisição:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
}
Status Code |
---|
200 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa de login sem envio de email e/ou senha | Wrong email or password | 403 |
Tentativa de login com email não cadastrado | User not registered | 404 |
Tentativa de login com senha errada | Wrong email or password | 403 |
Rota responsável por retornar todos os dados do usuário a partir do token
Deve ser enviado:
- Token de autorização do tipo
Bearer token
Exemplo de requisição válida:
/users/profile, {
headers: {
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
}
}
Retorno da requisição:
{
"id": "22322984-3ebc-460d-8321-4ded36eeafa6",
"name": "Sara Lins",
"email": "[email protected]",
"role": "STUDENT",
"createdAt": "2022-11-08T15:23:59.091Z",
"updatedAt": "2022-11-08T15:23:59.091Z",
"groupId": "5bd3b8cc-c522-406f-8218-b06fb2af4bca",
"modules": [
{
"id": "21d5d36e-ee74-4514-a0f8-591fc7f5d37e",
"createdAt": "2022-11-08T15:23:59.091Z",
"updatedAt": "2022-11-08T15:23:59.091Z",
"userId": "22322984-3ebc-460d-8321-4ded36eeafa6",
"moduleId": "430ec768-812c-4241-adb5-1c1129bb60d7",
"module": {
"id": "430ec768-812c-4241-adb5-1c1129bb60d7",
"name": "M1",
"createdAt": "2022-11-08T15:23:59.091Z",
"groupId": "5bd3b8cc-c522-406f-8218-b06fb2af4bca",
"sprints": [
{
"id": "1830d0f7-1e17-4e03-b504-925c20dee960",
"name": "S1",
"moduleId": "430ec768-812c-4241-adb5-1c1129bb60d7",
"videos": []
},
...
]
}
}
],
"group": {
"id": "5bd3b8cc-c522-406f-8218-b06fb2af4bca",
"number": 12
}
}
Status Code |
---|
200 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa sem envio do token | Missing token | 401 |
Tentativa com envio de token inválido | Invalid or expired token | 401 |
Rota responsável por retornar alguns dados de todos os usuários
Deve ser enviado:
- Token de autorização do tipo
Bearer Token
com permissão de administrador
Exemplo de requisição válida:
/users, {
headers: {
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
}
}
Retorno da requisição:
[
{
"id": "22322984-3ebc-460d-8321-4ded36eeafa6",
"name": "Sara Lins",
"email": "[email protected]",
"role": "STUDENT",
"createdAt": "2022-11-08T15:23:59.091Z",
"updatedAt": "2022-11-08T15:23:59.091Z",
"groupId": "5bd3b8cc-c522-406f-8218-b06fb2af4bca"
},
...
]
Status Code |
---|
200 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa sem envio do token | Missing token | 401 |
Tentativa com envio de token inválido | Invalid or expired token | 401 |
Tentativa com envio de token de estudante ou instrutor | Access denied | 403 |
Rota responsável por retornar alguns dados de apenas um usuário a partir do id
Deve ser enviado:
- Token de autorização do tipo
Bearer Token
com permissão de administrador
Exemplo de requisição válida:
/users/22322984-3ebc-460d-8321-4ded36eeafa6, {
headers: {
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
}
}
Retorno da requisição:
{
"id": "22322984-3ebc-460d-8321-4ded36eeafa6",
"name": "Sara Lins",
"email": "[email protected]",
"role": "STUDENT",
"createdAt": "2022-11-08T15:23:59.091Z",
"updatedAt": "2022-11-08T15:23:59.091Z",
"groupId": "5bd3b8cc-c522-406f-8218-b06fb2af4bca"
}
Status Code |
---|
200 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa sem envio do token | Missing token | 401 |
Tentativa com envio de token inválido | Invalid or expired token | 401 |
Tentativa com envio de token de estudante ou instrutor | Access denied | 403 |
Tentativa com envio de id inválido | User not found | 404 |
Rota responsável pela deleção de um usuário a partir do id
Deve ser enviado
- Token de autorização do tipo
Bearer token
com permissão de administrador
Exemplo de requisição válida:
/users/22322984-3ebc-460d-8321-4ded36eeafa6, {
headers: {
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
}
}
Status Code |
---|
204 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa sem envio de token | Missing token | 401 |
Tentativa com envio de token inválido | Invalid or expired token | 401 |
Tentativa com envio de token de estudante ou instrutor | Access denied | 403 |
Tentativa com envio de id inválido | User not found | 404 |
Rota responsável pela atualização do usuário, apenas a turma(groupId) poderá ser alterada
Deve ser enviado
- Token de autorização do tipo
Bearer Token
com permissão de administrador
Campos obrigatórios:
Campo | Tipo | Descrição |
---|---|---|
groupId | string | O grupo do usuário |
Exemplo de requisição válida, corpo da requisição:
/users/22322984-3ebc-460d-8321-4ded36eeafa6, {
headers: {
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
},
body: {
"groupId": "7e44ec8c-84e2-42d1-aefb-09531c5ba937"
}
}
Retorno da requisição:
{
"id": "22322984-3ebc-460d-8321-4ded36eeafa6",
"name": "sara9",
"email": "[email protected]",
"role": "STUDENT",
"createdAt": "2022-11-05T00:15:25.632Z",
"updatedAt": "2022-11-08T21:42:55.051Z",
"groupId": "7e44ec8c-84e2-42d1-aefb-09531c5ba937"
}
Status Code |
---|
200 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa sem envio de token | Missing token | 401 |
Tentativa com envio de token inválido | Invalid or expired token | 401 |
Tentativa com envio de token de estudante ou instrutor | Access denied | 403 |
Tentativa com envio de id do usuário inválido | User not found | 404 |
Tentativa sem enviar o campo groupId | Need to provide the data in the request | 400 |
Tentativa com envios de campos além do groupId | It is only possible to update the groupId | 400 |
Tentativa com envios de group id igual | Provide a different groupId than the current one | 404 |
Rota para criação de turmas
- Necessário token de autorização
- Necessário ser administrador
- Não possui body na requisição
Body da resposta:
{
id: 'e7cdc0d9-d9ab-4fb3-b997-7e12954f83af',
number: 1,
modules: [
{
id: '68d0c629-448d-4a02-b28f-75b45a703bf9',
name: 'M1',
createdAt: '2022-11-10T02:30:26.065Z',
groupId: 'e7cdc0d9-d9ab-4fb3-b997-7e12954f83af',
sprints: [
...
]
}
]
}
Status Code |
---|
201 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should not be able to create a group without token | Missing token | 401 |
should not be able to create a group with invalid/expired token | Invalid or expired token | 401 |
should not be able to create a group without adm permission | Access denied | 403 |
Rota para listar turmas
- Necessário token de autorização
- Necessário ser administrador
- Não possui body na requisição
Body da resposta:
[
{
id: '43dde98f-5419-42ed-b7a1-603f49eb9852',
number: 1,
modules: [
{
...
}
] ,
users: [
{
...
}
]
},
...
]
Status Code |
---|
200 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should not be able to list groups without token | Missing token | 401 |
should not be able to list groups with invalid/expired token | Invalid or expired token | 401 |
should not be able to list groups without adm permission | Access denied | 403 |
should not be able to create a video with an invalid groupId | groupId not found | 404 |
Rota para encontrar turma através do ID
- Necessário token de autorização
- Necessário ser administrador
- Não possui body na requisição
Body da resposta:
[
{
id: '43dde98f-5419-42ed-b7a1-603f49eb9852',
number: 1,
modules: [
{
...
}
] ,
users: [
{
...
}
]
},
...
]
Status Code |
---|
200 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should not be able to find a group without token | Missing token | 401 |
should not be able to find a group with invalid/expired token | Invalid or expired token | 401 |
should not be able to find a group without adm permission | Access denied | 403 |
should not be able to create a video with an invalid groupId | groupId not found | 404 |
Rota responsável por criar um módulo, por padrão, o módulo será criado com 8 sprints, deve ser passado no corpo da requisição o id da turma (groupId), name e sprintPrefixName opcionais
Campos:
Campo | Tipo | Descrição |
---|---|---|
groupId | string | id da turma |
name | string | nome do módulo (opcional) |
sprintPrefixName | string | nome do prefixo de cada sprint (opcional) |
Deve ser enviado:
- Token de autorização do tipo
Bearer Token
com permissão de administrador
Exemplo de requisição válida:
/modules, {
headers: {
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
},
body: {
groupId: "5bd3b8cc-c522-406f-8218-b06fb2af4bca",
name: "M4",
sprintPrefixName: "S",
}
}
Retorno da requisição:
{
id: '368007a8-84ee-4263-807b-5c8ae2a82d05',
name: 'M4',
createdAt: '2022-11-10T02:31:12.123Z',
groupId: '5bd3b8cc-c522-406f-8218-b06fb2af4bca',
sprints: [
{
id: '87e25189-5a6d-49da-98b6-2fb272b531ab',
name: 'S1',
moduleId: '368007a8-84ee-4263-807b-5c8ae2a82d05'
},
...
]
}
Status Code |
---|
201 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa sem envio do token | Missing token | 401 |
Tentativa com envio de token inválido | Invalid or expired token | 401 |
Tentativa com envio de token de estudante ou instrutor | Access denied | 403 |
Tentativa com envio de groupId inválido | Group not found | 404 |
Rota responsável por listar todos os módulos
Deve ser enviado:
- Token de autorização do tipo
Bearer Token
com permissão de administrador
Exemplo de requisição válida:
/modules, {
headers: {
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
}
}
Retorno da requisição:
{
[
{
id: '368007a8-84ee-4263-807b-5c8ae2a82d05',
name: 'M4',
createdAt: '2022-11-10T03:31:22.201Z',
groupId: '5bd3b8cc-c522-406f-8218-b06fb2af4bca'
},
...
]
}
Status Code |
---|
200 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa sem envio do token | Missing token | 401 |
Tentativa com envio de token inválido | Invalid or expired token | 401 |
Tentativa com envio de token de estudante ou instrutor | Access denied | 403 |
Rota responsável por listar todos os usuário de um módulo a partir do id
Deve ser enviado:
- Token de autorização do tipo
Bearer Token
com permissão de administrador
Exemplo de requisição válida:
/modules/368007a8-84ee-4263-807b-5c8ae2a82d05, {
headers: {
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiU1RVREVOVCIsImdyb3VwSWQiOiI3ZTQ0ZWM4..."
}
}
Retorno da requisição:
{
id: '368007a8-84ee-4263-807b-5c8ae2a82d05',
name: 'M1',
createdAt: '2022-11-10T03:53:25.712Z',
groupId: '5bd3b8cc-c522-406f-8218-b06fb2af4bca',
users: [
{
id: '752df371-47e8-4c62-bc8c-ea72ac78f111',
createdAt: '2022-11-08T15:23:59.091Z',
updatedAt: '2022-11-08T15:23:59.091Z',
userId: '22322984-3ebc-460d-8321-4ded36eeafa6',
moduleId: '368007a8-84ee-4263-807b-5c8ae2a82d05',
user: {
id: '22322984-3ebc-460d-8321-4ded36eeafa6',
name: 'Sara Lins',
email: '[email protected]',
role: 'STUDENT',
createdAt: '2022-11-08T15:23:59.091Z',
updatedAt: '2022-11-08T15:23:59.091Z',
groupId: '5bd3b8cc-c522-406f-8218-b06fb2af4bca'
}
},
...
]
}
Status Code |
---|
200 |
Possíveis erros:
Erro | Mensagem | Status Code |
---|---|---|
Tentativa sem envio do token | Missing token | 401 |
Tentativa com envio de token inválido | Invalid or expired token | 401 |
Tentativa com envio de token de estudante | Access denied | 403 |
Tentativa com envio de id do módulo inválido | Module not found | 403 |
Tentativa com envio de token de instrutor e id do módulo que não possui acesso | Access denied | 403 |
Rota para criação de video
- Necessário token de autorização
- Necessário ser administrador ou ser instrutor do módulo
Campos:
Campo | Tipo | Descrição |
---|---|---|
title | string | Define o título do vídeo |
url | string | Define o link do vídeo (opcional) |
releaseDate | date | Define o dia em que o vídeo foi transmitido |
sprintId | string | Define a sprint do vídeo |
Body da requisição:
{
"title": "video teste",
"url": "urldovideo.com",
"releaseDate": "11/04/2022",
"sprintId": "38e0f242-4b31-4366-abc8-71004132c8f4"
}
Body da resposta:
{
"id": "56f9ed40-35c3-4311-92cd-84967fc8679f",
"title": "video teste",
"url": "urldovideo.com",
"releaseDate": "2022-11-04T04:00:00.000Z",
"createdAt": "2022-11-07T23:07:51.097Z",
"updatedAt": "2022-11-07T23:07:51.097Z",
"sprintId": "38e0f242-4b31-4366-abc8-71004132c8f4"
}
Status Code |
---|
201 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should not be able to create a video without token | Missing token | 401 |
should not be able to create a video with invalid/expired token | Invalid or expired token | 401 |
should not be able to create a video without adm/instructor permission | Access denied | 403 |
should not be able to create a video when instructor don't have this module | Instructor not allowed | 401 |
should not be able to create a video without title | Title is required | 400 |
should not be able to create a video without release date | Release date is required | 400 |
should not be able to create a video without sprintId | Sprint id is required | 400 |
should not be able to create a video with an invalid sprintId | Sprint not found | 404 |
Rota para update de video
- Necessário token de autorização
- Necessário ser administrador ou ser instrutor do módulo
Campos:
Campo | Tipo | Descrição |
---|---|---|
title | string | título do vídeo (opcional) |
url | string | link do vídeo (opcional) |
sprintId | string | sprint id do vídeo |
Body da requisição:
{
"title": "video teste",
"url": "urldovideo.com",
"sprintId": "38e0f242-4b31-4366-abc8-71004132c8f4"
}
Body da resposta:
{
id: 'c4f61f22-d127-4b10-a2b6-ef715f2be988',
title: 'video update',
url: 'test update',
releaseDate: '2022-11-04T04:00:00.000Z',
createdAt: '2022-11-10T02:10:34.761Z',
updatedAt: '2022-11-10T02:10:34.958Z',
sprintId: '3c4ee486-f932-4f45-a3ea-f07aa424fe18'
}
Status Code |
---|
200 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should not be able to update a video with invalid/expired token | Invalid or expired token | 401 |
should not be able to update a video without adm/instructor permission | Access denied | 403 |
should not be able to update a video when instructor don't have this module | Instructor not allowed | 401 |
should not be able to update a video with an invalid videoId | Sprint not found | 404 |
Rota para deleção de url de video
- Sem body na requisição
- Sem body na resposta
- Necessário token de autorização
- Necessário ser administrador ou ser instrutor do módulo
Status Code |
---|
204 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should not be able to delete a video url without token | Missing token | 401 |
should not be able to delete a video url with invalid/expired token | Invalid or expired token | 401 |
should not be able to delete a video url without adm/instructor permission | Access denied | 403 |
should not be able to update a video when instructor don't have this module | Instructor not allowed | 401 |
should not be able to delete a video with an invalid video id | Access denied | 404 |
Rota para criação de marcador
- Necessário token de autorização
- Necessário ser administrador ou ser instrutor do módulo
Campo | Tipo | Descrição |
---|---|---|
marks | marks[] | Define os marcadores de vídeo |
videoId | string | Define o id do vídeo |
groupId | string | Define o grupo de alunos (opcional) |
Body da requisição:
{
"marks": "[
{
title: 'git hub',
time: '00:20:50',
videoId: video?.id,
},
{
title: 'user controller',
time: '00:25:50',
videoId: video?.id,
},
{
title: 'typeorm',
time: '19:20:50',
videoId: video?.id,
},
]",
"videoId": "video?.id",
"groupId": "group.id"
}
Body da resposta:
{
count: 3
}
Status Code |
---|
201 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should not be able create a marker with h:m:s invalid | time not validate | 400 |
should not be able to create a video with invalid/expired token | Invalid or expired token | 401 |
should not be able create a marker with h:m:s equals | this video needed to equal marks video | 400 |
should not be able create a marker without adm access | Instructor not allowed | 403 |
should not be able create a marker with invalid ID video | video not found | 400 |
Rota para atualização de marcador
- Necessário token de autorização
- Necessário ser administrador ou ser instrutor do módulo
Campo | Tipo | Descrição |
---|---|---|
time | string | tempo do vídeo (opcional) |
title | string | titulo do vído (opcional) |
Body da requisição:
{
"title": 'git hub',
"time": '00:20:50'
}
Body da resposta:
{
"id": '634a0edc-7cde-4b5f-9469-d601759e2fba',
"time": '02:04:49',
"title": 'Titulo alterado',
"createdAt": "2022-11-09T22:03:13.009Z",
"updatedAt": "2022-11-09T22:03:13.199Z",
"videoId": 'c0fcb84d-1f76-4f92-b690-a6d1f8e51e19'
}
Status Code |
---|
200 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should be able possible to update a marked | (not) | 200 |
should be able is not ADM or INSTRUCTOR | Unauthorized | 403 |
should not be possible to update one marked with invalid id | Marker not found | 404 |
should not be possible to create a marker with time that already exists | Time already exists | 403 |
Rota para deletar marcador
- Necessário token de autorização
- Necessário ser administrador ou ser instrutor do módulo
Campo | Tipo | Descrição |
---|---|---|
time | string | tempo do vídeo (opcional) |
title | string | titulo do vídeo (opcional) |
Status Code |
---|
204 |
Possíveis erros:
Error | Message | Status Code |
---|---|---|
should be possible to delete a marker | (not) | 204 |
should be able is not ADM or INSTRUCTOR | Unauthorized | 403 |
should not be possible to delete a marker with invalid id | Marker not found | 404 |
should not be possible to delete a marker with a different instructor | Instructor does not own this mark | 401 |