ticket.go 658 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package ticket
  2. import (
  3. _ "embed"
  4. "fmt"
  5. "github.com/lithammer/shortuuid/v4"
  6. "google.golang.org/protobuf/encoding/protojson"
  7. "time"
  8. )
  9. func New(id string) *Ticket {
  10. return &Ticket{
  11. Id: id,
  12. Thread: []*Message{},
  13. }
  14. }
  15. func NewId(suffix string) string {
  16. now := time.Now()
  17. return fmt.Sprintf("t%s%d%03d-%s",
  18. suffix,
  19. now.Year(),
  20. now.YearDay(),
  21. shortuuid.New())
  22. }
  23. func (t *Ticket) Marshal() ([]byte, error) {
  24. return protojson.Marshal(t)
  25. }
  26. //goland:noinspection GoUnusedExportedFunction
  27. func Unmarshal(d []byte) (*Ticket, error) {
  28. t := &Ticket{}
  29. if err := protojson.Unmarshal(d, t); err != nil {
  30. return nil, err
  31. }
  32. return t, nil
  33. }