Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions src/backend/database/service/pad_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from sqlalchemy.ext.asyncio import AsyncSession

from ..repository import PadRepository, UserRepository
from .user_service import UserService

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

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

if not token_data:
raise ValueError("Token data is required for user creation failsafe")

# Check if owner exists
owner = await self.user_repository.get_by_id(owner_id)
if not owner:
raise ValueError(f"User with ID '{owner_id}' does not exist")
# User doesn't exist, create a user record from token data
print(f"WARNING: User with ID '{owner_id}' does not exist but is trying to save a pad. Creating user as failsafe.")

# Create a UserService instance
user_service = UserService(self.session)

# Use token data to create a complete user record
await user_service.sync_user_with_token_data(owner_id, token_data)

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

pads = await self.repository.get_by_owner(owner_id)
return [pad.to_dict() for pad in pads]
Expand Down
6 changes: 4 additions & 2 deletions src/backend/routers/pad_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ async def save_pad(
pad = await pad_service.create_pad(
owner_id=user.id,
display_name=DEFAULT_PAD_NAME,
data=data
data=data,
token_data=user.token_data
)
else:
# Update existing pad
Expand Down Expand Up @@ -99,7 +100,8 @@ async def create_pad_from_template(
pad = await pad_service.create_pad(
owner_id=user.id,
display_name=display_name,
data=template["data"]
data=template["data"],
token_data=user.token_data
)

# Create an initial backup for the new pad
Expand Down