satupeta-main/app/api/v1/routes/mapset_history_route.py
2026-02-23 12:20:42 +07:00

56 lines
1.9 KiB
Python
Executable File

from fastapi import APIRouter, Depends, status
from app.api.dependencies.auth import get_current_active_user
from app.api.dependencies.factory import Factory
from app.core.data_types import UUID7Field
from app.core.params import CommonParams
from app.schemas import MapsetHistoryCreateSchema, MapsetHistorySchema
from app.schemas.base import PaginatedResponse
from app.schemas.user_schema import UserSchema
from app.services import MapsetHistoryService
router = APIRouter()
@router.get(
"/histories",
response_model=PaginatedResponse[MapsetHistorySchema],
dependencies=[Depends(get_current_active_user)],
)
async def get_mapset_histories(
params: CommonParams = Depends(), service: MapsetHistoryService = Depends(Factory().get_mapset_history_service)
):
filter = params.filter
sort = params.sort
search = params.search
group_by = params.group_by
limit = params.limit
offset = params.offset
histories, total = await service.find_all(filter, sort, search, group_by, limit, offset)
return PaginatedResponse(
items=[MapsetHistorySchema.model_validate(history) for history in histories],
total=total,
limit=limit,
offset=offset,
has_more=total > (offset + limit),
)
@router.post("/histories", response_model=MapsetHistorySchema, status_code=status.HTTP_201_CREATED)
async def record_history(
data: MapsetHistoryCreateSchema,
user: UserSchema = Depends(get_current_active_user),
service: MapsetHistoryService = Depends(Factory().get_mapset_history_service),
):
return await service.create(user, data.dict())
@router.delete(
"/histories/{id}", status_code=status.HTTP_204_NO_CONTENT, dependencies=[Depends(get_current_active_user)]
)
async def delete_history(
id: UUID7Field, service: MapsetHistoryService = Depends(Factory().get_mapset_history_service)
):
await service.delete(id)