Add service center card interactions
This commit is contained in:
@@ -393,6 +393,44 @@ async def request_vehicle_link(
|
||||
return link
|
||||
|
||||
|
||||
@router.post("/{service_center_id}/vehicle-links/owner-attach", response_model=CarServiceLinkRead)
|
||||
async def owner_attach_vehicle_link(
|
||||
service_center_id: int,
|
||||
payload: ServiceCenterAccessRequest,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
current_user: User = Depends(get_current_telegram_user),
|
||||
) -> CarServiceLink:
|
||||
await ensure_service_center_approved(session, service_center_id)
|
||||
vehicle = await session.get(Car, payload.car_id)
|
||||
if vehicle is None:
|
||||
raise HTTPException(status_code=404, detail="Vehicle not found")
|
||||
if vehicle.owner_id != current_user.id:
|
||||
raise HTTPException(status_code=403, detail="Forbidden")
|
||||
link = await upsert_service_link(
|
||||
session,
|
||||
car_id=payload.car_id,
|
||||
service_center_id=service_center_id,
|
||||
requested_by_user_id=current_user.id,
|
||||
access_level=payload.access_level,
|
||||
external_vehicle_ref=payload.external_vehicle_ref,
|
||||
status_value="approved",
|
||||
)
|
||||
link.approved_by_user_id = current_user.id
|
||||
link.approved_at = datetime.now(UTC)
|
||||
link.revoked_at = None
|
||||
await log_audit(
|
||||
session,
|
||||
actor=current_user,
|
||||
action="car_service_link.owner_attach",
|
||||
target_type="car_service_link",
|
||||
target_id=link.id,
|
||||
metadata={"car_id": payload.car_id, "service_center_id": service_center_id},
|
||||
)
|
||||
await session.commit()
|
||||
await session.refresh(link)
|
||||
return link
|
||||
|
||||
|
||||
@router.post("/links/{link_id}/approve", response_model=CarServiceLinkRead)
|
||||
async def approve_vehicle_link(
|
||||
link_id: int,
|
||||
|
||||
Reference in New Issue
Block a user