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