FastAPI2604_HF / routers /user_router.py
kimsaeromi's picture
.
fcc560d
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))