Spaces:
Running
Running
| 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"] | |
| ) | |
| 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)) | |
| 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)) | |