implement message updates
This commit is contained in:
30
api/db.go
30
api/db.go
@@ -41,11 +41,21 @@ func dbGetMessage(id string) (*Message, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse timestamp: %v", err)
|
||||
}
|
||||
editedStr, ok := message["Edited"].(string)
|
||||
var edited time.Time
|
||||
if ok && editedStr != "" {
|
||||
var err error
|
||||
edited, err = time.Parse(time.RFC3339, editedStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse edited timestamp: %v", err)
|
||||
}
|
||||
}
|
||||
return &Message{
|
||||
ID: message["ID"].(string),
|
||||
UserID: int64(message["UserID"].(float64)),
|
||||
Body: message["Body"].(string),
|
||||
Timestamp: timestamp,
|
||||
Edited: edited,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
@@ -67,11 +77,21 @@ func dbGetAllMessages() ([]*Message, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse timestamp: %v", err)
|
||||
}
|
||||
editedStr, ok := message["Edited"].(string)
|
||||
var edited time.Time
|
||||
if ok && editedStr != "" {
|
||||
var err error
|
||||
edited, err = time.Parse(time.RFC3339, editedStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse edited timestamp: %v", err)
|
||||
}
|
||||
}
|
||||
result = append(result, &Message{
|
||||
ID: message["ID"].(string),
|
||||
UserID: int64(message["UserID"].(float64)),
|
||||
Body: message["Body"].(string),
|
||||
Timestamp: timestamp,
|
||||
Edited: edited,
|
||||
})
|
||||
}
|
||||
if len(result) == 0 {
|
||||
@@ -111,11 +131,19 @@ func dbAddMessage(message *Message) error {
|
||||
return fmt.Errorf("messages data is in an unexpected format")
|
||||
}
|
||||
|
||||
var edited interface{}
|
||||
if message.Edited.IsZero() {
|
||||
edited = nil // Set to nil if Edited is the zero value
|
||||
} else {
|
||||
edited = message.Edited.Format(time.RFC3339)
|
||||
}
|
||||
|
||||
dbMessage := map[string]interface{}{
|
||||
"ID": message.ID,
|
||||
"UserID": message.UserID, // JSON numbers are float64
|
||||
"Body": message.Body,
|
||||
"Timestamp": message.Timestamp,
|
||||
"Timestamp": message.Timestamp.Format(time.RFC3339),
|
||||
"Edited": edited,
|
||||
}
|
||||
|
||||
messages = append(messages, dbMessage)
|
||||
|
@@ -66,6 +66,7 @@ func EditMessage(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
message.Body = body
|
||||
dbDeleteMessage(message.ID)
|
||||
message.Edited = time.Now()
|
||||
err = dbAddMessage(message)
|
||||
if err != nil {
|
||||
}
|
||||
@@ -125,6 +126,7 @@ func NewMessage(w http.ResponseWriter, r *http.Request) {
|
||||
UserID: userID,
|
||||
Body: body,
|
||||
Timestamp: time.Now(),
|
||||
Edited: time.Time{},
|
||||
}
|
||||
|
||||
err = dbAddMessage(&msg)
|
||||
@@ -143,6 +145,7 @@ type Message struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
Body string `json:"body"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Edited time.Time `json:"edited"`
|
||||
}
|
||||
|
||||
type MessageRequest struct {
|
||||
@@ -167,15 +170,23 @@ func (m MessageResponse) MarshalJSON() ([]byte, error) {
|
||||
UserID int64 `json:"user_id"`
|
||||
Body string `json:"body"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
Edited *string `json:"edited,omitempty"` // Use a pointer to allow null values
|
||||
User *UserPayload `json:"user,omitempty"`
|
||||
Elapsed int64 `json:"elapsed"`
|
||||
}
|
||||
|
||||
var edited *string
|
||||
if !m.Message.Edited.IsZero() { // Check if Edited is not the zero value
|
||||
editedStr := m.Message.Edited.Format(time.RFC3339)
|
||||
edited = &editedStr
|
||||
}
|
||||
|
||||
ordered := OrderedMessageResponse{
|
||||
ID: m.Message.ID,
|
||||
UserID: m.Message.UserID,
|
||||
Body: m.Message.Body,
|
||||
Timestamp: m.Message.Timestamp.Format(time.RFC3339),
|
||||
Edited: edited, // Null if Edited is zero
|
||||
User: m.User,
|
||||
Elapsed: m.Elapsed,
|
||||
}
|
||||
|
Reference in New Issue
Block a user