package db import ( "encoding/json" "fmt" "io" "os" ) func ExecDB(db_name string) map[string]interface{} { var result map[string]interface{} if db_name == "users" { users_db, err := os.Open("./test_data/users.json") if err != nil { fmt.Println(err) return nil } fmt.Println("Successfully opened Users DB") defer users_db.Close() byteValue, _ := io.ReadAll(users_db) var users []interface{} json.Unmarshal(byteValue, &users) result = map[string]interface{}{"users": users} } else if db_name == "messages" { messages_db, err := os.Open("./test_data/messages.json") if err != nil { fmt.Println(err) return nil } fmt.Println("Successfully opened Messages DB") defer messages_db.Close() byteValue, _ := io.ReadAll(messages_db) var messages []interface{} json.Unmarshal(byteValue, &messages) result = map[string]interface{}{"messages": messages} } else { fmt.Println("Invalid DB name") return nil } return result } func WriteDB(db_name string, data interface{}) error { var filePath string switch db_name { case "users": filePath = "./test_data/users.json" case "messages": filePath = "./test_data/messages.json" default: return fmt.Errorf("invalid database name: %s", db_name) } jsonData, err := json.MarshalIndent(data, "", " ") if err != nil { return fmt.Errorf("error marshaling data to JSON: %v", err) } err = os.WriteFile(filePath, jsonData, 0644) if err != nil { return fmt.Errorf("error writing to file: %v", err) } 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) }