feat(invoice): add send route
This commit is contained in:
69
internal/api/httpinvoce/model.go
Normal file
69
internal/api/httpinvoce/model.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package httpinvoce
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.schreifuchs.ch/lou-taylor/accounting/internal/email"
|
||||
"git.schreifuchs.ch/lou-taylor/accounting/pkg/invoice"
|
||||
"git.schreifuchs.ch/lou-taylor/accounting/pkg/invoice/model"
|
||||
)
|
||||
|
||||
type invoiceReq struct {
|
||||
Debtor model.Entity `json:"debtor"`
|
||||
Creditor model.Entity `json:"creditor"`
|
||||
DurationThreshold time.Duration `json:"durationThreshold"`
|
||||
HourlyRate float64 `json:"hourlyRate"`
|
||||
Repos []string `json:"repositories"`
|
||||
}
|
||||
|
||||
func (i invoiceReq) GetRepos() (repos []invoice.Repo, err error) {
|
||||
for i, repo := range i.Repos {
|
||||
parts := strings.Split(repo, "/")
|
||||
if len(parts) != 2 {
|
||||
err = fmt.Errorf("cannot read body: repo with index %d does not split into 2 parts", i)
|
||||
return
|
||||
}
|
||||
repos = append(repos, invoice.Repo{
|
||||
Owner: parts[0],
|
||||
Repo: parts[1],
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type sendReq struct {
|
||||
To []string `json:"to"`
|
||||
Cc []string `json:"cc"`
|
||||
Bcc []string `json:"bcc"`
|
||||
Subject string `json:"subjec"`
|
||||
Body string `json:"body"`
|
||||
Invoice invoiceReq `json:"invoice"`
|
||||
}
|
||||
|
||||
func (s sendReq) ToEMail() email.Mail {
|
||||
return email.Mail{
|
||||
To: s.To,
|
||||
Cc: s.Cc,
|
||||
Bcc: s.Bcc,
|
||||
Subject: s.Subject,
|
||||
Body: s.Body,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) sendErrf(w http.ResponseWriter, statusCode int, format string, a ...any) {
|
||||
msg := fmt.Sprintf(format, a...)
|
||||
s.log.Error(msg, slog.Any("statusCode", statusCode))
|
||||
w.Write([]byte(msg))
|
||||
w.WriteHeader(statusCode)
|
||||
}
|
||||
|
||||
func (s *Service) sendErr(w http.ResponseWriter, statusCode int, a ...any) {
|
||||
msg := fmt.Sprint(a...)
|
||||
s.log.Error(msg, slog.Any("statusCode", statusCode))
|
||||
w.Write([]byte(msg))
|
||||
w.WriteHeader(statusCode)
|
||||
}
|
||||
Reference in New Issue
Block a user