132 lines
3.4 KiB
Python
132 lines
3.4 KiB
Python
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, UploadFile, File
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from starlette.responses import FileResponse
|
|
|
|
from app.database.session import get_db
|
|
from app.domain.entities.team import TeamEntity
|
|
from app.domain.entities.team_logo import TeamLogoEntity
|
|
from app.infrastructure.dependencies import get_current_user, require_admin
|
|
from app.infrastructure.teams_service import TeamsService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get(
|
|
'/',
|
|
response_model=list[TeamEntity],
|
|
summary='Get all teams',
|
|
description='Returns all teams',
|
|
)
|
|
async def get_all_teams(
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(get_current_user),
|
|
):
|
|
teams_service = TeamsService(db)
|
|
return await teams_service.get_all_teams()
|
|
|
|
|
|
@router.get(
|
|
'/active/',
|
|
response_model=Optional[TeamEntity],
|
|
summary='Get active team',
|
|
description='Returns active team',
|
|
)
|
|
async def get_all_teams(
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
teams_service = TeamsService(db)
|
|
return await teams_service.get_active_team()
|
|
|
|
|
|
@router.post(
|
|
'/',
|
|
response_model=Optional[TeamEntity],
|
|
summary='Create a new team',
|
|
description='Creates a new team',
|
|
)
|
|
async def create_team(
|
|
team: TeamEntity,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(require_admin),
|
|
):
|
|
teams_service = TeamsService(db)
|
|
return await teams_service.create_team(team)
|
|
|
|
|
|
@router.put(
|
|
'/{team_id}/set-active/',
|
|
response_model=Optional[TeamEntity],
|
|
summary='Make team active',
|
|
description='Makes team active',
|
|
)
|
|
async def update_team(
|
|
team_id: int,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(require_admin),
|
|
):
|
|
teams_service = TeamsService(db)
|
|
return await teams_service.set_active_team(team_id)
|
|
|
|
|
|
@router.put(
|
|
'/{team_id}/',
|
|
response_model=Optional[TeamEntity],
|
|
summary='Update a team',
|
|
description='Updates a team',
|
|
)
|
|
async def update_team(
|
|
team_id: int,
|
|
team: TeamEntity,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(require_admin),
|
|
):
|
|
teams_service = TeamsService(db)
|
|
return await teams_service.update_team(team_id, team)
|
|
|
|
|
|
@router.delete(
|
|
'/{team_id}/',
|
|
response_model=Optional[TeamEntity],
|
|
summary='Delete a team',
|
|
description='Delete a team',
|
|
)
|
|
async def delete_team(
|
|
team_id: int,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(require_admin),
|
|
):
|
|
teams_service = TeamsService(db)
|
|
return await teams_service.delete_team(team_id)
|
|
|
|
|
|
@router.get(
|
|
"/{team_id}/file/",
|
|
response_class=FileResponse,
|
|
summary="Download logo file by team ID",
|
|
description="Returns the image file for the given team ID",
|
|
)
|
|
async def download_photo_file(
|
|
team_id: int,
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
teams_service = TeamsService(db)
|
|
return await teams_service.get_photo_file_by_team_id(team_id)
|
|
|
|
|
|
@router.post(
|
|
"/{team_id}/upload/",
|
|
response_model=TeamLogoEntity,
|
|
summary="Upload a new photo for a profile",
|
|
description="Uploads a new photo file and associates it with the given profile ID",
|
|
)
|
|
async def upload_photo(
|
|
team_id: int,
|
|
file: UploadFile = File(...),
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(get_current_user),
|
|
):
|
|
teams_service = TeamsService(db)
|
|
return await teams_service.upload_photo(team_id, file)
|