qq_bot/handler/ticket/store_ticket.go
2024-10-26 03:30:54 +08:00

94 lines
1.9 KiB
Go

package ticket
import (
"strconv"
"git.lxtend.com/qqbot/sqlite3"
)
func init() {
createTableQuery := `CREATE TABLE IF NOT EXISTS ticket (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
fromQQ TEXT NOT NULL,
fromGroup TEXT DEFAULT NULL,
isDone BOOLEAN DEFAULT FALSE,
isDeleted BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
`
sqlite3.TryCreateTable(createTableQuery)
}
func storeTicket(content string, fromQQ int64, fromGroup int64) (int64, error) {
ticket := Ticket{
Content: content,
FromQQ: fromQQ,
FromGroup: fromGroup,
}
tx, err := sqlite3.GetTran()
if err != nil {
return 0, err
}
defer tx.Rollback()
res, err := tx.Exec("INSERT INTO ticket (content, fromQQ, fromGroup) VALUES (:content, :fromQQ, :fromGroup)", ticket.Content, ticket.FromQQ, ticket.FromGroup)
if err != nil {
return 0, err
}
id, _ := res.LastInsertId()
tx.Commit()
return id, nil
}
func setTicketDone(id int) error {
tx, err := sqlite3.GetTran()
if err != nil {
return err
}
defer tx.Rollback()
_, err = tx.Exec("UPDATE ticket SET isDone = TRUE WHERE id = ?", id)
if err != nil {
return err
}
tx.Commit()
return nil
}
func getAllTicket() ([]WebTicketModel, error) {
tx, err := sqlite3.GetTran()
if err != nil {
return nil, err
}
defer tx.Rollback()
var ticketList []Ticket
err = tx.Select(&ticketList, "SELECT * FROM ticket WHERE isDone=false")
if err != nil {
return nil, err
}
var webTickets []WebTicketModel
for _, v := range ticketList {
var fromQQStr string
if v.FromQQ == 0 {
fromQQStr = "未知"
} else {
fromQQStr = strconv.Itoa(int(v.FromQQ/10000)) + "****"
}
webTicket := WebTicketModel{
Id: v.Id,
Content: v.Content,
FromQQ: fromQQStr,
CreatedAt: v.CreatedAt,
}
webTickets = append(webTickets, webTicket)
}
err = tx.Commit()
if err != nil {
return nil, err
}
return webTickets, nil
}