tsk-29: Place restrictions on adding scheduled message event (#30)
Closes #29 Reviewed-on: phoenix/textsender-api#30 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
@@ -29,10 +29,11 @@ type GetScheduledMessageEventResponse struct {
|
||||
|
||||
type ScheduledMessageEventHandler struct {
|
||||
ScheduledMessageEventStore store.ScheduledMessageEventStore
|
||||
ScheduledMessageStore store.ScheduledMessageStore
|
||||
}
|
||||
|
||||
func NewScheduledMessageEventHandler(str store.ScheduledMessageEventStore) *ScheduledMessageEventHandler {
|
||||
return &ScheduledMessageEventHandler{ScheduledMessageEventStore: str}
|
||||
func NewScheduledMessageEventHandler(str store.ScheduledMessageEventStore, schStore store.ScheduledMessageStore) *ScheduledMessageEventHandler {
|
||||
return &ScheduledMessageEventHandler{ScheduledMessageEventStore: str, ScheduledMessageStore: schStore}
|
||||
}
|
||||
|
||||
func (s *ScheduledMessageEventHandler) AddScheduledMessageEvent(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -64,23 +65,33 @@ func (s *ScheduledMessageEventHandler) AddScheduledMessageEvent(w http.ResponseW
|
||||
} else {
|
||||
ctx := r.Context()
|
||||
|
||||
if exists, err := s.ScheduledMessageEventStore.Exists(ctx, &event); err == nil {
|
||||
if exists {
|
||||
statusCode = http.StatusBadRequest
|
||||
resp.Message = "Event already present"
|
||||
} else {
|
||||
if err = s.ScheduledMessageEventStore.CreateScheduledMessageEvent(ctx, &event); err == nil {
|
||||
statusCode = http.StatusCreated
|
||||
resp.Message = "Successful"
|
||||
resp.Data = append(resp.Data, event)
|
||||
if schMsg, err := s.ScheduledMessageStore.Get(ctx, event.ScheduledMessageId); err != nil {
|
||||
statusCode = http.StatusInternalServerError
|
||||
resp.Message = err.Error()
|
||||
} else {
|
||||
if schMsg.Status == scheduling.Pending {
|
||||
if exists, err := s.ScheduledMessageEventStore.Exists(ctx, &event); err == nil {
|
||||
if exists {
|
||||
statusCode = http.StatusBadRequest
|
||||
resp.Message = "Event already present"
|
||||
} else {
|
||||
if err = s.ScheduledMessageEventStore.CreateScheduledMessageEvent(ctx, &event); err == nil {
|
||||
statusCode = http.StatusCreated
|
||||
resp.Message = "Successful"
|
||||
resp.Data = append(resp.Data, event)
|
||||
} else {
|
||||
statusCode = http.StatusInternalServerError
|
||||
resp.Message = err.Error()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
statusCode = http.StatusInternalServerError
|
||||
resp.Message = err.Error()
|
||||
}
|
||||
} else {
|
||||
statusCode = http.StatusBadRequest
|
||||
resp.Message = "Scheduled message cannot be modified due to the status"
|
||||
}
|
||||
} else {
|
||||
statusCode = http.StatusInternalServerError
|
||||
resp.Message = err.Error()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ func TestCreateScheduledMessageEventWithMock(t *testing.T) {
|
||||
messageStore := mock.NewMockMessageStore()
|
||||
schMsgStore := mock.NewMockScheduledMessageStore()
|
||||
|
||||
handler := NewScheduledMessageEventHandler(mockStore)
|
||||
handler := NewScheduledMessageEventHandler(mockStore, schMsgStore)
|
||||
|
||||
recipientId := uuid.New()
|
||||
messageId := uuid.New()
|
||||
@@ -53,6 +53,7 @@ func TestCreateScheduledMessageEventWithMock(t *testing.T) {
|
||||
schMsg.Id = scheduledMessageId
|
||||
schMsg.UserId = testUserId
|
||||
schMsg.Scheduled = now.Add(20 * time.Minute)
|
||||
schMsg.Status = scheduling.Pending
|
||||
|
||||
ctx := t.Context()
|
||||
|
||||
@@ -93,7 +94,7 @@ func TestGetScheduledMessageEventWithMock(t *testing.T) {
|
||||
messageStore := mock.NewMockMessageStore()
|
||||
schMsgStore := mock.NewMockScheduledMessageStore()
|
||||
schMsgEventStore := mock.NewMockScheduledMessageEventStore()
|
||||
handler := NewScheduledMessageEventHandler(schMsgEventStore)
|
||||
handler := NewScheduledMessageEventHandler(schMsgEventStore, schMsgStore)
|
||||
|
||||
recipientId := uuid.New()
|
||||
messageId := uuid.New()
|
||||
@@ -114,6 +115,7 @@ func TestGetScheduledMessageEventWithMock(t *testing.T) {
|
||||
schMsg.Id = scheduledMessageId
|
||||
schMsg.UserId = testUserId
|
||||
schMsg.Scheduled = now.Add(20 * time.Minute)
|
||||
schMsg.Status = scheduling.Pending
|
||||
|
||||
event := scheduling.ScheduledMessageEvent{}
|
||||
event.MessageId = msg.Id
|
||||
|
||||
Reference in New Issue
Block a user