File size: 2,168 Bytes
1d94c60
 
a3d36fd
bacab74
1d94c60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from fastapi import FastAPI, HTTPException, status
from typing import List
from models import Task
import database

app = FastAPI(
    title="To-Do List API",
    description="API simples para gerenciar tarefas",
    version="1.0.0"
)

@app.get("/", tags=["Root"])
def read_root():
    """Endpoint raiz da API"""
    return {
        "message": "Bem-vindo à To-Do List API!",
        "docs": "/docs",
        "redoc": "/redoc"
    }

# CREATE - Criar nova tarefa
@app.post(
    "/tasks/",
    response_model=Task,
    status_code=status.HTTP_201_CREATED,
    tags=["Tasks"]
)
def create_task(task: Task):
    """Cria uma nova tarefa"""
    return database.create_task(task)

# READ - Listar todas as tarefas
@app.get(
    "/tasks/",
    response_model=List[Task],
    tags=["Tasks"]
)
def get_tasks():
    """Lista todas as tarefas"""
    return database.get_all_tasks()

# READ - Buscar tarefa específica por ID
@app.get(
    "/tasks/{task_id}",
    response_model=Task,
    tags=["Tasks"]
)
def get_task(task_id: int):
    """Busca uma tarefa específica por ID"""
    task = database.get_task_by_id(task_id)
    if task is None:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"Tarefa com ID {task_id} não encontrada"
        )
    return task

# UPDATE - Atualizar tarefa existente
@app.put(
    "/tasks/{task_id}",
    response_model=Task,
    tags=["Tasks"]
)
def update_task(task_id: int, task: Task):
    """Atualiza uma tarefa existente"""
    updated = database.update_task(task_id, task)
    if updated is None:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"Tarefa com ID {task_id} não encontrada"
        )
    return updated

# DELETE - Remover tarefa
@app.delete(
    "/tasks/{task_id}",
    status_code=status.HTTP_204_NO_CONTENT,
    tags=["Tasks"]
)
def delete_task(task_id: int):
    """Remove uma tarefa"""
    deleted = database.delete_task(task_id)
    if not deleted:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"Tarefa com ID {task_id} não encontrada"
        )
    return None