tsk-14: Record when message was sent (#16)
Closes #14 Reviewed-on: #16 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
@@ -13,7 +14,7 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println(app.App_Name)
|
||||
log.Println(app.App_Name)
|
||||
|
||||
versionFlag := config.CheckVersionFlag()
|
||||
if *versionFlag {
|
||||
@@ -23,7 +24,7 @@ func main() {
|
||||
|
||||
myApp, err := app.Load()
|
||||
if err != nil {
|
||||
fmt.Println("Error loading app: %w", err)
|
||||
log.Println("Error loading app: %w", err)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ module git.kundeng.us/phoenix/catapult
|
||||
go 1.25.4
|
||||
|
||||
require (
|
||||
git.kundeng.us/phoenix/swoosh v0.0.5
|
||||
git.kundeng.us/phoenix/textsender-models v0.0.10
|
||||
git.kundeng.us/phoenix/swoosh v0.0.6
|
||||
git.kundeng.us/phoenix/textsender-models v0.0.11
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/joho/godotenv v1.5.1
|
||||
)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
git.kundeng.us/phoenix/swoosh v0.0.5 h1:++kc6xRlt01ToMeIOSzYtGnYjug6x0p0euZwJ+xHDs4=
|
||||
git.kundeng.us/phoenix/swoosh v0.0.5/go.mod h1:BTn6gDaHWTP/OpvDjOFZJwN9kJ1xd9Rl6yFJGy8xV1k=
|
||||
git.kundeng.us/phoenix/textsender-models v0.0.10 h1:0AMe/zm4Xte2BcuqqhRP7+42m+4To+rUnHkR2a9eXlI=
|
||||
git.kundeng.us/phoenix/textsender-models v0.0.10/go.mod h1:9iPDQJg1Tc6WMNoW5+f8YKmnosMwlWHJ++hmxNLDEe0=
|
||||
git.kundeng.us/phoenix/swoosh v0.0.6 h1:9+BFsmuxufEPJErMJUioyRGb0KoIPdwW+PSbEva5UuU=
|
||||
git.kundeng.us/phoenix/swoosh v0.0.6/go.mod h1:czsMdVpt7HKkaP1HOl5+j9ePOQCA0r9UW4uAxwAbTPk=
|
||||
git.kundeng.us/phoenix/textsender-models v0.0.11 h1:kd2FdeZJhJJAXBm8MoyadtgNGyzC+puU1oR8B8N+MfE=
|
||||
git.kundeng.us/phoenix/textsender-models v0.0.11/go.mod h1:9iPDQJg1Tc6WMNoW5+f8YKmnosMwlWHJ++hmxNLDEe0=
|
||||
github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ type App struct {
|
||||
AuthUrl string
|
||||
ServiceUsername string
|
||||
ServicePassphrase string
|
||||
TwilioConfig *config.TwiloConfig
|
||||
TwilioConfig *config.TwiloConfig
|
||||
}
|
||||
|
||||
func Load() (*App, error) {
|
||||
|
||||
@@ -19,15 +19,15 @@ type Contact struct {
|
||||
}
|
||||
|
||||
type getContactResponse struct {
|
||||
Message string `json:"message"`
|
||||
Data []*contact.Contact `json:"data"`
|
||||
Message string `json:"message"`
|
||||
Data []*contact.Contact `json:"data"`
|
||||
}
|
||||
|
||||
func (c *Contact) GetContact(id uuid.UUID) (*contact.Contact, error) {
|
||||
params := url.Values{}
|
||||
params.Add("id", id.String())
|
||||
pm := params.Encode()
|
||||
fullUrl := fmt.Sprintf("%s/api/v1/contact?%s", c.Application.ApiUrl, pm)
|
||||
fullUrl := fmt.Sprintf("%s/api/v1/contact?%s", c.Application.ApiUrl, pm)
|
||||
fmt.Println("Url:", fullUrl)
|
||||
req, err := http.NewRequest("GET", fullUrl, nil)
|
||||
if err != nil {
|
||||
|
||||
@@ -97,7 +97,7 @@ func (s *Service) worker1() {
|
||||
} else {
|
||||
fmt.Println("Message Id:", msg.Id)
|
||||
fmt.Println("Contact Id:", c.Id)
|
||||
if res, err := scheduler.ScheduleMessage(*item, *event, *c, *msg); err != nil {
|
||||
if res, sent, err := scheduler.ScheduleMessage(*item, *event, *c, *msg); err != nil {
|
||||
log.Println("Failure with scheduling the message:", err)
|
||||
} else {
|
||||
if res != nil {
|
||||
@@ -107,6 +107,28 @@ func (s *Service) worker1() {
|
||||
} else {
|
||||
jsonValue := string(bytes)
|
||||
log.Println("Result:", jsonValue)
|
||||
|
||||
if eventResponse, err := scheduler.RecordEventResponse(event, item.UserId, bytes, sent); err != nil {
|
||||
log.Println("Failure recording event response:", err)
|
||||
} else {
|
||||
if len(eventResponse) == 0 {
|
||||
log.Println("No event responses")
|
||||
} else {
|
||||
eventResponse := eventResponse[0]
|
||||
log.Println("Event response saved. Id:", eventResponse.Id)
|
||||
sameJsonValue := string(eventResponse.Response)
|
||||
|
||||
if jsonValue == sameJsonValue {
|
||||
log.Println("Matches")
|
||||
} else if len(jsonValue) == len(sameJsonValue) {
|
||||
log.Println("Same size")
|
||||
log.Println(jsonValue)
|
||||
log.Println(sameJsonValue)
|
||||
} else {
|
||||
log.Println("Not the same")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.Println("Result should not be empty")
|
||||
|
||||
@@ -19,15 +19,15 @@ type Message struct {
|
||||
}
|
||||
|
||||
type getMessageResponse struct {
|
||||
Message string `json:"message"`
|
||||
Data []*message.Message `json:"data"`
|
||||
Message string `json:"message"`
|
||||
Data []*message.Message `json:"data"`
|
||||
}
|
||||
|
||||
func (m *Message) GetMessage(id uuid.UUID) (*message.Message, error) {
|
||||
params := url.Values{}
|
||||
params.Add("id", id.String())
|
||||
pm := params.Encode()
|
||||
fullUrl := fmt.Sprintf("%s/api/v1/message?%s", m.Application.ApiUrl, pm)
|
||||
fullUrl := fmt.Sprintf("%s/api/v1/message?%s", m.Application.ApiUrl, pm)
|
||||
fmt.Println("Url:", fullUrl)
|
||||
req, err := http.NewRequest("GET", fullUrl, nil)
|
||||
if err != nil {
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/message"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/token"
|
||||
|
||||
"git.kundeng.us/phoenix/catapult/internal/app"
|
||||
)
|
||||
|
||||
type MessageEventResponse struct {
|
||||
Application *app.App
|
||||
Token *token.Login
|
||||
}
|
||||
|
||||
type recordMessageEventResponse struct {
|
||||
Message string `json:"message"`
|
||||
Data []*message.MessageEventResponse `json:"data"`
|
||||
}
|
||||
|
||||
func (m *MessageEventResponse) RecordEventResponse(mer *message.MessageEventResponse) ([]*message.MessageEventResponse, error) {
|
||||
fullUrl := fmt.Sprintf("%s/api/v1/schedule/message/event/response/record", m.Application.ApiUrl)
|
||||
jsonData, err := json.Marshal(mer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("POST", fullUrl, strings.NewReader(string(jsonData)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
token := m.Token.AccessToken
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
var r recordMessageEventResponse
|
||||
err = json.NewDecoder(resp.Body).Decode(&r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if len(r.Data) == 0 {
|
||||
return nil, nil
|
||||
} else {
|
||||
return r.Data, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,22 +6,21 @@ import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/message/scheduling"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/token"
|
||||
"github.com/google/uuid"
|
||||
|
||||
"git.kundeng.us/phoenix/catapult/internal/app"
|
||||
)
|
||||
|
||||
|
||||
type ScheduledMessageEvent struct {
|
||||
Application *app.App
|
||||
Token *token.Login
|
||||
}
|
||||
|
||||
type getScheduledMessageEventResponse struct {
|
||||
Message string `json:"message"`
|
||||
Data []*scheduling.ScheduledMessageEvent `json:"data"`
|
||||
Message string `json:"message"`
|
||||
Data []*scheduling.ScheduledMessageEvent `json:"data"`
|
||||
}
|
||||
|
||||
func (s *ScheduledMessageEvent) GetEvents(scheduledMessageId uuid.UUID) ([]*scheduling.ScheduledMessageEvent, error) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.kundeng.us/phoenix/swoosh/swoop/send"
|
||||
"git.kundeng.us/phoenix/swoosh/swoop/types"
|
||||
@@ -14,10 +14,9 @@ import (
|
||||
"git.kundeng.us/phoenix/catapult/internal/app"
|
||||
)
|
||||
|
||||
|
||||
type Scheduler struct {
|
||||
Application *app.App
|
||||
Token *token.Login
|
||||
Token *token.Login
|
||||
}
|
||||
|
||||
func (s *Scheduler) GetEvents(scheduledMessageId uuid.UUID) ([]*scheduling.ScheduledMessageEvent, error) {
|
||||
@@ -41,18 +40,29 @@ func (s *Scheduler) GetMessage(id uuid.UUID) (*message.Message, error) {
|
||||
func (s *Scheduler) GetContact(id uuid.UUID) (*contact.Contact, error) {
|
||||
ctct := Contact{Application: s.Application, Token: s.Token}
|
||||
if c, err := ctct.GetContact(id); err != nil {
|
||||
return nil ,err
|
||||
return nil, err
|
||||
} else {
|
||||
return c, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Scheduler) ScheduleMessage(schMsg scheduling.ScheduledMessage, event scheduling.ScheduledMessageEvent, c contact.Contact, msg message.Message) (*types.TwilioResult, error) {
|
||||
func (s *Scheduler) ScheduleMessage(schMsg scheduling.ScheduledMessage, event scheduling.ScheduledMessageEvent, c contact.Contact, msg message.Message) (*types.TwilioResult, *time.Time, error) {
|
||||
msgSender := send.MessageSender{Config: s.Application.TwilioConfig}
|
||||
if res, err := msgSender.Send(msg, c, &schMsg.Scheduled); err != nil {
|
||||
return nil, err
|
||||
return nil, nil, err
|
||||
} else {
|
||||
fmt.Println(res.AccountSid)
|
||||
return res, nil
|
||||
sent := time.Now()
|
||||
return res, &sent, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Scheduler) RecordEventResponse(schMsgEvent *scheduling.ScheduledMessageEvent, userId uuid.UUID, bytes []byte, sent *time.Time) ([]*message.MessageEventResponse, error) {
|
||||
mre := message.MessageEventResponse{ScheduledMessageEventId: schMsgEvent.Id, UserId: userId, Response: bytes, Sent: *sent}
|
||||
|
||||
msgEventResponse := MessageEventResponse{Application: s.Application, Token: s.Token}
|
||||
if responses, err := msgEventResponse.RecordEventResponse(&mre); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return responses, nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user