bilalsxadad1231231 commited on
Commit
8ebfb48
·
1 Parent(s): b82f5a0

Implement trailing slash support for all API endpoints

Browse files
app/api/v1/api.py CHANGED
@@ -3,6 +3,7 @@ from .endpoints import todos, subtasks, translation
3
 
4
  api_router = APIRouter()
5
 
 
6
  api_router.include_router(todos.router, prefix="/todos", tags=["todos"])
7
  api_router.include_router(subtasks.router, prefix="", tags=["subtasks"])
8
  api_router.include_router(translation.router, prefix="/todos", tags=["translation"])
 
3
 
4
  api_router = APIRouter()
5
 
6
+ # Include routers with trailing slash support
7
  api_router.include_router(todos.router, prefix="/todos", tags=["todos"])
8
  api_router.include_router(subtasks.router, prefix="", tags=["subtasks"])
9
  api_router.include_router(translation.router, prefix="/todos", tags=["translation"])
app/api/v1/endpoints/subtasks.py CHANGED
@@ -8,6 +8,7 @@ from ....services.todo_service import TodoService
8
  router = APIRouter()
9
 
10
  @router.post("/todos/{todo_id}/generate", response_model=List[Subtask])
 
11
  async def generate_subtasks(
12
  todo_id: int,
13
  request: SubtaskGenerateRequest,
@@ -34,6 +35,7 @@ async def generate_subtasks(
34
  )
35
 
36
  @router.get("/todos/{todo_id}/subtasks", response_model=List[Subtask])
 
37
  def get_todo_subtasks(todo_id: int, db: Session = Depends(get_db)):
38
  """Get all subtasks for a todo"""
39
  todo_service = TodoService(db)
 
8
  router = APIRouter()
9
 
10
  @router.post("/todos/{todo_id}/generate", response_model=List[Subtask])
11
+ @router.post("/todos/{todo_id}/generate/", response_model=List[Subtask])
12
  async def generate_subtasks(
13
  todo_id: int,
14
  request: SubtaskGenerateRequest,
 
35
  )
36
 
37
  @router.get("/todos/{todo_id}/subtasks", response_model=List[Subtask])
38
+ @router.get("/todos/{todo_id}/subtasks/", response_model=List[Subtask])
39
  def get_todo_subtasks(todo_id: int, db: Session = Depends(get_db)):
40
  """Get all subtasks for a todo"""
41
  todo_service = TodoService(db)
app/api/v1/endpoints/todos.py CHANGED
@@ -8,6 +8,7 @@ from ....services.todo_service import TodoService
8
  router = APIRouter()
9
 
10
  @router.get("/", response_model=List[TodoWithRelations])
 
11
  def get_todos(
12
  skip: int = 0,
13
  limit: int = 100,
@@ -30,6 +31,7 @@ def get_todo(todo_id: int, db: Session = Depends(get_db)):
30
  return todo
31
 
32
  @router.post("/", response_model=TodoWithRelations, status_code=status.HTTP_201_CREATED)
 
33
  def create_todo(todo: TodoCreate, db: Session = Depends(get_db)):
34
  """Create a new todo"""
35
  todo_service = TodoService(db)
@@ -63,6 +65,7 @@ def delete_todo(todo_id: int, db: Session = Depends(get_db)):
63
  )
64
 
65
  @router.patch("/{todo_id}/toggle", response_model=TodoWithRelations)
 
66
  def toggle_todo_completion(todo_id: int, db: Session = Depends(get_db)):
67
  """Toggle todo completion status"""
68
  todo_service = TodoService(db)
 
8
  router = APIRouter()
9
 
10
  @router.get("/", response_model=List[TodoWithRelations])
11
+ @router.get("", response_model=List[TodoWithRelations])
12
  def get_todos(
13
  skip: int = 0,
14
  limit: int = 100,
 
31
  return todo
32
 
33
  @router.post("/", response_model=TodoWithRelations, status_code=status.HTTP_201_CREATED)
34
+ @router.post("", response_model=TodoWithRelations, status_code=status.HTTP_201_CREATED)
35
  def create_todo(todo: TodoCreate, db: Session = Depends(get_db)):
36
  """Create a new todo"""
37
  todo_service = TodoService(db)
 
65
  )
66
 
67
  @router.patch("/{todo_id}/toggle", response_model=TodoWithRelations)
68
+ @router.patch("/{todo_id}/toggle/", response_model=TodoWithRelations)
69
  def toggle_todo_completion(todo_id: int, db: Session = Depends(get_db)):
70
  """Toggle todo completion status"""
71
  todo_service = TodoService(db)
app/api/v1/endpoints/translation.py CHANGED
@@ -8,6 +8,7 @@ from ....services.todo_service import TodoService
8
  router = APIRouter()
9
 
10
  @router.post("/{todo_id}/translate", response_model=Translation)
 
11
  async def translate_todo(
12
  todo_id: int,
13
  request: TodoTranslationRequest,
@@ -34,6 +35,7 @@ async def translate_todo(
34
  )
35
 
36
  @router.get("/{todo_id}/translations", response_model=List[Translation])
 
37
  def get_todo_translations(todo_id: int, db: Session = Depends(get_db)):
38
  """Get all translations for a todo"""
39
  todo_service = TodoService(db)
@@ -46,6 +48,7 @@ def get_todo_translations(todo_id: int, db: Session = Depends(get_db)):
46
  return todo_service.get_todo_translations(todo_id)
47
 
48
  @router.post("/translate", response_model=dict)
 
49
  async def translate_text(request: TranslationRequest):
50
  """Translate any text to target language"""
51
  from ....services.translation_service import translation_service
 
8
  router = APIRouter()
9
 
10
  @router.post("/{todo_id}/translate", response_model=Translation)
11
+ @router.post("/{todo_id}/translate/", response_model=Translation)
12
  async def translate_todo(
13
  todo_id: int,
14
  request: TodoTranslationRequest,
 
35
  )
36
 
37
  @router.get("/{todo_id}/translations", response_model=List[Translation])
38
+ @router.get("/{todo_id}/translations/", response_model=List[Translation])
39
  def get_todo_translations(todo_id: int, db: Session = Depends(get_db)):
40
  """Get all translations for a todo"""
41
  todo_service = TodoService(db)
 
48
  return todo_service.get_todo_translations(todo_id)
49
 
50
  @router.post("/translate", response_model=dict)
51
+ @router.post("/translate/", response_model=dict)
52
  async def translate_text(request: TranslationRequest):
53
  """Translate any text to target language"""
54
  from ....services.translation_service import translation_service