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))