66from dependencies import UserSession , require_auth
77from database import get_pad_service , get_backup_service , get_template_pad_service
88from database .service import PadService , BackupService , TemplatePadService
9-
10- # Constants
11- MAX_BACKUPS_PER_USER = 10 # Maximum number of backups to keep per user
12- 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-
9+ from config import MAX_BACKUPS_PER_USER , MIN_INTERVAL_MINUTES , DEFAULT_PAD_NAME , DEFAULT_TEMPLATE_NAME
1510pad_router = APIRouter ()
1611
1712
@@ -39,11 +34,13 @@ async def save_canvas(
3934 pad = user_pads [0 ] # Use the first pad (assuming one pad per user for now)
4035 await pad_service .update_pad_data (pad ["id" ], data )
4136
42- # Create a backup
43- await backup_service .create_backup (pad ["id" ], data )
44-
45- # Manage backups (keep only the most recent ones)
46- await backup_service .manage_backups (pad ["id" ], MAX_BACKUPS_PER_USER )
37+ # Create a backup only if needed (if none exist or latest is > 5 min old)
38+ await backup_service .create_backup_if_needed (
39+ source_id = pad ["id" ],
40+ data = data ,
41+ min_interval_minutes = MIN_INTERVAL_MINUTES ,
42+ max_backups = MAX_BACKUPS_PER_USER
43+ )
4744
4845 return {"status" : "success" }
4946 except Exception as e :
@@ -54,7 +51,8 @@ async def save_canvas(
5451async def get_canvas (
5552 user : UserSession = Depends (require_auth ),
5653 pad_service : PadService = Depends (get_pad_service ),
57- template_pad_service : TemplatePadService = Depends (get_template_pad_service )
54+ template_pad_service : TemplatePadService = Depends (get_template_pad_service ),
55+ backup_service : BackupService = Depends (get_backup_service )
5856):
5957 """Get canvas data for the authenticated user"""
6058 try :
@@ -63,7 +61,14 @@ async def get_canvas(
6361
6462 if not user_pads :
6563 # Return default canvas if user doesn't have a pad
66- return await create_pad_from_template (DEFAULT_TEMPLATE_NAME , DEFAULT_PAD_NAME , user , pad_service , template_pad_service )
64+ return await create_pad_from_template (
65+ name = DEFAULT_TEMPLATE_NAME ,
66+ display_name = DEFAULT_PAD_NAME ,
67+ user = user ,
68+ pad_service = pad_service ,
69+ template_pad_service = template_pad_service ,
70+ backup_service = backup_service
71+ )
6772
6873 # Return the first pad's data (assuming one pad per user for now)
6974 return user_pads [0 ]["data" ]
@@ -77,7 +82,8 @@ async def create_pad_from_template(
7782 display_name : str = DEFAULT_PAD_NAME ,
7883 user : UserSession = Depends (require_auth ),
7984 pad_service : PadService = Depends (get_pad_service ),
80- template_pad_service : TemplatePadService = Depends (get_template_pad_service )
85+ template_pad_service : TemplatePadService = Depends (get_template_pad_service ),
86+ backup_service : BackupService = Depends (get_backup_service )
8187):
8288 """Create a new pad from a template"""
8389
@@ -94,6 +100,14 @@ async def create_pad_from_template(
94100 data = template ["data" ]
95101 )
96102
103+ # Create an initial backup for the new pad
104+ await backup_service .create_backup_if_needed (
105+ source_id = pad ["id" ],
106+ data = template ["data" ],
107+ min_interval_minutes = 0 , # Always create initial backup
108+ max_backups = MAX_BACKUPS_PER_USER
109+ )
110+
97111 return pad
98112 except ValueError as e :
99113 raise HTTPException (status_code = 400 , detail = str (e ))
@@ -105,7 +119,6 @@ async def create_pad_from_template(
105119async def get_recent_canvas_backups (
106120 limit : int = MAX_BACKUPS_PER_USER ,
107121 user : UserSession = Depends (require_auth ),
108- pad_service : PadService = Depends (get_pad_service ),
109122 backup_service : BackupService = Depends (get_backup_service )
110123):
111124 """Get the most recent canvas backups for the authenticated user"""
@@ -114,18 +127,12 @@ async def get_recent_canvas_backups(
114127 limit = MAX_BACKUPS_PER_USER
115128
116129 try :
117- # Get user's pads
118- user_pads = await pad_service .get_pads_by_owner (user .id )
119-
120- # Get the first pad's ID (assuming one pad per user for now)
121- pad_id = UUID (user_pads [0 ]["id" ])
122-
123- # Get backups for the pad
124- backups_data = await backup_service .get_backups_by_source (pad_id )
130+ # Get backups directly with a single query
131+ backups_data = await backup_service .get_backups_by_user (user .id , limit )
125132
126133 # Format backups to match the expected response format
127134 backups = []
128- for backup in backups_data [: limit ] :
135+ for backup in backups_data :
129136 backups .append ({
130137 "id" : backup ["id" ],
131138 "timestamp" : backup ["created_at" ],
0 commit comments