89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
|
package db
|
||
|
|
||
|
import (
|
||
|
"blackforestbytes.com/simplecloudnotifier/models"
|
||
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func (db *Database) CreateRetryDelivery(ctx TxContext, client models.Client, msg models.Message) (models.Delivery, error) {
|
||
|
tx, err := ctx.GetOrCreateTransaction(db)
|
||
|
if err != nil {
|
||
|
return models.Delivery{}, err
|
||
|
}
|
||
|
|
||
|
now := time.Now().UTC()
|
||
|
next := now.Add(5 * time.Second)
|
||
|
|
||
|
res, err := tx.ExecContext(ctx, "INSERT INTO deliveries (scn_message_id, receiver_user_id, receiver_client_id, timestamp_created, timestamp_finalized, status, fcm_message_id, next_delivery) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
||
|
msg.SCNMessageID,
|
||
|
client.UserID,
|
||
|
client.ClientID,
|
||
|
time2DB(now),
|
||
|
nil,
|
||
|
models.DeliveryStatusRetry,
|
||
|
nil,
|
||
|
time2DB(next))
|
||
|
if err != nil {
|
||
|
return models.Delivery{}, err
|
||
|
}
|
||
|
|
||
|
liid, err := res.LastInsertId()
|
||
|
if err != nil {
|
||
|
return models.Delivery{}, err
|
||
|
}
|
||
|
|
||
|
return models.Delivery{
|
||
|
DeliveryID: liid,
|
||
|
SCNMessageID: msg.SCNMessageID,
|
||
|
ReceiverUserID: client.UserID,
|
||
|
ReceiverClientID: client.ClientID,
|
||
|
TimestampCreated: now,
|
||
|
TimestampFinalized: nil,
|
||
|
Status: models.DeliveryStatusRetry,
|
||
|
RetryCount: 0,
|
||
|
NextDelivery: langext.Ptr(next),
|
||
|
FCMMessageID: nil,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (db *Database) CreateSuccessDelivery(ctx TxContext, client models.Client, msg models.Message, fcmDelivID string) (models.Delivery, error) {
|
||
|
tx, err := ctx.GetOrCreateTransaction(db)
|
||
|
if err != nil {
|
||
|
return models.Delivery{}, err
|
||
|
}
|
||
|
|
||
|
now := time.Now().UTC()
|
||
|
|
||
|
res, err := tx.ExecContext(ctx, "INSERT INTO deliveries (scn_message_id, receiver_user_id, receiver_client_id, timestamp_created, timestamp_finalized, status, fcm_message_id, next_delivery) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
||
|
msg.SCNMessageID,
|
||
|
client.UserID,
|
||
|
client.ClientID,
|
||
|
time2DB(now),
|
||
|
time2DB(now),
|
||
|
models.DeliveryStatusSuccess,
|
||
|
fcmDelivID,
|
||
|
nil)
|
||
|
if err != nil {
|
||
|
return models.Delivery{}, err
|
||
|
}
|
||
|
|
||
|
liid, err := res.LastInsertId()
|
||
|
if err != nil {
|
||
|
return models.Delivery{}, err
|
||
|
}
|
||
|
|
||
|
return models.Delivery{
|
||
|
DeliveryID: liid,
|
||
|
SCNMessageID: msg.SCNMessageID,
|
||
|
ReceiverUserID: client.UserID,
|
||
|
ReceiverClientID: client.ClientID,
|
||
|
TimestampCreated: now,
|
||
|
TimestampFinalized: langext.Ptr(now),
|
||
|
Status: models.DeliveryStatusSuccess,
|
||
|
RetryCount: 0,
|
||
|
NextDelivery: nil,
|
||
|
FCMMessageID: langext.Ptr(fcmDelivID),
|
||
|
}, nil
|
||
|
}
|