104 lines
2.5 KiB
Go
104 lines
2.5 KiB
Go
package api
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
|
|
"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 {
|
|
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) {
|
|
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 {
|
|
timestamp, err := time.Parse(time.RFC3339, message["Timestamp"].(string))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to parse timestamp: %v", err)
|
|
}
|
|
return &Message{
|
|
ID: message["ID"].(string),
|
|
UserID: int64(message["UserID"].(float64)),
|
|
Body: message["Body"].(string),
|
|
Timestamp: timestamp,
|
|
}, 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{})
|
|
timestamp, err := time.Parse(time.RFC3339, message["Timestamp"].(string))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to parse timestamp: %v", err)
|
|
}
|
|
result = append(result, &Message{
|
|
ID: message["ID"].(string),
|
|
UserID: int64(message["UserID"].(float64)),
|
|
Body: message["Body"].(string),
|
|
Timestamp: timestamp,
|
|
})
|
|
}
|
|
if len(result) == 0 {
|
|
return nil, errors.New("no messages found")
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func dbAddUser(id int64, name string) error {
|
|
user := map[string]interface{}{
|
|
"ID": float64(id), // JSON numbers are float64 by default
|
|
"Name": name,
|
|
}
|
|
return db.AddUser(user)
|
|
}
|
|
|
|
func dbAddMessage(message *Message) error {
|
|
dbMessage := map[string]interface{}{
|
|
"ID": message.ID,
|
|
"UserID": message.UserID, // JSON numbers are float64
|
|
"Body": message.Body,
|
|
"Timestamp": message.Timestamp,
|
|
}
|
|
return db.AddMessage(dbMessage)
|
|
}
|
|
|
|
func dbDeleteMessage(id string) error {
|
|
return db.DeleteMessage(id)
|
|
}
|