from fastapi import APIRouter, Form, File, UploadFile from utils.common import CommonResponse, create_jwt_token from utils.db import get_connection router = APIRouter( prefix="/user", tags=["user"] ) @router.post("/login_register") def login_register(provider: str = Form(""), firebase_uid: str = Form(""), email: str = Form(""),display_name: str = Form(""), photo_url: str = Form("")): try: if firebase_uid == "": return CommonResponse(success=False, msg="firebase_uid is required") if email == "": return CommonResponse(success=False, msg="email is required") with get_connection() as conn: with conn.cursor() as cur: cur.execute(""" INSERT INTO t_user ( firebase_uid, email, display_name, photo_url, provider, last_login_at ) VALUES ( %s, %s, NULLIF(%s, ''), NULLIF(%s, ''), COALESCE(NULLIF(%s, ''), 'google'), CURRENT_TIMESTAMP ) ON CONFLICT (firebase_uid) DO UPDATE SET email = EXCLUDED.email, display_name = EXCLUDED.display_name, photo_url = EXCLUDED.photo_url, provider = EXCLUDED.provider, last_login_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP RETURNING id, firebase_uid, email, display_name, photo_url, provider, role, status, last_login_at, created_at, updated_at """, [firebase_uid, email, display_name, photo_url, provider]) row = cur.fetchone() conn.commit() data = { "id": row[0], "firebase_uid": row[1], "email": row[2], "display_name": row[3], "photo_url": row[4], "provider": row[5], "role": row[6], "status": row[7], "last_login_at": row[8].isoformat() if row[8] else None, "created_at": row[9].isoformat() if row[9] else None, "updated_at": row[10].isoformat() if row[10] else None } access_token = create_jwt_token(data) return CommonResponse(success=True, data={ "access_token": access_token, "token_type": "bearer", "user": data }) except Exception as e: return CommonResponse(success=False, msg=str(e)) @router.post("/upload") async def upload_file(file: UploadFile = File(...)): try: # business logic contents = await file.read() data = { "filename": file.filename, "content_type": file.content_type, "size": len(contents) } return CommonResponse(success=True, data=data) except Exception as e: return CommonResponse(success=False, msg=str(e))