Skip to content

Commit

Permalink
Update message rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
ahobsonsayers committed Sep 18, 2024
1 parent eb9c7bb commit d62e88d
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 33 deletions.
9 changes: 7 additions & 2 deletions twickets/notification/gotify.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,15 @@ type GotifyClient struct {
var _ Client = GotifyClient{}

func (g GotifyClient) SendTicketNotification(ticket twickets.Ticket) error {
notificationMessage, err := renderMessage(ticket, true)
if err != nil {
return err
}

params := message.NewCreateMessageParams()
params.Body = &models.MessageExternal{
Title: ticket.Event.Name,
Message: notificationMessage(ticket, true),
Message: notificationMessage,
Extras: map[string]any{
"client::display": map[string]any{
"contentType": "text/markdown",
Expand All @@ -42,7 +47,7 @@ func (g GotifyClient) SendTicketNotification(ticket twickets.Ticket) error {
Priority: 5,
}

_, err := g.client.Message.CreateMessage(
_, err = g.client.Message.CreateMessage(
params,
auth.TokenAuth(g.token),
)
Expand Down
79 changes: 50 additions & 29 deletions twickets/notification/notification.go
Original file line number Diff line number Diff line change
@@ -1,48 +1,69 @@
package notification

import (
"bytes"
"embed"
"fmt"
"strings"
"log"
"text/template"

"github.com/ahobsonsayers/twitchets/twickets"
)

var (
//go:embed template/message.tmpl.md
messageTemplateFS embed.FS
messageTemplate *template.Template
)

func init() {
var err error
messageTemplate, err = template.ParseFS(messageTemplateFS, "message.tmpl.md")
if err != nil {
log.Fatalf("failed to read notification message template: %v", err)
}
}

type Client interface {
SendTicketNotification(twickets.Ticket) error
}

func notificationMessage(ticket twickets.Ticket, includeLink bool) string { // nolint: revive
var builder strings.Builder

writeLine(&builder, "%s, %s", ticket.Event.Venue.Name, ticket.Event.Venue.Location.Name)
writeLine(&builder, "%s %s", ticket.Event.Date.Format("Monday 2 January 2006"), ticket.Event.Time.Format("3:04pm"))
writeLine(&builder, "%d ticket(s)", ticket.TicketQuantity)

writeLine(&builder, "")
type MessageTemplateData struct {
Venue string
Location string
Date string
Time string
NumTickets int
TotalTicketPrice string
TotalPrice string
OriginalTicketPrice string
OriginalTotalPrice string
Discount float64
Link string
}

writeLine(&builder, "Ticket Price: %s", ticket.TotalTicketPrice().String())
writeLine(&builder, "Total Price: %s", ticket.TotalPrice().String())
if ticket.Discount() < 0 {
writeLine(&builder, "Discount: None")
} else {
writeLine(&builder, "Discount: %s", ticket.DiscountString())
func renderMessage(ticket twickets.Ticket, includeLink bool) (string, error) {

Check warning on line 45 in twickets/notification/notification.go

View workflow job for this annotation

GitHub Actions / Lint

flag-parameter: parameter 'includeLink' seems to be a control flag, avoid control coupling (revive)
templateData := MessageTemplateData{
Venue: ticket.Event.Venue.Name,
Location: ticket.Event.Venue.Location.Name,
Date: ticket.Event.Date.Format("Monday 2 January 2006"),
Time: ticket.Event.Time.Format("3:04pm"),
NumTickets: ticket.TicketQuantity,
TotalTicketPrice: ticket.TotalTicketPrice().String(),
TotalPrice: ticket.TotalPrice().String(),
OriginalTicketPrice: ticket.OriginalTicketPrice().String(),
OriginalTotalPrice: ticket.OriginalTotalPrice.String(),
Discount: ticket.Discount(),
}

writeLine(&builder, "")

writeLine(&builder, "Original Ticket Price: %s", ticket.OriginalTicketPrice().String())
writeLine(&builder, "Original Total Price: %s", ticket.OriginalTotalPrice.String())

if includeLink {
writeLine(&builder, "")
writeLine(&builder, "Buy: %s", ticket.Link())
templateData.Link = ticket.Link()
}

return builder.String()
}
var buffer bytes.Buffer
err := messageTemplate.Execute(&buffer, templateData)
if err != nil {
return "", fmt.Errorf("failed to render notification message template:, %w", err)
}

func writeLine(builder *strings.Builder, format string, args ...any) {
_, _ = builder.WriteString(
fmt.Sprintf(format, args...) + "\n",
)
return buffer.String(), nil
}
9 changes: 7 additions & 2 deletions twickets/notification/ntfy.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,14 @@ type NtfyClient struct {
var _ Client = NtfyClient{}

func (c NtfyClient) SendTicketNotification(ticket twickets.Ticket) error {
_, err := c.client.Publish(
notificationMessage, err := renderMessage(ticket, false)
if err != nil {
return err
}

_, err = c.client.Publish(
c.url.String(),
notificationMessage(ticket, false),
notificationMessage,
client.WithTitle(ticket.Event.Name),
client.WithActions(NtfyViewAction("Open Link", lo.ToPtr(ticket.Link()))),
client.WithHeader("Content-Type", "text/markdown"),
Expand Down
17 changes: 17 additions & 0 deletions twickets/notification/template/message.tmpl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{{ .Venue }}, {{ .Location }}
{{ .Date }} {{ .Time }}

Num Tickets: {{ .NumTickets }} ticket(s)
Ticket Price: {{ .TotalTicketPrice }}
Total Price: {{ .TotalPrice }}
{{ if lt .Discount 0.0 }}
Discount: None
{{ else }}
Discount: {{ .Discount }}%
{{ end }}

Original Ticket Price: {{ .OriginalTicketPrice }}
Original Total Price: {{ .OriginalTotalPrice }}
{{ if .Link != "" }}
Buy: {{ .Link }}
{{ end }}

0 comments on commit d62e88d

Please sign in to comment.