@@ -201,41 +201,66 @@ func (dao *SessionDAO) updateSession(
201
201
}
202
202
203
203
// Delete soft-deletes a session from the database by its sessionID.
204
- // It also soft-deletes all messages and message embeddings associated with the session.
204
+ // It also soft-deletes all messages, message embeddings, and summaries associated with the session.
205
205
func (dao * SessionDAO ) Delete (ctx context.Context , sessionID string ) error {
206
206
dbSession := & SessionSchema {}
207
207
208
- r , err := dao .db .NewDelete ().
208
+ tx , err := dao .db .BeginTx (ctx , nil )
209
+ if err != nil {
210
+ return fmt .Errorf ("failed to begin transaction: %w" , err )
211
+ }
212
+
213
+ r , err := tx .NewDelete ().
209
214
Model (dbSession ).
210
215
Where ("session_id = ?" , sessionID ).
211
216
Exec (ctx )
212
217
if err != nil {
218
+ rollbackErr := tx .Rollback ()
219
+ if rollbackErr != nil {
220
+ return fmt .Errorf ("failed to delete session: %v, failed to rollback transaction: %w" , err , rollbackErr )
221
+ }
213
222
return fmt .Errorf ("failed to delete session: %w" , err )
214
223
}
215
224
216
225
rowsAffected , err := r .RowsAffected ()
217
226
if err != nil {
227
+ rollbackErr := tx .Rollback ()
228
+ if rollbackErr != nil {
229
+ return fmt .Errorf ("failed to delete session: %v, failed to rollback transaction: %w" , err , rollbackErr )
230
+ }
218
231
return fmt .Errorf ("failed to get rows affected: %w" , err )
219
232
}
220
233
if rowsAffected == 0 {
234
+ rollbackErr := tx .Rollback ()
235
+ if rollbackErr != nil {
236
+ return fmt .Errorf ("failed to delete session: %v, failed to rollback transaction: %w" , err , rollbackErr )
237
+ }
221
238
return models .NewNotFoundError ("session " + sessionID )
222
239
}
223
240
224
- // delete all messages and message embeddings associated with the session
241
+ // delete all messages, message embeddings, and summaries associated with the session
225
242
for _ , schema := range messageTableList {
226
243
if _ , ok := schema .(* SessionSchema ); ok {
227
244
continue
228
245
}
229
246
log .Debugf ("deleting session %s from schema %T" , sessionID , schema )
230
- _ , err := dao . db .NewDelete ().
247
+ _ , err := tx .NewDelete ().
231
248
Model (schema ).
232
249
Where ("session_id = ?" , sessionID ).
233
250
Exec (ctx )
234
251
if err != nil {
252
+ rollbackErr := tx .Rollback ()
253
+ if rollbackErr != nil {
254
+ return fmt .Errorf ("failed to delete session: %v, failed to rollback transaction: %w" , err , rollbackErr )
255
+ }
235
256
return fmt .Errorf ("error deleting rows from %T: %w" , schema , err )
236
257
}
237
258
}
238
259
260
+ if err := tx .Commit (); err != nil {
261
+ return fmt .Errorf ("failed to commit transaction: %w" , err )
262
+ }
263
+
239
264
return nil
240
265
}
241
266
0 commit comments