create fake database until real DB is implemented

This commit is contained in:
2024-12-30 16:31:48 -05:00
parent cad40565b0
commit d1e77ad4e2
5 changed files with 145 additions and 7 deletions

View File

@@ -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
}

View File

@@ -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
}

47
db/fake_db.go Normal file
View File

@@ -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
}

26
test_data/messages.json Normal file
View File

@@ -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
}
]

10
test_data/users.json Normal file
View File

@@ -0,0 +1,10 @@
[
{
"ID": 1,
"Name": "duby"
},
{
"ID": 2,
"Name": "astolfo"
}
]