From abb85650c862237b4d9b7f34adec1db510ae36be Mon Sep 17 00:00:00 2001 From: steven carpenter Date: Sun, 27 Jul 2025 16:18:54 -0400 Subject: [PATCH] added edit and delete event functions --- internal/storage/storage.go | 73 +++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/internal/storage/storage.go b/internal/storage/storage.go index b4edd9f..ff9f7c2 100644 --- a/internal/storage/storage.go +++ b/internal/storage/storage.go @@ -119,3 +119,76 @@ func GetEventsForDay(year,month,day int32) ([]*calendar.Event,error) { }) return events,err } + +func EditEvent(originalYear, originalMonth, originalDay, originalStartHour int32, updated EventInput) error { + if db == nil { + err := fmt.Errorf("badger DB is not initialized") + logger.Log.Error(err) + return err + } + + // Reject changes to key-defining fields + if updated.Year != originalYear || + updated.Month != originalMonth || + updated.Day != originalDay || + updated.StartHour != originalStartHour { + + err := fmt.Errorf("editing key-defining fields (year, month, day, startHour) is not allowed; delete and recreate instead") + logger.Log.Error(err) + return err + } + + key := fmt.Appendf(nil, "events/%04d-%02d-%02d/%02d", originalYear, originalMonth, originalDay, originalStartHour) + + event := &calendar.Event{ + Title: updated.Title, + Description: updated.Description, + Year: originalYear, + Month: originalMonth, + Day: originalDay, + StartHour: originalStartHour, + EndHour: updated.EndHour, + Color: updated.Color, + } + + data, err := proto.Marshal(event) + if err != nil { + err = fmt.Errorf("failed to marshal updated event: %w", err) + logger.Log.Error(err) + return err + } + + err = db.Update(func(txn *badger.Txn) error { + return txn.Set(key, data) + }) + + if err != nil { + err = fmt.Errorf("failed to update event in DB: %w", err) + logger.Log.Error(err) + return err + } + + return nil +} + +func DeleteEvent(year, month, day, startHour int32) error { + if db == nil { + err := fmt.Errorf("badger DB is not initialized") + logger.Log.Error(err) + return err + } + + key := fmt.Appendf(nil, "events/%04d-%02d-%02d/%02d", year, month, day, startHour) + + err := db.Update(func(txn *badger.Txn) error { + return txn.Delete(key) + }) + if err != nil { + err = fmt.Errorf("failed to delete event from DB: %w", err) + logger.Log.Error(err) + return err + } + + return nil +} +