implement message updates

This commit is contained in:
2025-03-27 14:41:02 -04:00
parent b86ee0dac4
commit a7466e5c77
2 changed files with 40 additions and 1 deletions

View File

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

View File

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