generated from VLADIMIR/template
43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
package game_service
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/mail"
|
|
"strings"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
var ErrInvalidRegistration = errors.New("Укажите название команды (до 255 символов), почту капитана и положительное количество участников")
|
|
|
|
type Registration struct {
|
|
Name string `json:"name"`
|
|
Email string `json:"email"`
|
|
ParticipantsCount int32 `json:"participantsCount"`
|
|
}
|
|
|
|
func (r *Registration) Validate() error {
|
|
r.Name = strings.TrimSpace(r.Name)
|
|
r.Email = strings.TrimSpace(r.Email)
|
|
address, err := mail.ParseAddress(r.Email)
|
|
if r.Name == "" || !utf8.ValidString(r.Name) || strings.ContainsRune(r.Name, 0) || utf8.RuneCountInString(r.Name) > 255 ||
|
|
err != nil || address.Address != r.Email || len(r.Email) > 254 || r.ParticipantsCount <= 0 {
|
|
return ErrInvalidRegistration
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *GameService) RegisterTeam(ctx context.Context, gameID int, deliveryID string, registration Registration) (int, error) {
|
|
if err := registration.Validate(); err != nil {
|
|
return 0, err
|
|
}
|
|
if gameID <= 0 || deliveryID == "" || len(deliveryID) > 255 || strings.ContainsRune(deliveryID, 0) {
|
|
return 0, ErrInvalidRegistration
|
|
}
|
|
password, err := s.passwordGenerator.Generate()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return s.teamsRepo.RegisterTeam(ctx, gameID, deliveryID, registration.Name, registration.Email, registration.ParticipantsCount, password)
|
|
}
|