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) }