Skip to content

Commit 7b57a99

Browse files
committed
refactor: update pad router and API endpoint consistency
- Refactored pad router to streamline user pad management, including saving and retrieving canvas data. - Updated user session handling to use user.id instead of user_id for consistency. - Changed API endpoints in frontend hooks to align with new pad routing structure, enhancing clarity and usability. - Removed deprecated default canvas data retrieval function, simplifying the codebase.
1 parent 20923d6 commit 7b57a99

File tree

2 files changed

+29
-61
lines changed

2 files changed

+29
-61
lines changed

src/backend/routers/pad_router.py

Lines changed: 25 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,115 +7,89 @@
77
from database import get_pad_service, get_backup_service, get_template_pad_service
88
from database.service import PadService, BackupService, TemplatePadService
99

10-
# Default template name to use when a user doesn't have a pad
11-
DEFAULT_TEMPLATE_NAME = "default"
12-
13-
pad_router = APIRouter()
14-
1510
# Constants
1611
MAX_BACKUPS_PER_USER = 10 # Maximum number of backups to keep per user
1712
DEFAULT_PAD_NAME = "Untitled" # Default name for new pads
13+
DEFAULT_TEMPLATE_NAME = "default" # Template name to use when a user doesn't have a pad
14+
15+
pad_router = APIRouter()
1816

19-
@pad_router.post("")
17+
18+
@pad_router.post("/")
2019
async def save_canvas(
2120
data: Dict[str, Any],
22-
auth: UserSession = Depends(require_auth),
21+
user: UserSession = Depends(require_auth),
2322
pad_service: PadService = Depends(get_pad_service),
2423
backup_service: BackupService = Depends(get_backup_service),
25-
request: Request = None
2624
):
2725
"""Save canvas data for the authenticated user"""
28-
# Get user ID from session
29-
user_id = auth.user_id
30-
3126
try:
3227
# Check if user already has a pad
33-
user_pads = await pad_service.get_pads_by_owner(user_id)
28+
user_pads = await pad_service.get_pads_by_owner(user.id)
3429

3530
if not user_pads:
3631
# Create a new pad if user doesn't have one
3732
pad = await pad_service.create_pad(
38-
owner_id=user_id,
33+
owner_id=user.id,
3934
display_name=DEFAULT_PAD_NAME,
4035
data=data
4136
)
42-
pad_id = UUID(pad["id"])
4337
else:
4438
# Update existing pad
4539
pad = user_pads[0] # Use the first pad (assuming one pad per user for now)
46-
pad_id = UUID(pad["id"])
47-
await pad_service.update_pad_data(pad_id, data)
40+
await pad_service.update_pad_data(pad["id"], data)
4841

4942
# Create a backup
50-
await backup_service.create_backup(pad_id, data)
43+
await backup_service.create_backup(pad["id"], data)
5144

5245
# Manage backups (keep only the most recent ones)
53-
await backup_service.manage_backups(pad_id, MAX_BACKUPS_PER_USER)
46+
await backup_service.manage_backups(pad["id"], MAX_BACKUPS_PER_USER)
5447

5548
return {"status": "success"}
5649
except Exception as e:
5750
raise HTTPException(status_code=500, detail=f"Failed to save canvas data: {str(e)}")
5851

59-
async def get_default_canvas_data(template_pad_service: TemplatePadService) -> Dict[str, Any]:
60-
"""Get default canvas data from the template pad with name 'default'"""
61-
try:
62-
# Get the default template pad
63-
default_template = await template_pad_service.get_template_by_name(DEFAULT_TEMPLATE_NAME)
64-
if not default_template:
65-
# Return empty data if default template doesn't exist
66-
return {}
67-
68-
# Return the template data
69-
return default_template["data"]
70-
except Exception as e:
71-
# Log the error but return empty data to avoid breaking the application
72-
print(f"Error getting default canvas data: {str(e)}")
73-
return {}
7452

75-
@pad_router.get("")
53+
@pad_router.get("/")
7654
async def get_canvas(
77-
auth: UserSession = Depends(require_auth),
55+
user: UserSession = Depends(require_auth),
7856
pad_service: PadService = Depends(get_pad_service),
7957
template_pad_service: TemplatePadService = Depends(get_template_pad_service)
8058
):
8159
"""Get canvas data for the authenticated user"""
82-
# Get user ID from session
83-
user_id = auth.user_id
84-
8560
try:
8661
# Get user's pads
87-
user_pads = await pad_service.get_pads_by_owner(user_id)
62+
user_pads = await pad_service.get_pads_by_owner(user.id)
8863

