178 lines
5.2 KiB
Python
178 lines
5.2 KiB
Python
import logging
|
|
from fastapi import APIRouter, Depends, HTTPException, Request
|
|
from bson import ObjectId
|
|
|
|
from src.db.repositories.team_repository import team_repository
|
|
from src.schemas.team import TeamCreate, TeamUpdate, TeamResponse, TeamListResponse
|
|
from src.models.team import TeamModel
|
|
from src.utils.logging import log_request
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
router = APIRouter(tags=["Teams"], prefix="/teams")
|
|
|
|
@router.post("", response_model=TeamResponse, status_code=201)
|
|
async def create_team(team_data: TeamCreate, request: Request):
|
|
"""
|
|
Create a new team
|
|
|
|
This endpoint no longer requires authentication
|
|
"""
|
|
log_request(
|
|
{"path": request.url.path, "method": request.method, "team_data": team_data.dict()}
|
|
)
|
|
|
|
# Create team
|
|
team = TeamModel(
|
|
name=team_data.name,
|
|
description=team_data.description
|
|
)
|
|
|
|
created_team = await team_repository.create(team)
|
|
|
|
# Convert to response model
|
|
response = TeamResponse(
|
|
id=str(created_team.id),
|
|
name=created_team.name,
|
|
description=created_team.description,
|
|
created_at=created_team.created_at,
|
|
updated_at=created_team.updated_at
|
|
)
|
|
|
|
return response
|
|
|
|
@router.get("", response_model=TeamListResponse)
|
|
async def list_teams(request: Request):
|
|
"""
|
|
List all teams
|
|
|
|
This endpoint no longer requires authentication
|
|
"""
|
|
log_request(
|
|
{"path": request.url.path, "method": request.method}
|
|
)
|
|
|
|
# Get all teams
|
|
teams = await team_repository.get_all()
|
|
|
|
# Convert to response models
|
|
response_teams = []
|
|
for team in teams:
|
|
response_teams.append(TeamResponse(
|
|
id=str(team.id),
|
|
name=team.name,
|
|
description=team.description,
|
|
created_at=team.created_at,
|
|
updated_at=team.updated_at
|
|
))
|
|
|
|
return TeamListResponse(teams=response_teams, total=len(response_teams))
|
|
|
|
@router.get("/{team_id}", response_model=TeamResponse)
|
|
async def get_team(team_id: str, request: Request):
|
|
"""
|
|
Get a team by ID
|
|
|
|
This endpoint no longer requires authentication
|
|
"""
|
|
log_request(
|
|
{"path": request.url.path, "method": request.method, "team_id": team_id}
|
|
)
|
|
|
|
try:
|
|
# Convert string ID to ObjectId
|
|
obj_id = ObjectId(team_id)
|
|
except:
|
|
raise HTTPException(status_code=400, detail="Invalid team ID")
|
|
|
|
# Get the team
|
|
team = await team_repository.get_by_id(obj_id)
|
|
if not team:
|
|
raise HTTPException(status_code=404, detail="Team not found")
|
|
|
|
# Convert to response model
|
|
response = TeamResponse(
|
|
id=str(team.id),
|
|
name=team.name,
|
|
description=team.description,
|
|
created_at=team.created_at,
|
|
updated_at=team.updated_at
|
|
)
|
|
|
|
return response
|
|
|
|
@router.put("/{team_id}", response_model=TeamResponse)
|
|
async def update_team(team_id: str, team_data: TeamUpdate, request: Request):
|
|
"""
|
|
Update a team
|
|
|
|
This endpoint no longer requires authentication
|
|
"""
|
|
log_request(
|
|
{"path": request.url.path, "method": request.method, "team_id": team_id, "team_data": team_data.dict()}
|
|
)
|
|
|
|
try:
|
|
# Convert string ID to ObjectId
|
|
obj_id = ObjectId(team_id)
|
|
except:
|
|
raise HTTPException(status_code=400, detail="Invalid team ID")
|
|
|
|
# Get the team
|
|
team = await team_repository.get_by_id(obj_id)
|
|
if not team:
|
|
raise HTTPException(status_code=404, detail="Team not found")
|
|
|
|
# Update the team
|
|
update_data = team_data.dict(exclude_unset=True)
|
|
if not update_data:
|
|
# No fields to update
|
|
return TeamResponse(
|
|
id=str(team.id),
|
|
name=team.name,
|
|
description=team.description,
|
|
created_at=team.created_at,
|
|
updated_at=team.updated_at
|
|
)
|
|
|
|
updated_team = await team_repository.update(obj_id, update_data)
|
|
if not updated_team:
|
|
raise HTTPException(status_code=500, detail="Failed to update team")
|
|
|
|
# Convert to response model
|
|
response = TeamResponse(
|
|
id=str(updated_team.id),
|
|
name=updated_team.name,
|
|
description=updated_team.description,
|
|
created_at=updated_team.created_at,
|
|
updated_at=updated_team.updated_at
|
|
)
|
|
|
|
return response
|
|
|
|
@router.delete("/{team_id}", status_code=204)
|
|
async def delete_team(team_id: str, request: Request):
|
|
"""
|
|
Delete a team
|
|
|
|
This endpoint no longer requires authentication
|
|
"""
|
|
log_request(
|
|
{"path": request.url.path, "method": request.method, "team_id": team_id}
|
|
)
|
|
|
|
try:
|
|
# Convert string ID to ObjectId
|
|
obj_id = ObjectId(team_id)
|
|
except:
|
|
raise HTTPException(status_code=400, detail="Invalid team ID")
|
|
|
|
# Get the team
|
|
team = await team_repository.get_by_id(obj_id)
|
|
if not team:
|
|
raise HTTPException(status_code=404, detail="Team not found")
|
|
|
|
# Delete the team
|
|
success = await team_repository.delete(obj_id)
|
|
if not success:
|
|
raise HTTPException(status_code=500, detail="Failed to delete team") |