add competition service (it`s broken, I will fix it later)
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"datarush/internal/competition/domain"
|
||||
"datarush/internal/competition/repository"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
repo repository.CompetitionRepository
|
||||
}
|
||||
|
||||
func NewService(repo repository.CompetitionRepository) *Service {
|
||||
return &Service{repo: repo}
|
||||
}
|
||||
|
||||
func (s *Service) CreateCompetition(ctx context.Context, comp *domain.Competition) (*domain.Competition, error) {
|
||||
now := time.Now()
|
||||
if comp.ID == uuid.Nil {
|
||||
comp.ID = uuid.New()
|
||||
}
|
||||
comp.CreatedAt = now
|
||||
comp.UpdatedAt = now
|
||||
|
||||
if err := s.repo.Create(ctx, comp); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return comp, nil
|
||||
}
|
||||
|
||||
func (s *Service) GetCompetition(ctx context.Context, id uuid.UUID) (*domain.Competition, error) {
|
||||
return s.repo.Get(ctx, id)
|
||||
}
|
||||
|
||||
func (s *Service) EditCompetition(ctx context.Context, comp *domain.Competition) (*domain.Competition, error) {
|
||||
comp.UpdatedAt = time.Now()
|
||||
if err := s.repo.Update(ctx, comp); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.repo.Get(ctx, comp.ID)
|
||||
}
|
||||
|
||||
func (s *Service) DeleteCompetition(ctx context.Context, id uuid.UUID) error {
|
||||
return s.repo.Delete(ctx, id)
|
||||
}
|
||||
|
||||
func (s *Service) ListCompetitions(ctx context.Context, pageSize int32, pageToken int32, state *domain.CompetitionState, isParticipating *bool, searchQuery *string) ([]domain.Competition, int32, int32, error) {
|
||||
opts := repository.ListCompetitionsOptions{
|
||||
Page: int(pageToken),
|
||||
PageSize: int(pageSize),
|
||||
State: state,
|
||||
IsParticipating: isParticipating,
|
||||
SearchQuery: searchQuery,
|
||||
}
|
||||
|
||||
competitions, total, err := s.repo.List(ctx, opts)
|
||||
if err != nil {
|
||||
return nil, 0, 0, err
|
||||
}
|
||||
|
||||
var nextPageToken int32
|
||||
if (opts.Page+1)*opts.PageSize < total {
|
||||
nextPageToken = int32(opts.Page + 1)
|
||||
}
|
||||
|
||||
return competitions, int32(total), nextPageToken, nil
|
||||
}
|
||||
|
||||
func (s *Service) ChangeCompetitionState(ctx context.Context, id uuid.UUID, state domain.CompetitionState) (*domain.Competition, error) {
|
||||
return s.repo.ChangeState(ctx, id, state)
|
||||
}
|
||||
Reference in New Issue
Block a user