All checks were successful
Build and Release / release (push) Successful in 1m32s
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package services
|
|
|
|
import (
|
|
"context"
|
|
"history-api/internal/dtos/response"
|
|
"history-api/internal/models"
|
|
"history-api/internal/repositories"
|
|
"history-api/pkg/convert"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
type BattleReplayService interface {
|
|
GetByID(ctx context.Context, id string) (*response.BattleReplayResponse, *fiber.Error)
|
|
GetByGeometryID(ctx context.Context, geometryID string) ([]*response.BattleReplayResponse, *fiber.Error)
|
|
}
|
|
|
|
type battleReplayService struct {
|
|
battleReplayRepo repositories.BattleReplayRepository
|
|
}
|
|
|
|
func NewBattleReplayService(battleReplayRepo repositories.BattleReplayRepository) BattleReplayService {
|
|
return &battleReplayService{
|
|
battleReplayRepo: battleReplayRepo,
|
|
}
|
|
}
|
|
|
|
func (s *battleReplayService) GetByID(ctx context.Context, id string) (*response.BattleReplayResponse, *fiber.Error) {
|
|
replayUUID, err := convert.StringToUUID(id)
|
|
if err != nil {
|
|
return nil, fiber.NewError(fiber.StatusBadRequest, "Invalid battle replay ID format")
|
|
}
|
|
|
|
replay, err := s.battleReplayRepo.GetByID(ctx, replayUUID)
|
|
if err != nil {
|
|
return nil, fiber.NewError(fiber.StatusNotFound, "Battle replay not found")
|
|
}
|
|
|
|
return replay.ToResponse(), nil
|
|
}
|
|
|
|
func (s *battleReplayService) GetByGeometryID(ctx context.Context, geometryID string) ([]*response.BattleReplayResponse, *fiber.Error) {
|
|
geomUUID, err := convert.StringToUUID(geometryID)
|
|
if err != nil {
|
|
return nil, fiber.NewError(fiber.StatusBadRequest, "Invalid geometry ID format")
|
|
}
|
|
|
|
replays, err := s.battleReplayRepo.GetByGeometryID(ctx, geomUUID)
|
|
if err != nil {
|
|
return nil, fiber.NewError(fiber.StatusInternalServerError, "Failed to get battle replays")
|
|
}
|
|
|
|
return models.BattleReplaysEntityToResponse(replays), nil
|
|
}
|