From c55052ad5b641cc881b8d92495a9fa67d3806ac5 Mon Sep 17 00:00:00 2001 From: William P Date: Thu, 27 Mar 2025 14:50:44 -0400 Subject: [PATCH] create db update message function --- api/db.go | 48 +++++++++++++++++++++++++++++++++++++++++ api/message.go | 12 +++++++++-- test_data/messages.json | 17 +++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) diff --git a/api/db.go b/api/db.go index a127971..86a7577 100644 --- a/api/db.go +++ b/api/db.go @@ -150,6 +150,54 @@ func dbAddMessage(message *Message) error { return db.WriteDB("messages", messages) } +func dbUpdateMessage(updatedMessage *Message) error { + currentData := db.ExecDB("messages") + if currentData == nil { + return fmt.Errorf("error reading messages database") + } + + messages, ok := currentData["messages"].([]interface{}) + if !ok { + return fmt.Errorf("messages data is in an unexpected format") + } + + var updatedMessages []interface{} + found := false + + for _, m := range messages { + message, ok := m.(map[string]interface{}) + if !ok { + continue + } + + if messageID, ok := message["ID"].(string); ok && messageID == updatedMessage.ID { + found = true + + var edited interface{} + if updatedMessage.Edited.IsZero() { + edited = nil // Set to nil if Edited is the zero value + } else { + edited = updatedMessage.Edited.Format(time.RFC3339) + } + + message = map[string]interface{}{ + "ID": updatedMessage.ID, + "UserID": updatedMessage.UserID, + "Body": updatedMessage.Body, + "Timestamp": updatedMessage.Timestamp.Format(time.RFC3339), + "Edited": edited, + } + } + updatedMessages = append(updatedMessages, message) + } + + if !found { + return fmt.Errorf("message with ID %s not found", updatedMessage.ID) + } + + return db.WriteDB("messages", updatedMessages) +} + func dbDeleteMessage(id string) error { currentData := db.ExecDB("messages") if currentData == nil { diff --git a/api/message.go b/api/message.go index b6b0448..01b0d45 100644 --- a/api/message.go +++ b/api/message.go @@ -64,11 +64,19 @@ func EditMessage(w http.ResponseWriter, r *http.Request) { http.Error(w, "Message body cannot be empty", http.StatusBadRequest) return } + message.Body = body - dbDeleteMessage(message.ID) message.Edited = time.Now() - err = dbAddMessage(message) + + err = dbUpdateMessage(message) if err != nil { + render.Render(w, r, ErrRender(err)) + return + } + + if err := render.Render(w, r, NewMessageResponse(message)); err != nil { + render.Render(w, r, ErrRender(err)) + return } } diff --git a/test_data/messages.json b/test_data/messages.json index 2a80fe8..e113bba 100644 --- a/test_data/messages.json +++ b/test_data/messages.json @@ -1,62 +1,79 @@ [ { "Body": "hello", + "Edited": null, "ID": "1", "Timestamp": "2024-12-25T05:00:40Z", "UserID": 1 }, { "Body": "world", + "Edited": null, "ID": "2", "Timestamp": "2024-12-25T05:00:43Z", "UserID": 2 }, { "Body": "abababa", + "Edited": null, "ID": "3", "Timestamp": "2024-12-25T05:01:20Z", "UserID": 1 }, { "Body": "bitch", + "Edited": null, "ID": "4", "Timestamp": "2024-12-25T05:05:55Z", "UserID": 2 }, { "Body": "NIBBA", + "Edited": null, "ID": "5", "Timestamp": "2025-03-24T14:48:28.249221047-04:00", "UserID": 1 }, { "Body": "nibby", + "Edited": null, "ID": "6", "Timestamp": "2025-03-24T14:49:03.246929039-04:00", "UserID": 1 }, { "Body": "aaaaababananana", + "Edited": null, "ID": "msg_60f70a47-3be2-4315-869a-d6f151ec262a", "Timestamp": "2025-03-24T15:01:07.14371835-04:00", "UserID": 1 }, { "Body": "ababa abbott", + "Edited": null, "ID": "msg_94cbc26d-9098-4fa9-bd21-794516c2263d", "Timestamp": "2025-03-24T20:34:57.198849367-04:00", "UserID": 1 }, { "Body": "AAAAAA", + "Edited": null, "ID": "msg_ca8483db-e823-45c4-882c-fe0930610ba9", "Timestamp": "2025-03-24T21:17:04.350827576-04:00", "UserID": 1 }, { "Body": "i am a femboiiiii", + "Edited": null, "ID": "msg_fcdbb48a-4ea5-4fb3-b925-3a15eb7c291c", "Timestamp": "2025-03-24T21:27:48.565290147-04:00", "UserID": 2 + }, + { + "Body": "i love soap", + "Edited": "2025-03-27T14:49:14-04:00", + "ID": "msg_59851eb1-2e63-46c1-b496-55566c414e33", + "Timestamp": "2025-03-27T14:40:26-04:00", + "UserID": 1 } ] \ No newline at end of file