Spaces:
Running
Running
File size: 3,366 Bytes
c4d1e86 fcc560d c4d1e86 fcc560d c4d1e86 fcc560d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | 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))
|