88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from io import BytesIO
 | 
						|
 | 
						|
from fastapi import APIRouter, Response
 | 
						|
 | 
						|
from backend.dependecies import SessionDependency, CurrentUserDependency
 | 
						|
from generators.work_shifts_qr_code_generator import WorkShiftsQRCodeGenerator
 | 
						|
from schemas.work_shifts import StartShiftResponse, FinishShiftResponse, ActiveWorkShiftsResponse, DeleteShiftResponse, \
 | 
						|
    FinishShiftByIdResponse
 | 
						|
from services.work_shifts import WorkShiftsService
 | 
						|
 | 
						|
work_shifts_router = APIRouter(
 | 
						|
    prefix="/work-shifts",
 | 
						|
    tags=["work-shifts"],
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
@work_shifts_router.get(
 | 
						|
    "/generate-qr-code/{user_id}",
 | 
						|
    operation_id="generate_qr_code",
 | 
						|
)
 | 
						|
async def generate_qr_code(
 | 
						|
        session: SessionDependency,
 | 
						|
        user_id: int,
 | 
						|
):
 | 
						|
    pdf_file: BytesIO = await WorkShiftsQRCodeGenerator(session).generate(user_id)
 | 
						|
    return Response(pdf_file.getvalue(), media_type="application/pdf")
 | 
						|
 | 
						|
 | 
						|
@work_shifts_router.post(
 | 
						|
    "/start-shift/{user_id}",
 | 
						|
    response_model=StartShiftResponse,
 | 
						|
    operation_id="start_shift",
 | 
						|
)
 | 
						|
async def start_shift(
 | 
						|
        session: SessionDependency,
 | 
						|
        user_id: int,
 | 
						|
):
 | 
						|
    return await WorkShiftsService(session).start_shift(user_id)
 | 
						|
 | 
						|
 | 
						|
@work_shifts_router.post(
 | 
						|
    "/finish-shift/{user_id}",
 | 
						|
    response_model=FinishShiftResponse,
 | 
						|
    operation_id="finish_shift",
 | 
						|
)
 | 
						|
async def finish_shift(
 | 
						|
        session: SessionDependency,
 | 
						|
        user_id: int,
 | 
						|
        user: CurrentUserDependency,
 | 
						|
):
 | 
						|
    return await WorkShiftsService(session).finish_shift(user, user_id)
 | 
						|
 | 
						|
 | 
						|
@work_shifts_router.post(
 | 
						|
    "/finish-shift-by-id/{shift_id}",
 | 
						|
    response_model=FinishShiftByIdResponse,
 | 
						|
    operation_id="finish_work_shift_by_id",
 | 
						|
)
 | 
						|
async def finish_work_shift_by_id(
 | 
						|
        session: SessionDependency,
 | 
						|
        user: CurrentUserDependency,
 | 
						|
        shift_id: int,
 | 
						|
):
 | 
						|
    return await WorkShiftsService(session).finish_shift_by_id(user, shift_id)
 | 
						|
 | 
						|
 | 
						|
@work_shifts_router.get(
 | 
						|
    "/get-active-shifts",
 | 
						|
    response_model=ActiveWorkShiftsResponse,
 | 
						|
    operation_id="get_active_shifts",
 | 
						|
)
 | 
						|
async def get_active_shifts(
 | 
						|
        session: SessionDependency,
 | 
						|
):
 | 
						|
    return await WorkShiftsService(session).get_active_shifts()
 | 
						|
 | 
						|
 | 
						|
@work_shifts_router.delete(
 | 
						|
    "/delete-shift/{shift_id}",
 | 
						|
    response_model=DeleteShiftResponse,
 | 
						|
    operation_id="delete_work_shift",
 | 
						|
)
 | 
						|
async def delete_work_shift(
 | 
						|
        session: SessionDependency,
 | 
						|
        shift_id: int,
 | 
						|
):
 | 
						|
    return await WorkShiftsService(session).delete_shift(shift_id)
 |