8964
if not user_pads:
9065
# Return default canvas if user doesn't have a pad
91-
return await get_default_canvas_data(template_pad_service)
66+
return await create_pad_from_template(DEFAULT_TEMPLATE_NAME, DEFAULT_PAD_NAME, user, pad_service, template_pad_service)
9267

9368
# Return the first pad's data (assuming one pad per user for now)
9469
return user_pads[0]["data"]
9570
except Exception as e:
9671
raise HTTPException(status_code=500, detail=f"Failed to get canvas data: {str(e)}")
9772

98-
@pad_router.post("/from-template/{template_id}")
73+
74+
@pad_router.post("/from-template/{name}")
9975
async def create_pad_from_template(
100-
template_id: UUID,
76+
name: str,
10177
display_name: str = DEFAULT_PAD_NAME,
102-
auth: UserSession = Depends(require_auth),
78+
user: UserSession = Depends(require_auth),
10379
pad_service: PadService = Depends(get_pad_service),
10480
template_pad_service: TemplatePadService = Depends(get_template_pad_service)
10581
):
10682
"""Create a new pad from a template"""
107-
# Get user ID from session
108-
user_id = auth.user_id
109-
83+
11084
try:
11185
# Get the template
112-
template = await template_pad_service.get_template(template_id)
86+
template = await template_pad_service.get_template_by_name(name)
11387
if not template:
11488
raise HTTPException(status_code=404, detail="Template not found")
11589

11690
# Create a new pad using the template data
11791
pad = await pad_service.create_pad(
118-
owner_id=user_id,
92+
owner_id=user.id,
11993
display_name=display_name,
12094
data=template["data"]
12195
)
@@ -126,28 +100,22 @@ async def create_pad_from_template(
126100
except Exception as e:
127101
raise HTTPException(status_code=500, detail=f"Failed to create pad from template: {str(e)}")
128102

103+
129104
@pad_router.get("/recent")
130105
async def get_recent_canvas_backups(
131106
limit: int = MAX_BACKUPS_PER_USER,
132-
auth: UserSession = Depends(require_auth),
107+
user: UserSession = Depends(require_auth),
133108
pad_service: PadService = Depends(get_pad_service),
134109
backup_service: BackupService = Depends(get_backup_service)
135110
):
136111
"""Get the most recent canvas backups for the authenticated user"""
137-
# Get user ID from session
138-
user_id = auth.user_id
139-
140112
# Limit the number of backups to the maximum configured value
141113
if limit > MAX_BACKUPS_PER_USER:
142114
limit = MAX_BACKUPS_PER_USER
143115

144116
try:
145117
# Get user's pads
146-
user_pads = await pad_service.get_pads_by_owner(user_id)
147-
148-
if not user_pads:
149-
# Return empty list if user doesn't have a pad
150-
return {"backups": []}
118+
user_pads = await pad_service.get_pads_by_owner(user.id)
151119

152120
# Get the first pad's ID (assuming one pad per user for now)
153121
pad_id = UUID(user_pads[0]["id"])

src/frontend/src/api/hooks.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export const api = {
9696
// Canvas
9797
getCanvas: async (): Promise<CanvasData> => {
9898
try {
99-
const result = await fetchApi('/api/canvas');
99+
const result = await fetchApi('/api/pad/');
100100
return result;
101101
} catch (error) {
102102
throw error;
@@ -105,7 +105,7 @@ export const api = {
105105

106106
saveCanvas: async (data: CanvasData): Promise<any> => {
107107
try {
108-
const result = await fetchApi('/api/canvas', {
108+
const result = await fetchApi('/api/pad/', {
109109
method: 'POST',
110110
body: JSON.stringify(data),
111111
});
@@ -117,7 +117,7 @@ export const api = {
117117

118118
getDefaultCanvas: async (): Promise<CanvasData> => {
119119
try {
120-
const result = await fetchApi('/api/canvas/default');
120+
const result = await fetchApi('/api/pad/from-template/default');
121121
return result;
122122
} catch (error) {
123123
throw error;
@@ -127,7 +127,7 @@ export const api = {
127127
// Canvas Backups
128128
getCanvasBackups: async (limit: number = 10): Promise<CanvasBackupsResponse> => {
129129
try {
130-
const result = await fetchApi(`/api/canvas/recent?limit=${limit}`);
130+
const result = await fetchApi(`/api/pad/recent?limit=${limit}`);
131131
return result;
132132
} catch (error) {
133133
throw error;

0 commit comments

Comments
 (0)