package authz import ( "database/sql" "fmt" "sync" ) // ===================================================== // ๐Ÿง  PIYASA CACHE (USER โ†’ CODES) // ===================================================== var ( piyasaCache = make(map[int][]string) piyasaMu sync.RWMutex ) // ===================================================== // ๐Ÿ“Œ GET USER PIYASA CODES (CACHED) // ===================================================== func GetUserPiyasaCodes(pg *sql.DB, userID int) ([]string, error) { // ----------------------------- // CACHE READ // ----------------------------- piyasaMu.RLock() if it, ok := piyasaCache[userID]; ok { piyasaMu.RUnlock() return it, nil } piyasaMu.RUnlock() // ----------------------------- // DB QUERY // ----------------------------- rows, err := pg.Query(` SELECT piyasa_code FROM dfusr_piyasa WHERE dfusr_id = $1 AND is_allowed = true `, userID) if err != nil { return nil, fmt.Errorf("pg piyasa query error: %w", err) } defer rows.Close() var out []string for rows.Next() { var code string if err := rows.Scan(&code); err == nil { out = append(out, code) } } // ----------------------------- // CACHE WRITE // ----------------------------- piyasaMu.Lock() piyasaCache[userID] = out piyasaMu.Unlock() return out, nil } // ===================================================== // ๐Ÿงน CLEAR USER PIYASA CACHE // ===================================================== func ClearPiyasaCache(userID int) { piyasaMu.Lock() defer piyasaMu.Unlock() delete(piyasaCache, userID) }