Ensure all dates returned are ISO8601
This commit is contained in:
@@ -336,7 +336,7 @@ func GenerateRandomConversation() model.Conversation {
|
|||||||
Participants: []string{GenerateRandomName()},
|
Participants: []string{GenerateRandomName()},
|
||||||
UnreadCount: 0,
|
UnreadCount: 0,
|
||||||
Guid: uuid.New().String(),
|
Guid: uuid.New().String(),
|
||||||
Date: time.Now().Add(-1 * time.Duration(rand.Intn(1000000)) * time.Second),
|
Date: model.Date(time.Now().Add(-1 * time.Duration(rand.Intn(1000000)) * time.Second)),
|
||||||
}
|
}
|
||||||
|
|
||||||
return conversation
|
return conversation
|
||||||
@@ -355,7 +355,7 @@ func GenerateRandomMessage(participants []string) model.Message {
|
|||||||
return model.Message{
|
return model.Message{
|
||||||
Text: GenerateRandomMessageBody(),
|
Text: GenerateRandomMessageBody(),
|
||||||
Guid: uuid.New().String(),
|
Guid: uuid.New().String(),
|
||||||
Date: time.Now().Add(-1 * time.Duration(rand.Intn(1000000)) * time.Second),
|
Date: model.Date(time.Now().Add(-1 * time.Duration(rand.Intn(1000000)) * time.Second)),
|
||||||
Sender: sender,
|
Sender: sender,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"github.com/dgrijalva/jwt-go"
|
"github.com/dgrijalva/jwt-go"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AuthToken struct {
|
type AuthToken struct {
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Conversation struct {
|
type Conversation struct {
|
||||||
Date time.Time `json:"date"`
|
Date Date `json:"date"`
|
||||||
Participants []string `json:"participantDisplayNames"`
|
Participants []string `json:"participantDisplayNames"`
|
||||||
DisplayName *string `json:"displayName,omitempty"` // Optional
|
DisplayName *string `json:"displayName,omitempty"` // Optional
|
||||||
UnreadCount int `json:"unreadCount"`
|
UnreadCount int `json:"unreadCount"`
|
||||||
LastMessagePreview string `json:"lastMessagePreview"`
|
LastMessagePreview string `json:"lastMessagePreview"`
|
||||||
LastMessage Message `json:"lastMessage"`
|
LastMessage Message `json:"lastMessage"`
|
||||||
Guid string `json:"guid"`
|
Guid string `json:"guid"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Conversation) GetDisplayName() string {
|
func (c *Conversation) GetDisplayName() string {
|
||||||
@@ -27,7 +27,7 @@ func (c *Conversation) GetDisplayName() string {
|
|||||||
|
|
||||||
func (c *Conversation) MarshalZerologObject(e *zerolog.Event) {
|
func (c *Conversation) MarshalZerologObject(e *zerolog.Event) {
|
||||||
e.Str("guid", c.Guid)
|
e.Str("guid", c.Guid)
|
||||||
e.Time("date", c.Date)
|
e.Time("date", time.Time(c.Date))
|
||||||
e.Int("unreadCount", c.UnreadCount)
|
e.Int("unreadCount", c.UnreadCount)
|
||||||
e.Str("lastMessagePreview", c.LastMessagePreview)
|
e.Str("lastMessagePreview", c.LastMessagePreview)
|
||||||
e.Strs("participants", c.Participants)
|
e.Strs("participants", c.Participants)
|
||||||
|
|||||||
30
model/date.go
Normal file
30
model/date.go
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Date time.Time
|
||||||
|
|
||||||
|
func (d Date) Equal(other Date) bool {
|
||||||
|
return time.Time(d).Equal(time.Time(other))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d Date) After(other Date) bool {
|
||||||
|
return time.Time(d).After(time.Time(other))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d Date) Before(other Date) bool {
|
||||||
|
return time.Time(d).Before(time.Time(other))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d Date) Format(layout string) string {
|
||||||
|
return time.Time(d).Format(layout)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Date) MarshalJSON() ([]byte, error) {
|
||||||
|
// Must use ISO8601
|
||||||
|
formatted := fmt.Sprintf("\"%s\"", time.Time(t).Format("2006-01-02T15:04:05+00:00"))
|
||||||
|
return []byte(formatted), nil
|
||||||
|
}
|
||||||
@@ -1,16 +1,15 @@
|
|||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Message struct {
|
type Message struct {
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
Guid string `json:"guid"`
|
Guid string `json:"guid"`
|
||||||
Sender *string `json:"sender,omitempty"` // Optional: nil means from "me"
|
Sender *string `json:"sender,omitempty"` // Optional: nil means from "me"
|
||||||
Date time.Time `json:"date"`
|
Date Date `json:"date"`
|
||||||
|
|
||||||
// Map of attachment GUID to attachment metadata
|
// Map of attachment GUID to attachment metadata
|
||||||
Attachments *map[string]AttributionInfo `json:"attachmentMetadata,omitempty"` // Optional
|
Attachments *map[string]AttributionInfo `json:"attachmentMetadata,omitempty"` // Optional
|
||||||
@@ -24,7 +23,7 @@ type AttributionInfo struct {
|
|||||||
func (c Message) MarshalZerologObject(e *zerolog.Event) {
|
func (c Message) MarshalZerologObject(e *zerolog.Event) {
|
||||||
e.Str("guid", c.Guid)
|
e.Str("guid", c.Guid)
|
||||||
e.Str("text", c.Text)
|
e.Str("text", c.Text)
|
||||||
e.Time("date", c.Date)
|
e.Time("date", time.Time(c.Date))
|
||||||
|
|
||||||
if c.Sender != nil {
|
if c.Sender != nil {
|
||||||
e.Str("sender", *c.Sender)
|
e.Str("sender", *c.Sender)
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ func (p *Prompt) receiveMessage(guid string, text string) {
|
|||||||
Guid: uuid.New().String(),
|
Guid: uuid.New().String(),
|
||||||
Sender: &conversation.Participants[0],
|
Sender: &conversation.Participants[0],
|
||||||
Text: text,
|
Text: text,
|
||||||
Date: time.Now(),
|
Date: model.Date(time.Now()),
|
||||||
}
|
}
|
||||||
|
|
||||||
p.server.ReceiveMessage(conversation, message)
|
p.server.ReceiveMessage(conversation, message)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
|
||||||
|
|
||||||
"code.severnaya.net/kordophone-mock/v2/data"
|
"code.severnaya.net/kordophone-mock/v2/data"
|
||||||
"code.severnaya.net/kordophone-mock/v2/model"
|
"code.severnaya.net/kordophone-mock/v2/model"
|
||||||
@@ -28,7 +27,7 @@ type Server struct {
|
|||||||
|
|
||||||
type MessagesQuery struct {
|
type MessagesQuery struct {
|
||||||
ConversationGUID string
|
ConversationGUID string
|
||||||
BeforeDate *time.Time
|
BeforeDate *model.Date
|
||||||
AfterGUID *string
|
AfterGUID *string
|
||||||
BeforeGUID *string
|
BeforeGUID *string
|
||||||
Limit *int
|
Limit *int
|
||||||
|
|||||||
@@ -139,12 +139,13 @@ func (m *MockHTTPServer) handleMessages(w http.ResponseWriter, r *http.Request)
|
|||||||
return &s
|
return &s
|
||||||
}
|
}
|
||||||
|
|
||||||
dateOrNil := func(s string) *time.Time {
|
dateOrNil := func(s string) *model.Date {
|
||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
t, _ := time.Parse(time.RFC3339, s)
|
t, _ := time.Parse(time.RFC3339, s)
|
||||||
return &t
|
date := model.Date(t)
|
||||||
|
return &date
|
||||||
}
|
}
|
||||||
|
|
||||||
intOrNil := func(s string) *int {
|
intOrNil := func(s string) *int {
|
||||||
@@ -241,7 +242,7 @@ func (m *MockHTTPServer) handleSendMessage(w http.ResponseWriter, r *http.Reques
|
|||||||
message := model.Message{
|
message := model.Message{
|
||||||
Guid: uuid.New().String(),
|
Guid: uuid.New().String(),
|
||||||
Text: sendMessageReq.Body,
|
Text: sendMessageReq.Body,
|
||||||
Date: time.Now(),
|
Date: model.Date(time.Now()),
|
||||||
Sender: nil, // me
|
Sender: nil, // me
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user