from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from typing import Optional from pydantic import BaseModel from app.database import get_db from app.services.push import PushService from app.api.v1.deps import get_current_user_id router = APIRouter() class DeviceRegisterRequest(BaseModel): client_id: str platform: str = "weapp" push_token: Optional[str] = None device_info: Optional[dict] = None @router.post("/register") async def register_device( data: DeviceRegisterRequest, user_id: str = Depends(get_current_user_id), db: AsyncSession = Depends(get_db), ): service = PushService(db) device = await service.register_device( user_id=user_id, client_id=data.client_id, platform=data.platform, push_token=data.push_token, device_info=data.device_info, ) return { "success": True, "device_id": str(device.id), "message": "Device registered", } @router.post("/unregister") async def unregister_device( data: dict, user_id: str = Depends(get_current_user_id), db: AsyncSession = Depends(get_db), ): client_id = data.get("client_id") if not client_id: raise HTTPException(status_code=400, detail="client_id required") service = PushService(db) success = await service.unregister_device(user_id, client_id) if not success: raise HTTPException(status_code=404, detail="Device not found") return {"success": True, "message": "Device unregistered"} @router.get("/devices") async def list_devices( user_id: str = Depends(get_current_user_id), db: AsyncSession = Depends(get_db), ): service = PushService(db) devices = await service.get_user_devices(user_id) return {"devices": devices, "count": len(devices)}