Refactor models to use single struct per entity
This commit is contained in:
@@ -1,13 +1,5 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/sq"
|
||||
"time"
|
||||
)
|
||||
|
||||
type DeliveryStatus string //@enum:type
|
||||
|
||||
const (
|
||||
@@ -17,90 +9,18 @@ const (
|
||||
)
|
||||
|
||||
type Delivery struct {
|
||||
DeliveryID DeliveryID
|
||||
MessageID MessageID
|
||||
ReceiverUserID UserID
|
||||
ReceiverClientID ClientID
|
||||
TimestampCreated time.Time
|
||||
TimestampFinalized *time.Time
|
||||
Status DeliveryStatus
|
||||
RetryCount int
|
||||
NextDelivery *time.Time
|
||||
FCMMessageID *string
|
||||
}
|
||||
|
||||
func (d Delivery) JSON() DeliveryJSON {
|
||||
return DeliveryJSON{
|
||||
DeliveryID: d.DeliveryID,
|
||||
MessageID: d.MessageID,
|
||||
ReceiverUserID: d.ReceiverUserID,
|
||||
ReceiverClientID: d.ReceiverClientID,
|
||||
TimestampCreated: d.TimestampCreated.Format(time.RFC3339Nano),
|
||||
TimestampFinalized: timeOptFmt(d.TimestampFinalized, time.RFC3339Nano),
|
||||
Status: d.Status,
|
||||
RetryCount: d.RetryCount,
|
||||
NextDelivery: timeOptFmt(d.NextDelivery, time.RFC3339Nano),
|
||||
FCMMessageID: d.FCMMessageID,
|
||||
}
|
||||
DeliveryID DeliveryID `db:"delivery_id" json:"delivery_id"`
|
||||
MessageID MessageID `db:"message_id" json:"message_id"`
|
||||
ReceiverUserID UserID `db:"receiver_user_id" json:"receiver_user_id"`
|
||||
ReceiverClientID ClientID `db:"receiver_client_id" json:"receiver_client_id"`
|
||||
TimestampCreated SCNTime `db:"timestamp_created" json:"timestamp_created"`
|
||||
TimestampFinalized *SCNTime `db:"timestamp_finalized" json:"timestamp_finalized"`
|
||||
Status DeliveryStatus `db:"status" json:"status"`
|
||||
RetryCount int `db:"retry_count" json:"retry_count"`
|
||||
NextDelivery *SCNTime `db:"next_delivery" json:"next_delivery"`
|
||||
FCMMessageID *string `db:"fcm_message_id" json:"fcm_message_id"`
|
||||
}
|
||||
|
||||
func (d Delivery) MaxRetryCount() int {
|
||||
return 5
|
||||
}
|
||||
|
||||
type DeliveryJSON struct {
|
||||
DeliveryID DeliveryID `json:"delivery_id"`
|
||||
MessageID MessageID `json:"message_id"`
|
||||
ReceiverUserID UserID `json:"receiver_user_id"`
|
||||
ReceiverClientID ClientID `json:"receiver_client_id"`
|
||||
TimestampCreated string `json:"timestamp_created"`
|
||||
TimestampFinalized *string `json:"timestamp_finalized"`
|
||||
Status DeliveryStatus `json:"status"`
|
||||
RetryCount int `json:"retry_count"`
|
||||
NextDelivery *string `json:"next_delivery"`
|
||||
FCMMessageID *string `json:"fcm_message_id"`
|
||||
}
|
||||
|
||||
type DeliveryDB struct {
|
||||
DeliveryID DeliveryID `db:"delivery_id"`
|
||||
MessageID MessageID `db:"message_id"`
|
||||
ReceiverUserID UserID `db:"receiver_user_id"`
|
||||
ReceiverClientID ClientID `db:"receiver_client_id"`
|
||||
TimestampCreated int64 `db:"timestamp_created"`
|
||||
TimestampFinalized *int64 `db:"timestamp_finalized"`
|
||||
Status DeliveryStatus `db:"status"`
|
||||
RetryCount int `db:"retry_count"`
|
||||
NextDelivery *int64 `db:"next_delivery"`
|
||||
FCMMessageID *string `db:"fcm_message_id"`
|
||||
}
|
||||
|
||||
func (d DeliveryDB) Model() Delivery {
|
||||
return Delivery{
|
||||
DeliveryID: d.DeliveryID,
|
||||
MessageID: d.MessageID,
|
||||
ReceiverUserID: d.ReceiverUserID,
|
||||
ReceiverClientID: d.ReceiverClientID,
|
||||
TimestampCreated: timeFromMilli(d.TimestampCreated),
|
||||
TimestampFinalized: timeOptFromMilli(d.TimestampFinalized),
|
||||
Status: d.Status,
|
||||
RetryCount: d.RetryCount,
|
||||
NextDelivery: timeOptFromMilli(d.NextDelivery),
|
||||
FCMMessageID: d.FCMMessageID,
|
||||
}
|
||||
}
|
||||
|
||||
func DecodeDelivery(ctx context.Context, q sq.Queryable, r *sqlx.Rows) (Delivery, error) {
|
||||
data, err := sq.ScanSingle[DeliveryDB](ctx, q, r, sq.SModeFast, sq.Safe, true)
|
||||
if err != nil {
|
||||
return Delivery{}, err
|
||||
}
|
||||
return data.Model(), nil
|
||||
}
|
||||
|
||||
func DecodeDeliveries(ctx context.Context, q sq.Queryable, r *sqlx.Rows) ([]Delivery, error) {
|
||||
data, err := sq.ScanAll[DeliveryDB](ctx, q, r, sq.SModeFast, sq.Safe, true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return langext.ArrMap(data, func(v DeliveryDB) Delivery { return v.Model() }), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user