mirror of
https://github.com/lone-cloud/prism
synced 2026-06-03 08:43:10 -07:00
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package signal
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
"prism/service/subscription"
|
|
)
|
|
|
|
type GroupCache struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewGroupCache(db *sql.DB) (*GroupCache, error) {
|
|
c := &GroupCache{db: db}
|
|
_, err := db.Exec(`CREATE TABLE IF NOT EXISTS signal_groups (
|
|
appName TEXT PRIMARY KEY,
|
|
groupId TEXT NOT NULL,
|
|
account TEXT NOT NULL,
|
|
FOREIGN KEY(appName) REFERENCES apps(appName) ON DELETE CASCADE
|
|
)`)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to create signal_groups table: %w", err)
|
|
}
|
|
return c, nil
|
|
}
|
|
|
|
func (c *GroupCache) Get(appName string) (*subscription.SignalSubscription, error) {
|
|
var groupID, account string
|
|
err := c.db.QueryRow(`SELECT groupId, account FROM signal_groups WHERE appName = ?`, appName).Scan(&groupID, &account)
|
|
if err == sql.ErrNoRows {
|
|
return nil, nil
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &subscription.SignalSubscription{GroupID: groupID, Account: account}, nil
|
|
}
|
|
|
|
func (c *GroupCache) Save(appName string, sub *subscription.SignalSubscription) error {
|
|
_, err := c.db.Exec(
|
|
`INSERT INTO signal_groups (appName, groupId, account) VALUES (?, ?, ?)
|
|
ON CONFLICT(appName) DO UPDATE SET groupId=excluded.groupId, account=excluded.account`,
|
|
appName, sub.GroupID, sub.Account,
|
|
)
|
|
return err
|
|
}
|