From d1e77ad4e2f8a05782dfc6da65fb9305911da2c7 Mon Sep 17 00:00:00 2001 From: William P Date: Mon, 30 Dec 2024 16:31:48 -0500 Subject: [PATCH] create fake database until real DB is implemented --- api/db.go | 62 +++++++++++++++++++++++++++++++++++++---- api/message.go | 7 ++++- db/fake_db.go | 47 +++++++++++++++++++++++++++++++ test_data/messages.json | 26 +++++++++++++++++ test_data/users.json | 10 +++++++ 5 files changed, 145 insertions(+), 7 deletions(-) create mode 100644 db/fake_db.go create mode 100644 test_data/messages.json create mode 100644 test_data/users.json diff --git a/api/db.go b/api/db.go index 03dc161..547def3 100644 --- a/api/db.go +++ b/api/db.go @@ -1,21 +1,71 @@ package api -import "errors" +import ( + "errors" + + "git.dubyatp.xyz/chat-api-server/db" +) func dbGetUser(id int64) (*User, error) { + data := db.ExecDB("users") + if data == nil { + return nil, errors.New("failed to load users database") + } + + users := data["users"].([]interface{}) for _, u := range users { - if u.ID == id { - return u, nil + user := u.(map[string]interface{}) + if int64(user["ID"].(float64)) == id { + return &User{ + ID: int64(user["ID"].(float64)), + Name: user["Name"].(string), + }, nil } } return nil, errors.New("User not found") } func dbGetMessage(id string) (*Message, error) { - for _, a := range messages { - if a.ID == id { - return a, nil + data := db.ExecDB("messages") + if data == nil { + return nil, errors.New("failed to load messages database") + } + + messages := data["messages"].([]interface{}) + for _, m := range messages { + message := m.(map[string]interface{}) + if message["ID"].(string) == id { + return &Message{ + ID: message["ID"].(string), + UserID: int64(message["UserID"].(float64)), + Body: message["Body"].(string), + Timestamp: int64(message["Timestamp"].(float64)), + }, nil } } return nil, errors.New("Message not found") } + +func dbGetAllMessages() ([]*Message, error) { + data := db.ExecDB("messages") + //println(data) + if data == nil { + return nil, errors.New("failed to load messages database") + } + + messages := data["messages"].([]interface{}) + var result []*Message + for _, m := range messages { + message := m.(map[string]interface{}) + result = append(result, &Message{ + ID: message["ID"].(string), + UserID: int64(message["UserID"].(float64)), + Body: message["Body"].(string), + Timestamp: int64(message["Timestamp"].(float64)), + }) + } + if len(result) == 0 { + return nil, errors.New("no messages found") + } + return result, nil +} diff --git a/api/message.go b/api/message.go index 7835230..fc61876 100644 --- a/api/message.go +++ b/api/message.go @@ -43,7 +43,12 @@ func GetMessage(w http.ResponseWriter, r *http.Request) { } func ListMessages(w http.ResponseWriter, r *http.Request) { - if err := render.RenderList(w, r, NewMessageListResponse(messages)); err != nil { + dbMessages, err := dbGetAllMessages() + if err != nil { + render.Render(w, r, ErrRender(err)) + return + } + if err := render.RenderList(w, r, NewMessageListResponse(dbMessages)); err != nil { render.Render(w, r, ErrRender(err)) return } diff --git a/db/fake_db.go b/db/fake_db.go new file mode 100644 index 0000000..a8bb28e --- /dev/null +++ b/db/fake_db.go @@ -0,0 +1,47 @@ +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 +} diff --git a/test_data/messages.json b/test_data/messages.json new file mode 100644 index 0000000..4a95761 --- /dev/null +++ b/test_data/messages.json @@ -0,0 +1,26 @@ +[ + { + "ID": "1", + "UserID": 1, + "Body": "hello", + "Timestamp": 1234567890 + }, + { + "ID": "2", + "UserID": 2, + "Body": "world", + "Timestamp": 1234567890 + }, + { + "ID": "3", + "UserID": 1, + "Body": "abababa", + "Timestamp": 1234567890 + }, + { + "ID": "4", + "UserID": 2, + "Body": "bitch", + "Timestamp": 1234567890 + } +] \ No newline at end of file diff --git a/test_data/users.json b/test_data/users.json new file mode 100644 index 0000000..e2224d1 --- /dev/null +++ b/test_data/users.json @@ -0,0 +1,10 @@ +[ + { + "ID": 1, + "Name": "duby" + }, + { + "ID": 2, + "Name": "astolfo" + } +] \ No newline at end of file