mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 07:32:32 +01:00
Move scan loops from handlers into repository methods so that interfaces return typed slices instead of leaking database cursors. This fixes resource leaks (7 of 12 call sites never closed rows) and makes all 12 methods mockable for unit tests. Affected repos: CafeRepo, ShopRepo, EventRepo, RengokuRepo, DivaRepo, ScenarioRepo, MiscRepo, MercenaryRepo. New structs: DivaEvent, MercenaryLoan, GuildHuntCatUsage. EventRepo.GetEventQuests left as-is (requires broader Server refactor).
36 lines
904 B
Go
36 lines
904 B
Go
package channelserver
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
// ScenarioRepository centralizes all database access for the scenario_counter table.
|
|
type ScenarioRepository struct {
|
|
db *sqlx.DB
|
|
}
|
|
|
|
// NewScenarioRepository creates a new ScenarioRepository.
|
|
func NewScenarioRepository(db *sqlx.DB) *ScenarioRepository {
|
|
return &ScenarioRepository{db: db}
|
|
}
|
|
|
|
// GetCounters returns all scenario counters.
|
|
func (r *ScenarioRepository) GetCounters() ([]Scenario, error) {
|
|
rows, err := r.db.Query("SELECT scenario_id, category_id FROM scenario_counter")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("query scenario_counter: %w", err)
|
|
}
|
|
defer rows.Close()
|
|
var result []Scenario
|
|
for rows.Next() {
|
|
var s Scenario
|
|
if err := rows.Scan(&s.MainID, &s.CategoryID); err != nil {
|
|
return nil, fmt.Errorf("scan scenario_counter: %w", err)
|
|
}
|
|
result = append(result, s)
|
|
}
|
|
return result, rows.Err()
|
|
}
|