Backend do projeto CookTogether. Feito em Django.
- Base URL:
cooktogether.duckdns.org
- API base URL:
cooktogether.duckdns.org/api/
- Exemplo:
cooktogether.duckdns.org/api/recipes/list/
- Exemplo:
- Swagger:
cooktogether.duckdns.org/swagger
- Painel admin:
cooktogether.duckdns.org/admin
As credenciais de login do painel de admin do endpoint público se encontram no card
[CT-04 OPS] Realizar deployment do código no servidor Oracle
no Trello.
OBS: Os endpoints da API precisam terminar com "/". Ex:
Para realizar o desenvolvimento local, é necessário:
-
Criar um ambiente virtual (virtual env) onde serão instalados as dependências do projeto. Para isto, siga os passos abaixo, executando os comandos no terminal:
- Na pasta raiz do projeto clonado, execute o comando abaixo no para criar uma pasta de ambiente chamada
venv
:python -m venv venv
- Ainda na pasta raiz, execute o comando abaixo para ativar o ambiente virtual:
- Linux/Mac:
source venv/bin/activate
- Windows:
venv\Scripts\activate
- Linux/Mac:
- Na pasta raiz do projeto clonado, execute o comando abaixo no para criar uma pasta de ambiente chamada
-
Com o ambiente ativado, execute o comando
pip install -r requirements.txt
na pasta raiz do projeto para instalar as depêndecias. -
Configure a variável de ambiente
DJANGO_ENV
para o valordev
, através do comando:- Linux:
export DJANGO_ENV=dev
- Windows:
set DJANGO_ENV=dev
- Ou então crie um arquivo .env na pasta raiz, contendo
DJANGO_ENV=dev
Quando
DJANGO_ENV
for igual adev
, será utilizado o ambiente de desenvolvimento, ou seja:- Será gerado e utilizado um banco sqlite3 local, presente na pasta raiz do projeto
- Imagens de receitas criadas serão guardadas no bucket
recipes_dev
do supabase.
- Linux:
-
Execute as migrações necessárias do banco de dados, com o comando
python manage.py migrate
-
Execute o servidor de desenvolvimento com o comando
python manage.py runserver
Foi implementada uma esteira CI/CD para enviar o código presente na main para um servidor rodando na nuvem Oracle. A esteira é ativada a partir de qualquer commit ou merge de PR na main
(apenas abrir um PR não ativa a esteira).
É recomendado que alterações sejam feitas primeiro em um branch separada de desenvolvimento, e após as devidas validações e testes locais, seja aberto um PR e feito o merge com a Main.
Para a utilização de certos endpoints, é necessário estar autenticado. A autenticação é feita passando um token (Bearer Token) na requisição, sendo este token obtido ao realizar login no endpoint de login (consultar Swagger).
O endpoint /api/recipes/create/
é o endpoint que aceita requisições POST para criação de receitas. Entretanto, é importante se atentar que é para a criação de receitas contendo uma imagem, é necessário passar o campo image
contendo uma string base64 de uma imagem que foi previamente codificada.
Exemplo:
{
"title": "Minha receita de exemplo",
"category": 1
"ingredients": [
{
"name": "Água",
"quantity": 1,
"unit": "Copo"
}
],
"text_area": "Minha string contendo informações de como fazer a receita",
"image_base64": "/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BSJTEUAAQEAAkZXNjAAAA8A...restante do base64 aqui"
}
A string base64 do campo image_base64
será decodificada e enviada para o bucket do Supabase. O retorno da requisição, e consequentemente, o que será salvo no banco de dados, será o campo image
que contém o link públcio da imagem presente no bucket do Supabase
Exemplo de retorno da requisição acima:
{
"id": 1,
"category": 1,
"category_name": "Bolos",
"user": "[Nome do usuário que criou a receita aqui]",
"title": "Minha receita de exemplo",
"ingredients": [
{
"name": "Água",
"quantity": 1.0,
"unit": "Copo"
}
],
"text_area": "Minha string contendo informações de como fazer a receita",
"image": "https://[URL do Supabase aqui]/storage/v1/object/public/recipes/recipes/oCpHYBkI3ejAkDJq3efMMbSbAUzDOK.jpg"
}
Caso queira criar uma receita sem imagem, basta não passar o campo image_base64
, ou então passar o campo image
com valor null
:
{
"id": 1,
"category": 1,
"title": "Minha receita de exemplo",
"ingredients": [
{
"name": "Água",
"quantity": 1.0,
"unit": "Copo"
}
],
"text_area": "Minha string contendo informações de como fazer a receita",
"image": null
}