diff --git a/api/db.go b/api/db.go index 3539ef4..aeb0e81 100644 --- a/api/db.go +++ b/api/db.go @@ -81,23 +81,78 @@ func dbGetAllMessages() ([]*Message, error) { } func dbAddUser(id int64, name string) error { + currentData := db.ExecDB("users") + if currentData == nil { + return fmt.Errorf("error reading users database") + } + + users, ok := currentData["users"].([]interface{}) + if !ok { + return fmt.Errorf("users data is in an unexpected format") + } + user := map[string]interface{}{ "ID": float64(id), // JSON numbers are float64 by default "Name": name, } - return db.AddUser(user) + + users = append(users, user) + return db.WriteDB("users", users) } func dbAddMessage(message *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") + } + dbMessage := map[string]interface{}{ "ID": message.ID, "UserID": message.UserID, // JSON numbers are float64 "Body": message.Body, "Timestamp": message.Timestamp, } - return db.AddMessage(dbMessage) + + messages = append(messages, dbMessage) + return db.WriteDB("messages", messages) } func dbDeleteMessage(id string) error { - return db.DeleteMessage(id) + 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 == id { + found = true + continue + } + + updatedMessages = append(updatedMessages, message) + } + + if !found { + return fmt.Errorf("message with ID %s not found", id) + } + + return db.WriteDB("messages", updatedMessages) } diff --git a/db/fake_db.go b/db/fake_db.go index 247e20b..5ce44ad 100644 --- a/db/fake_db.go +++ b/db/fake_db.go @@ -71,58 +71,3 @@ func WriteDB(db_name string, data interface{}) error { fmt.Printf("Successfully wrote to %s DB\n", db_name) return nil } - -func AddUser(user map[string]interface{}) error { - currentData := ExecDB("users") - if currentData == nil { - return fmt.Errorf("error reading users database") - } - - users := currentData["users"].([]interface{}) - users = append(users, user) - return WriteDB("users", users) -} - -func AddMessage(message map[string]interface{}) error { - currentData := ExecDB("messages") - if currentData == nil { - return fmt.Errorf("error reading messages database") - } - - messages := currentData["messages"].([]interface{}) - messages = append(messages, message) - return WriteDB("messages", messages) -} - -func DeleteMessage(messageID string) error { - currentData := 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 _, value := range messages { - if item, ok := value.(map[string]interface{}); ok { - if id, exists := item["ID"]; exists { - if idStr, ok := id.(string); ok && idStr == messageID { - found = true - continue - } - } - } - updatedMessages = append(updatedMessages, value) - } - - if !found { - return fmt.Errorf("message with ID %s not found", messageID) - } - - return WriteDB("messages", updatedMessages) -}