In English:
Installing |
Using |
Testing |
Routes—↴—————↴
Em Português:
Videos |
Categorias
Instalando |
Usando |
Testes |
Rotas—↴—————↴
Videos |
Categorias
Although the README has the english and the portuguese version I did not translated the api exceptions or the database columns to english so feel free to ask me if you didn't know what something mean.
-
First things first, clone the repository:
git clone https://github.com/luigiMinardi/alurachallenge-backend
-
Then create a Virtual Enviroment for you:
python -m venv .venv
-
Activate Your
venv
:Mac/Linux:
source .venv/bin/activate
Windows:
.venv\Scripts\activate.bat
-
Install all the requirements:
pip install -r requirements.txt
-
Make the Migrations:
python manage.py makemigrations
-
Run the DataBase Migration:
python manage.py migrate
-
Create a Super User:
python manage.py createsuperuser
-
Run your server:
python manage.py runserver
Now you are ready to use it.
For run our automated tests do:
python manage.py test
You can search videos using the query param search
.
Searching something that some of the videos in the database has in the title.
Searching "Max" doing /videos/?search=Max
Returns all of the videos that match in the search.
[
{
"id": 2,
"titulo": "You already know my max length",
"descricao": "You already know my max length",
"url": "http://must-be-a-valid-url-with-max-length-of-200.com",
"categoriaId": 1
},
{
"id": 3,
"titulo": "Max length is 30",
"descricao": "Max length is 300",
"url": "http://must-be-a-valid-url-with-max-length-of-200.page",
"categoriaId": 2
}
]
Searching something that none of the videos in the database has in the title.
Searching "any" doing /videos/?search=any
Returns an empty list of videos because we didn't have any video that match in the database.
[]
Add a new video in the database.
{
"titulo": "Max length is 30",
"descricao": "Max length is 300",
"url": "http://must-be-a-valid-url-with-max-length-of-200.page"
}
{
"id": 1,
"titulo": "Max length is 30",
"descricao": "Max length is 300",
"url": "http://must-be-a-valid-url-with-max-length-of-200.page",
"categoriaId": 1
}
Change all values in specified video in the database.
Changing the video we've POST earlier, at url
/videos/1/
{
"titulo": "You already know my max length",
"descricao": "You already know my max length",
"url": "http://must-be-a-valid-url-with-max-length-of-200.com",
"categoriaId": 2
}
{
"id": 1,
"titulo": "You already know my max length",
"descricao": "You already know my max length",
"url": "http://must-be-a-valid-url-with-max-length-of-200.com",
"categoriaId": 2
}
Change some value in specified video in the database.
Changing the video with id 1 at
/videos/1/
{
"url": "http://you-know-my-max-length-and-im-valid.com"
}
{
"id": 1,
"titulo": "You already know my max length",
"descricao": "You already know my max length",
"url": "http://you-know-my-max-length-and-im-valid.com",
"categoriaId": 2
}
Delete the specified video in the database.
Delete the video we've POST earlier, at
/videos/1/
{
"detail": "Vídeo deletado com sucesso!"
}
Getting all the videos of the database.
[
{
"id": 2,
"titulo": "You already know my max length",
"descricao": "You already know my max length",
"url": "http://must-be-a-valid-url-with-max-length-of-200.com",
"categoriaId": 1
},
{
"id": 3,
"titulo": "Max length is 30",
"descricao": "Max length is 300",
"url": "http://must-be-a-valid-url-with-max-length-of-200.page",
"categoriaId": 2
}
]
Getting one specified video in the database.
Getting the video with id 2 at
/videos/2/
{
"id": 2,
"titulo": "You already know my max length",
"descricao": "You already know my max length",
"url": "http://must-be-a-valid-url-with-max-length-of-200.com",
"categoriaId": 1
}
Getting all videos inside some "categoria".
[
{
"id": 2,
"titulo": "You already know my max length",
"descricao": "You already know my max length",
"url": "http://must-be-a-valid-url-with-max-length-of-200.com",
"categoriaId": 1
}
]
Search videos inside some "categoria"
Works at the same way as the Videos Search Query Param
/categorias/2/videos/?search=30
[
{
"id": 3,
"titulo": "Max length is 30",
"descricao": "Max length is 300",
"url": "http://must-be-a-valid-url-with-max-length-of-200.page",
"categoriaId": 2
},
{
"id": 7,
"titulo": "30 days to do an API",
"descricao": "Yes, in this video you will learn how you can do this or that...",
"url": "https://blank.page",
"categoriaId": 2
}
]
Add a new "categoria" in the database.
{
"titulo": "Max length is 30",
"cor": "#AFaf09"
}
{
"id": 2,
"titulo": "Max length is 30",
"cor": "#AFaf09"
}
Change all values in specified "categoria" in the database.
Changing the "categoria" we've POST earlier, at url
/categorias/2/
{
"titulo": "You already know my max length",
"cor": "#AFaf09"
}
{
"id": 2,
"titulo": "You already know my max length",
"cor": "#AFaf09"
}
Change some value in specified "categoria" in the database.
Changing the "categoria" with id 2 at
/categorias/2/
{
"cor": "#0ff"
}
{
"id": 2,
"titulo": "You already know my max length",
"cor": "#0ff"
}
Delete the specified "categoria" in the database.
Delete the "categoria" we've POST earlier, at
/categorias/2/
{
"detail": "Categoria deletada com sucesso!"
}
Delete the first "categoria" in the database.
Delete the first "categoria", at
/categorias/1/
{
"detail": "Você não pode deletar a categoria 1."
}
Getting all the "categoria"'s of the database.
[
{
"id": 1,
"titulo": "LIVRE",
"cor": "#000"
},
{
"id": 3,
"titulo": "Max length is 30",
"cor": "#AFaf09"
},
{
"id": 4,
"titulo": "You already know my max length",
"cor": "#0ff"
}
]
Getting one specified "categoria" in the database.
Getting the "categoria" with id 3 at
/categorias/3/
{
"id": 3,
"titulo": "Max length is 30",
"cor": "#AFaf09"
}
-
Primeiramente, clone o repositório:
git clone https://github.com/luigiMinardi/alurachallenge-backend
-
Então crie seu Ambiente Virtual:
python -m venv .venv
Mac/Linux:
source .venv/bin/activate
Windows:
.venv\Scripts\activate.bat
-
Instale todos os requerimentos:
pip install -r requirements.txt
-
Crie as migrações no banco de dados:
python manage.py makemigrations
-
Rode as migrações do banco de dados:
python manage.py migrate
-
Crie um Super Usuário:
python manage.py createsuperuser
-
Rode seu servidor:
python manage.py runserver
Prontinho! Agora já pode usar a API.
Para rodar nossos testes automatizados basta rodar esse comando:
python manage.py test
Você pode pesquisar videos usando o parâmetro search
.
Pesquisar algo que algum dos videos no banco de dados tem no título.
Pesquisando "máximo", fazendo /videos/?search=máximo
Retorna todos os videos que conferem com a pesquisa.
[
{
"id": 2,
"titulo": "Vc já sabe meu tamanho máximo.",
"descricao": "Vc já sabe meu tamanho máximo.",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.com",
"categoriaId": 1
},
{
"id": 3,
"titulo": "Comprimento máximo é 30",
"descricao": "Comprimento máximo é 300",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.page",
"categoriaId": 2
}
]
Pesquisando algo que nenhum dos videos no banco de dados tem no título.
Pesquisando "qualquer", fazendo /videos/?search=qualquer
Retorna uma lista vazia de videos porque não tinha nada que inferisse a pesquisa.
[]
Adicionando um novo video no banco de dados.
{
"titulo": "Comprimento máximo é 30",
"descricao": "Comprimento máximo é 300",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.page"
}
{
"id": 1,
"titulo": "Comprimento máximo é 30",
"descricao": "Comprimento máximo é 300",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.page",
"categoriaId": 1
}
Mudando todos os valores em um video específico no banco de dados.
Trocando os valores do video que demos POST mais cedo, usando a url
/videos/1/
{
"titulo": "Vc já sabe meu tamanho máximo.",
"descricao": "Vc já sabe meu tamanho máximo.",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.com",
"categoriaId": 2
}
{
"id": 1,
"titulo": "Vc já sabe meu tamanho máximo.",
"descricao": "Vc já sabe meu tamanho máximo.",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.com",
"categoriaId": 2
}
Mudando um valor em um video específico no banco de dados.
Mudando o video com o id 1 em
/videos/1/
{
"url": "http://voce-sabe-meu-tamanho-maximo-e-eu-sou-um-url-valido.com"
}
{
"id": 1,
"titulo": "Vc já sabe meu tamanho máximo.",
"descricao": "Vc já sabe meu tamanho máximo.",
"url": "http://voce-sabe-meu-tamanho-maximo-e-eu-sou-um-url-valido.com",
"categoriaId": 2
}
Deletando um video específico no banco de dados.
Deletando o video que demos POST anteriormente, usando
/videos/1/
{
"detail": "Vídeo deletado com sucesso!"
}
Pegando todos os videos do banco de dados.
[
{
"id": 2,
"titulo": "Vc já sabe meu tamanho máximo.",
"descricao": "Vc já sabe meu tamanho máximo.",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.com",
"categoriaId": 1
},
{
"id": 3,
"titulo": "Comprimento máximo é 30",
"descricao": "Comprimento máximo é 300",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.page",
"categoriaId": 2
}
]
Pegando um video específico no banco de dados.
Pegando o video em
/videos/2/
{
"id": 2,
"titulo": "Vc já sabe meu tamanho máximo.",
"descricao": "Vc já sabe meu tamanho máximo.",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.com",
"categoriaId": 1
}
Pegando todos os videos de dentro de uma categoria.
[
{
"id": 2,
"titulo": "Vc já sabe meu tamanho máximo.",
"descricao": "Vc já sabe meu tamanho máximo.",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.com",
"categoriaId": 1
}
]
Pesquisando videos dentro de uma categoria
O search funciona da mesma maneira que o Query Param de Search dos Videos
/categorias/2/videos/?search=30
[
{
"id": 3,
"titulo": "Comprimento máximo é 30",
"descricao": "Comprimento máximo é 300",
"url": "http://deve-ser-um-url-valido-com-comprimento-maximo-de-200.page",
"categoriaId": 2
},
{
"id": 7,
"titulo": "30 dias pra fazer uma API",
"descricao": "Sim, nesse video você vai aprender como você pode fazer isso ou aquilo...",
"url": "https://blank.page",
"categoriaId": 2
}
]
Adicionando uma nova categoria no banco de dados.
{
"titulo": "Comprimento máximo é 30",
"cor": "#AFaf09"
}
{
"id": 2,
"titulo": "Comprimento máximo é 30",
"cor": "#AFaf09"
}
Mudando todos os valores em uma categoria específica no banco de dados.
Trocando os valores da categoria que demos POST mais cedo, usando a url
/categorias/2/
{
"titulo": "Vc já sabe meu tamanho máximo.",
"cor": "#AFaf09"
}
{
"id": 2,
"titulo": "Vc já sabe meu tamanho máximo.",
"cor": "#AFaf09"
}
Mudando um valor em uma categoria específica no banco de dados.
Mudando a categoria com o id 2 em
/categorias/2/
{
"cor": "#0ff"
}
{
"id": 2,
"titulo": "Vc já sabe meu tamanho máximo.",
"cor": "#0ff"
}
Deletando uma categoria específica no banco de dados.
Deletando a categoria que demos POST anteriormente, usando
/categorias/2/
{
"detail": "Categoria deletada com sucesso!"
}
Deletando a primeira categoria do banco de dados.
Deletando a primeira categoria, usando
/categorias/1/
{
"detail": "Você não pode deletar a categoria 1."
}
Pegando todas as categorias do banco de dados.
[
{
"id": 1,
"titulo": "LIVRE",
"cor": "#000"
},
{
"id": 3,
"titulo": "Comprimento máximo é 30",
"cor": "#AFaf09"
},
{
"id": 4,
"titulo": "Vc já sabe meu tamanho máximo.",
"cor": "#0ff"
}
]
Pegando uma categoria específica no banco de dados.
Pegando a categoria em
/categorias/3/
{
"id": 3,
"titulo": "Comprimento máximo é 30",
"cor": "#AFaf09"
}