Files
bot_ticket_r6_elite/internal/db/claim_messages.go
T
2026-05-02 02:55:53 +02:00

59 lines
1.7 KiB
Go

package db
import (
"context"
"database/sql"
"time"
)
type ClaimMessage struct {
TicketID int64
MessageID string
LastReupAt time.Time
}
type ClaimMessageRepo struct{ db *sql.DB }
func NewClaimMessageRepo(db *sql.DB) *ClaimMessageRepo { return &ClaimMessageRepo{db: db} }
func (r *ClaimMessageRepo) Upsert(ctx context.Context, ticketID int64, messageID string, at time.Time) error {
_, err := r.db.ExecContext(ctx, `
INSERT INTO claim_messages(ticket_id, message_id, last_reup_at) VALUES(?,?,?)
ON CONFLICT(ticket_id) DO UPDATE SET message_id=excluded.message_id, last_reup_at=excluded.last_reup_at`,
ticketID, messageID, at.UTC())
return err
}
func (r *ClaimMessageRepo) Get(ctx context.Context, ticketID int64) (*ClaimMessage, error) {
var cm ClaimMessage
err := r.db.QueryRowContext(ctx,
`SELECT ticket_id, message_id, last_reup_at FROM claim_messages WHERE ticket_id=?`, ticketID,
).Scan(&cm.TicketID, &cm.MessageID, &cm.LastReupAt)
if err == sql.ErrNoRows {
return nil, nil
}
return &cm, err
}
func (r *ClaimMessageRepo) Delete(ctx context.Context, ticketID int64) error {
_, err := r.db.ExecContext(ctx, `DELETE FROM claim_messages WHERE ticket_id=?`, ticketID)
return err
}
func (r *ClaimMessageRepo) ListAll(ctx context.Context) ([]*ClaimMessage, error) {
rows, err := r.db.QueryContext(ctx, `SELECT ticket_id, message_id, last_reup_at FROM claim_messages`)
if err != nil {
return nil, err
}
defer rows.Close()
var result []*ClaimMessage
for rows.Next() {
var cm ClaimMessage
if err := rows.Scan(&cm.TicketID, &cm.MessageID, &cm.LastReupAt); err != nil {
return nil, err
}
result = append(result, &cm)
}
return result, rows.Err()
}