Files
backend/internal/database/server_repository.go
2026-01-12 17:17:18 +03:00

69 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package database
import (
"context"
"gitea.mrixs.me/minecraft-platform/backend/internal/models"
"github.com/jackc/pgx/v5/pgxpool"
)
type ServerRepository struct {
DB *pgxpool.Pool
}
// GetAllEnabledServers возвращает все активные серверы для опроса.
func (r *ServerRepository) GetAllEnabledServers(ctx context.Context) ([]*models.GameServer, error) {
rows, err := r.DB.Query(ctx, "SELECT id, name, address FROM game_servers WHERE is_enabled = TRUE")
if err != nil {
return nil, err
}
defer rows.Close()
var servers []*models.GameServer
for rows.Next() {
s := &models.GameServer{}
if err := rows.Scan(&s.ID, &s.Name, &s.Address); err != nil {
return nil, err
}
servers = append(servers, s)
}
return servers, nil
}
// UpdateServerStatus обновляет данные о статусе сервера.
func (r *ServerRepository) UpdateServerStatus(ctx context.Context, id int, status *models.ServerStatus) error {
query := `
UPDATE game_servers SET
status_json = $1, last_polled_at = NOW(), motd = $2, player_count = $3,
max_players = $4, version_name = $5, ping_backend_server = $6
WHERE id = $7`
_, err := r.DB.Exec(ctx, query,
status.StatusJSON, status.Motd, status.PlayerCount, status.MaxPlayers,
status.VersionName, status.Ping, id)
return err
}
// GetAllWithStatus возвращает все активные серверы с их текущим статусом.
func (r *ServerRepository) GetAllWithStatus(ctx context.Context) ([]*models.GameServer, error) {
query := `
SELECT id, name, address, is_enabled, last_polled_at, motd,
player_count, max_players, version_name, ping_backend_server, bluemap_url
FROM game_servers WHERE is_enabled = TRUE ORDER BY name`
rows, err := r.DB.Query(ctx, query)
if err != nil {
return nil, err
}
defer rows.Close()
var servers []*models.GameServer
for rows.Next() {
s := &models.GameServer{}
if err := rows.Scan(&s.ID, &s.Name, &s.Address, &s.IsEnabled, &s.LastPolledAt,
&s.Motd, &s.PlayerCount, &s.MaxPlayers, &s.VersionName, &s.PingBackendServer, &s.BlueMapURL); err != nil {
return nil, err
}
servers = append(servers, s)
}
return servers, nil
}