Files
BanForge/internal/storage/requests_db.go
d3m0k1d 7f54db0cd4
Some checks failed
build / build (push) Failing after 1m48s
feat: add new method and for db req and add to template max retry
2026-02-19 10:53:55 +03:00

72 lines
1.3 KiB
Go

package storage
import (
"database/sql"
"github.com/d3m0k1d/BanForge/internal/logger"
_ "modernc.org/sqlite"
)
type RequestWriter struct {
logger *logger.Logger
db *sql.DB
}
func NewRequestsWr() (*RequestWriter, error) {
db, err := sql.Open(
"sqlite",
buildSqliteDsn(ReqDBPath, pragmas),
)
if err != nil {
return nil, err
}
db.SetMaxOpenConns(1)
db.SetMaxIdleConns(1)
db.SetConnMaxLifetime(0)
return &RequestWriter{
logger: logger.New(false),
db: db,
}, nil
}
type RequestReader struct {
logger *logger.Logger
db *sql.DB
}
func NewRequestsRd() (*RequestReader, error) {
db, err := sql.Open(
"sqlite",
buildSqliteDsn(ReqDBPath, pragmas),
)
if err != nil {
return nil, err
}
db.SetMaxOpenConns(1)
db.SetMaxIdleConns(1)
db.SetConnMaxLifetime(0)
return &RequestReader{
logger: logger.New(false),
db: db,
}, nil
}
func (r *RequestReader) IsMaxRetryExceeded(ip string, max_retry int) (bool, error) {
row, err := r.db.Query("SELECT COUNT(*) FROM requests WHERE ip = ?", ip)
if err != nil {
r.logger.Error("error scan" + err.Error())
return false, err
}
if row.Next() {
var count int
if err := row.Scan(&count); err != nil {
r.logger.Error("error scan" + err.Error())
return false, err
}
if count >= max_retry {
return true, nil
}
}
return true, nil
}