Configure robust guest_login retrieval and database field defaults
Browse files- app/routers/auth.py +42 -7
app/routers/auth.py
CHANGED
|
@@ -92,7 +92,13 @@ async def update_mode(body: schemas.ModeUpdate, current_user: models.User = Depe
|
|
| 92 |
|
| 93 |
@router.post("/guest", response_model=schemas.UserResponse)
|
| 94 |
async def guest_login(response: Response, db: AsyncSession = Depends(get_db)):
|
| 95 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
user = result.scalars().first()
|
| 97 |
|
| 98 |
if not user:
|
|
@@ -105,17 +111,46 @@ async def guest_login(response: Response, db: AsyncSession = Depends(get_db)):
|
|
| 105 |
display_mode="founder",
|
| 106 |
credits_remaining=999999,
|
| 107 |
credits_reset_at=datetime.utcnow() + timedelta(days=30),
|
|
|
|
|
|
|
|
|
|
| 108 |
is_active=True
|
| 109 |
)
|
| 110 |
db.add(user)
|
| 111 |
await db.commit()
|
| 112 |
await db.refresh(user)
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
|
| 120 |
response.set_cookie(
|
| 121 |
key="archvise_session",
|
|
|
|
| 92 |
|
| 93 |
@router.post("/guest", response_model=schemas.UserResponse)
|
| 94 |
async def guest_login(response: Response, db: AsyncSession = Depends(get_db)):
|
| 95 |
+
# Look up by either UID or email to prevent uniqueness conflicts if rows already exist
|
| 96 |
+
result = await db.execute(
|
| 97 |
+
select(models.User).where(
|
| 98 |
+
(models.User.firebase_uid == "guest_uid_123") |
|
| 99 |
+
(models.User.email == "guest@archvise.com")
|
| 100 |
+
)
|
| 101 |
+
)
|
| 102 |
user = result.scalars().first()
|
| 103 |
|
| 104 |
if not user:
|
|
|
|
| 111 |
display_mode="founder",
|
| 112 |
credits_remaining=999999,
|
| 113 |
credits_reset_at=datetime.utcnow() + timedelta(days=30),
|
| 114 |
+
github_connected=False,
|
| 115 |
+
total_audits=0,
|
| 116 |
+
total_designs=0,
|
| 117 |
is_active=True
|
| 118 |
)
|
| 119 |
db.add(user)
|
| 120 |
await db.commit()
|
| 121 |
await db.refresh(user)
|
| 122 |
+
else:
|
| 123 |
+
# Guarantee all non-nullable schema fields are populated on the existing guest user
|
| 124 |
+
dirty = False
|
| 125 |
+
if user.firebase_uid != "guest_uid_123":
|
| 126 |
+
user.firebase_uid = "guest_uid_123"
|
| 127 |
+
dirty = True
|
| 128 |
+
if user.email != "guest@archvise.com":
|
| 129 |
+
user.email = "guest@archvise.com"
|
| 130 |
+
dirty = True
|
| 131 |
+
if user.plan != "pro":
|
| 132 |
+
user.plan = "pro"
|
| 133 |
+
dirty = True
|
| 134 |
+
if user.credits_remaining != 999999:
|
| 135 |
+
user.credits_remaining = 999999
|
| 136 |
+
dirty = True
|
| 137 |
+
if user.github_connected is None:
|
| 138 |
+
user.github_connected = False
|
| 139 |
+
dirty = True
|
| 140 |
+
if user.total_audits is None:
|
| 141 |
+
user.total_audits = 0
|
| 142 |
+
dirty = True
|
| 143 |
+
if user.total_designs is None:
|
| 144 |
+
user.total_designs = 0
|
| 145 |
+
dirty = True
|
| 146 |
+
if user.is_active is None:
|
| 147 |
+
user.is_active = True
|
| 148 |
+
dirty = True
|
| 149 |
+
|
| 150 |
+
if dirty:
|
| 151 |
+
db.add(user)
|
| 152 |
+
await db.commit()
|
| 153 |
+
await db.refresh(user)
|
| 154 |
|
| 155 |
response.set_cookie(
|
| 156 |
key="archvise_session",
|