Implement beforeMessageGUID/afterMessageGUID/beforeDate
This commit is contained in:
@@ -2,6 +2,7 @@ package server
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
"code.severnaya.net/kordophone-mock/v2/data"
|
||||
"code.severnaya.net/kordophone-mock/v2/model"
|
||||
@@ -25,6 +26,14 @@ type Server struct {
|
||||
updateItemSeq int
|
||||
}
|
||||
|
||||
type MessagesQuery struct {
|
||||
ConversationGUID string
|
||||
BeforeDate *time.Time
|
||||
AfterGUID *string
|
||||
BeforeGUID *string
|
||||
Limit *int
|
||||
}
|
||||
|
||||
type AuthError struct {
|
||||
message string
|
||||
}
|
||||
@@ -136,15 +145,58 @@ func (s *Server) CheckBearerToken(token string) bool {
|
||||
return s.authenticateToken(token)
|
||||
}
|
||||
|
||||
func (s *Server) MessagesForConversation(conversation *model.Conversation) []model.Message {
|
||||
messages := s.messageStore[conversation.Guid]
|
||||
func (s *Server) PerformMessageQuery(query *MessagesQuery) []model.Message {
|
||||
messages := s.messageStore[query.ConversationGUID]
|
||||
|
||||
// Sort
|
||||
sort.Slice(messages, func(i int, j int) bool {
|
||||
return messages[i].Date.Before(messages[j].Date)
|
||||
})
|
||||
|
||||
// Apply before/after filters
|
||||
if query.BeforeGUID != nil {
|
||||
beforeGUID := *query.BeforeGUID
|
||||
for i := range messages {
|
||||
if messages[i].Guid == beforeGUID {
|
||||
messages = messages[:i]
|
||||
break
|
||||
}
|
||||
}
|
||||
} else if query.AfterGUID != nil {
|
||||
afterGUID := *query.AfterGUID
|
||||
for i := range messages {
|
||||
if messages[i].Guid == afterGUID {
|
||||
messages = messages[i+1:]
|
||||
break
|
||||
}
|
||||
}
|
||||
} else if query.BeforeDate != nil {
|
||||
beforeDate := *query.BeforeDate
|
||||
for i := range messages {
|
||||
if messages[i].Date.Before(beforeDate) {
|
||||
messages = messages[:i]
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Limit
|
||||
if query.Limit != nil {
|
||||
limit := *query.Limit
|
||||
if len(messages) > limit {
|
||||
messages = messages[:limit]
|
||||
}
|
||||
}
|
||||
|
||||
return messages
|
||||
}
|
||||
|
||||
func (s *Server) MessagesForConversation(conversation *model.Conversation) []model.Message {
|
||||
return s.PerformMessageQuery(&MessagesQuery{
|
||||
ConversationGUID: conversation.Guid,
|
||||
})
|
||||
}
|
||||
|
||||
func (s *Server) AppendMessageToConversation(conversation *model.Conversation, message model.Message) {
|
||||
s.messageStore[conversation.Guid] = append(s.messageStore[conversation.Guid], message)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user