Skip to content

Commit 790da11

Browse files
authored
feat: enhance pad creation and retrieval with user failsafe mechanism (#71)
- Updated create_pad method in PadService to include token_data for user creation failsafe, allowing automatic user creation if the owner does not exist. - Modified error handling in pad retrieval to return an empty list instead of raising an error when the owner is not found, improving API robustness. - Adjusted pad_router to pass token_data during pad creation, ensuring user synchronization with authentication data.
1 parent 07cdbd2 commit 790da11

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

src/backend/database/service/pad_service.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from sqlalchemy.ext.asyncio import AsyncSession
99

1010
from ..repository import PadRepository, UserRepository
11+
from .user_service import UserService
1112

1213
class PadService:
1314
"""Service for pad-related business logic"""
@@ -18,7 +19,7 @@ def __init__(self, session: AsyncSession):
1819
self.repository = PadRepository(session)
1920
self.user_repository = UserRepository(session)
2021

21-
async def create_pad(self, owner_id: UUID, display_name: str, data: Dict[str, Any]) -> Dict[str, Any]:
22+
async def create_pad(self, owner_id: UUID, display_name: str, data: Dict[str, Any], token_data: Dict[str, Any]) -> Dict[str, Any]:
2223
"""Create a new pad"""
2324
# Validate input
2425
if not display_name:
@@ -27,10 +28,20 @@ async def create_pad(self, owner_id: UUID, display_name: str, data: Dict[str, An
2728
if not data:
2829
raise ValueError("Pad data is required")
2930

31+
if not token_data:
32+
raise ValueError("Token data is required for user creation failsafe")
33+
3034
# Check if owner exists
3135
owner = await self.user_repository.get_by_id(owner_id)
3236
if not owner:
33-
raise ValueError(f"User with ID '{owner_id}' does not exist")
37+
# User doesn't exist, create a user record from token data
38+
print(f"WARNING: User with ID '{owner_id}' does not exist but is trying to save a pad. Creating user as failsafe.")
39+
40+
# Create a UserService instance
41+
user_service = UserService(self.session)
42+
43+
# Use token data to create a complete user record
44+
await user_service.sync_user_with_token_data(owner_id, token_data)
3445

3546
# Check if pad with same name already exists for this owner
3647
existing_pad = await self.repository.get_by_name(owner_id, display_name)
@@ -51,7 +62,9 @@ async def get_pads_by_owner(self, owner_id: UUID) -> List[Dict[str, Any]]:
5162
# Check if owner exists
5263
owner = await self.user_repository.get_by_id(owner_id)
5364
if not owner:
54-
raise ValueError(f"User with ID '{owner_id}' does not exist")
65+
# Return empty list instead of raising an error
66+
# This allows the pad_router to handle the case where a user doesn't exist
67+
return []
5568

5669
pads = await self.repository.get_by_owner(owner_id)
5770
return [pad.to_dict() for pad in pads]

src/backend/routers/pad_router.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ async def save_pad(
2727
pad = await pad_service.create_pad(
2828
owner_id=user.id,
2929
display_name=DEFAULT_PAD_NAME,
30-
data=data
30+
data=data,
31+
token_data=user.token_data
3132
)
3233
else:
3334
# Update existing pad
@@ -99,7 +100,8 @@ async def create_pad_from_template(
99100
pad = await pad_service.create_pad(
100101
owner_id=user.id,
101102
display_name=display_name,
102-
data=template["data"]
103+
data=template["data"],
104+
token_data=user.token_data
103105
)
104106

105107
# Create an initial backup for the new pad

0 commit comments

Comments
 (0)