from fastapi import Depends from cbh.api.account.models import AccountModel from cbh.api.availability.db_requests import update_availability_obj from cbh.api.availability.schemas import ( UpdateAvailabilityRequest, ) from cbh.api.common.db_requests import get_obj_by_id from cbh.core.security import PermissionDependency from cbh.api.account.dto import AccountType from cbh.core.wrappers import CbhResponseWrapper from cbh.api.availability.models import AvailabilityModel from cbh.api.availability import availability_router @availability_router.get("") async def get_own_availability( account: AccountModel = Depends(PermissionDependency([AccountType.COACH])), ) -> CbhResponseWrapper[AvailabilityModel]: availability = await get_obj_by_id( AvailabilityModel, None, additional_filter={"coach.id": account.id} ) return CbhResponseWrapper(data=availability) @availability_router.get("/{coachId}") async def get_availability( coachId: str, _: AccountModel = Depends( PermissionDependency([AccountType.ADMIN, AccountType.USER]) ), ) -> CbhResponseWrapper[AvailabilityModel]: """ Get availability by coach ID. """ availability = await get_obj_by_id( AvailabilityModel, None, additional_filter={"coach.id": coachId} ) return CbhResponseWrapper(data=availability) @availability_router.put("") async def update_own_availability( availability: UpdateAvailabilityRequest, account: AccountModel = Depends(PermissionDependency([AccountType.COACH])), ) -> CbhResponseWrapper[AvailabilityModel]: """ Update own availability. """ availability = await update_availability_obj(availability, account.id) return CbhResponseWrapper(data=availability) @availability_router.put("/{coachId}") async def update_availability( coachId: str, availability: UpdateAvailabilityRequest, _: AccountModel = Depends(PermissionDependency([AccountType.ADMIN])), ) -> CbhResponseWrapper[AvailabilityModel]: """ Update availability. """ availability = await update_availability_obj(availability, coachId) return CbhResponseWrapper(data=availability)