package chain import ( "database/sql" ) type RPCLimiterDB struct { db *sql.DB } func NewRPCLimiterDB(db *sql.DB) *RPCLimiterDB { return &RPCLimiterDB{ db: db, } } func (r *RPCLimiterDB) CreateRPCLimit(limit LimitData) error { query := `INSERT INTO rpc_limits (tag, created_at, period, max_requests, counter) VALUES (?, ?, ?, ?, ?)` _, err := r.db.Exec(query, limit.Tag, limit.CreatedAt, limit.Period, limit.MaxReqs, limit.NumReqs) if err != nil { return err } return nil } func (r *RPCLimiterDB) GetRPCLimit(tag string) (*LimitData, error) { query := `SELECT tag, created_at, period, max_requests, counter FROM rpc_limits WHERE tag = ?` row := r.db.QueryRow(query, tag) limit := &LimitData{} err := row.Scan(limit.Tag, limit.CreatedAt, limit.Period, limit.MaxReqs, limit.NumReqs) if err != nil || err == sql.ErrNoRows { return nil, err } return limit, nil } func (r *RPCLimiterDB) UpdateRPCLimit(limit LimitData) error { query := `UPDATE rpc_limits SET created_at = ?, period = ?, limit = ?, counter = ? WHERE tag = ?` _, err := r.db.Exec(query, limit.CreatedAt, limit.Period, limit.MaxReqs, limit.NumReqs, limit.Tag) if err != nil { return err } return nil } func (r *RPCLimiterDB) DeleteRPCLimit(tag string) error { query := `DELETE FROM rpc_limits WHERE tag = ?` _, err := r.db.Exec(query, tag) if err != nil || err == sql.ErrNoRows { return err } return nil }