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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
@@ -13,7 +14,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Println(app.App_Name)
|
log.Println(app.App_Name)
|
||||||
|
|
||||||
versionFlag := config.CheckVersionFlag()
|
versionFlag := config.CheckVersionFlag()
|
||||||
if *versionFlag {
|
if *versionFlag {
|
||||||
@@ -23,7 +24,7 @@ func main() {
|
|||||||
|
|
||||||
myApp, err := app.Load()
|
myApp, err := app.Load()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error loading app: %w", err)
|
log.Println("Error loading app: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ module git.kundeng.us/phoenix/catapult
|
|||||||
go 1.25.4
|
go 1.25.4
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.kundeng.us/phoenix/swoosh v0.0.5
|
git.kundeng.us/phoenix/swoosh v0.0.6
|
||||||
git.kundeng.us/phoenix/textsender-models v0.0.10
|
git.kundeng.us/phoenix/textsender-models v0.0.11
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
github.com/joho/godotenv v1.5.1
|
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.6 h1:9+BFsmuxufEPJErMJUioyRGb0KoIPdwW+PSbEva5UuU=
|
||||||
git.kundeng.us/phoenix/swoosh v0.0.5/go.mod h1:BTn6gDaHWTP/OpvDjOFZJwN9kJ1xd9Rl6yFJGy8xV1k=
|
git.kundeng.us/phoenix/swoosh v0.0.6/go.mod h1:czsMdVpt7HKkaP1HOl5+j9ePOQCA0r9UW4uAxwAbTPk=
|
||||||
git.kundeng.us/phoenix/textsender-models v0.0.10 h1:0AMe/zm4Xte2BcuqqhRP7+42m+4To+rUnHkR2a9eXlI=
|
git.kundeng.us/phoenix/textsender-models v0.0.11 h1:kd2FdeZJhJJAXBm8MoyadtgNGyzC+puU1oR8B8N+MfE=
|
||||||
git.kundeng.us/phoenix/textsender-models v0.0.10/go.mod h1:9iPDQJg1Tc6WMNoW5+f8YKmnosMwlWHJ++hmxNLDEe0=
|
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/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
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=
|
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
|
AuthUrl string
|
||||||
ServiceUsername string
|
ServiceUsername string
|
||||||
ServicePassphrase string
|
ServicePassphrase string
|
||||||
TwilioConfig *config.TwiloConfig
|
TwilioConfig *config.TwiloConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func Load() (*App, error) {
|
func Load() (*App, error) {
|
||||||
|
|||||||
@@ -19,15 +19,15 @@ type Contact struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type getContactResponse struct {
|
type getContactResponse struct {
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
Data []*contact.Contact `json:"data"`
|
Data []*contact.Contact `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Contact) GetContact(id uuid.UUID) (*contact.Contact, error) {
|
func (c *Contact) GetContact(id uuid.UUID) (*contact.Contact, error) {
|
||||||
params := url.Values{}
|
params := url.Values{}
|
||||||
params.Add("id", id.String())
|
params.Add("id", id.String())
|
||||||
pm := params.Encode()
|
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)
|
fmt.Println("Url:", fullUrl)
|
||||||
req, err := http.NewRequest("GET", fullUrl, nil)
|
req, err := http.NewRequest("GET", fullUrl, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ func (s *Service) worker1() {
|
|||||||
} else {
|
} else {
|
||||||
fmt.Println("Message Id:", msg.Id)
|
fmt.Println("Message Id:", msg.Id)
|
||||||
fmt.Println("Contact Id:", c.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)
|
log.Println("Failure with scheduling the message:", err)
|
||||||
} else {
|
} else {
|
||||||
if res != nil {
|
if res != nil {
|
||||||
@@ -107,6 +107,28 @@ func (s *Service) worker1() {
|
|||||||
} else {
|
} else {
|
||||||
jsonValue := string(bytes)
|
jsonValue := string(bytes)
|
||||||
log.Println("Result:", jsonValue)
|
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 {
|
} else {
|
||||||
log.Println("Result should not be empty")
|
log.Println("Result should not be empty")
|
||||||
|
|||||||
@@ -19,15 +19,15 @@ type Message struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type getMessageResponse struct {
|
type getMessageResponse struct {
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
Data []*message.Message `json:"data"`
|
Data []*message.Message `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Message) GetMessage(id uuid.UUID) (*message.Message, error) {
|
func (m *Message) GetMessage(id uuid.UUID) (*message.Message, error) {
|
||||||
params := url.Values{}
|
params := url.Values{}
|
||||||
params.Add("id", id.String())
|
params.Add("id", id.String())
|
||||||
pm := params.Encode()
|
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)
|
fmt.Println("Url:", fullUrl)
|
||||||
req, err := http.NewRequest("GET", fullUrl, nil)
|
req, err := http.NewRequest("GET", fullUrl, nil)
|
||||||
if err != 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/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
"git.kundeng.us/phoenix/textsender-models/tx0/message/scheduling"
|
"git.kundeng.us/phoenix/textsender-models/tx0/message/scheduling"
|
||||||
"git.kundeng.us/phoenix/textsender-models/tx0/token"
|
"git.kundeng.us/phoenix/textsender-models/tx0/token"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
|
||||||
"git.kundeng.us/phoenix/catapult/internal/app"
|
"git.kundeng.us/phoenix/catapult/internal/app"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
type ScheduledMessageEvent struct {
|
type ScheduledMessageEvent struct {
|
||||||
Application *app.App
|
Application *app.App
|
||||||
Token *token.Login
|
Token *token.Login
|
||||||
}
|
}
|
||||||
|
|
||||||
type getScheduledMessageEventResponse struct {
|
type getScheduledMessageEventResponse struct {
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
Data []*scheduling.ScheduledMessageEvent `json:"data"`
|
Data []*scheduling.ScheduledMessageEvent `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ScheduledMessageEvent) GetEvents(scheduledMessageId uuid.UUID) ([]*scheduling.ScheduledMessageEvent, error) {
|
func (s *ScheduledMessageEvent) GetEvents(scheduledMessageId uuid.UUID) ([]*scheduling.ScheduledMessageEvent, error) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"time"
|
||||||
|
|
||||||
"git.kundeng.us/phoenix/swoosh/swoop/send"
|
"git.kundeng.us/phoenix/swoosh/swoop/send"
|
||||||
"git.kundeng.us/phoenix/swoosh/swoop/types"
|
"git.kundeng.us/phoenix/swoosh/swoop/types"
|
||||||
@@ -14,10 +14,9 @@ import (
|
|||||||
"git.kundeng.us/phoenix/catapult/internal/app"
|
"git.kundeng.us/phoenix/catapult/internal/app"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
type Scheduler struct {
|
type Scheduler struct {
|
||||||
Application *app.App
|
Application *app.App
|
||||||
Token *token.Login
|
Token *token.Login
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Scheduler) GetEvents(scheduledMessageId uuid.UUID) ([]*scheduling.ScheduledMessageEvent, error) {
|
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) {
|
func (s *Scheduler) GetContact(id uuid.UUID) (*contact.Contact, error) {
|
||||||
ctct := Contact{Application: s.Application, Token: s.Token}
|
ctct := Contact{Application: s.Application, Token: s.Token}
|
||||||
if c, err := ctct.GetContact(id); err != nil {
|
if c, err := ctct.GetContact(id); err != nil {
|
||||||
return nil ,err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
return c, nil
|
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}
|
msgSender := send.MessageSender{Config: s.Application.TwilioConfig}
|
||||||
if res, err := msgSender.Send(msg, c, &schMsg.Scheduled); err != nil {
|
if res, err := msgSender.Send(msg, c, &schMsg.Scheduled); err != nil {
|
||||||
return nil, err
|
return nil, nil, err
|
||||||
} else {
|
} else {
|
||||||
fmt.Println(res.AccountSid)
|
sent := time.Now()
|
||||||
return res, nil
|
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