lots of stuff, don't truly remember
This commit is contained in:
105
internal/event/service.go
Normal file
105
internal/event/service.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
repo *Repository
|
||||
}
|
||||
|
||||
func NewService() *Service {
|
||||
return &Service{repo: NewRepository()}
|
||||
}
|
||||
|
||||
func (s *Service) CreateEvent(userID uint, name string, eventDate time.Time, eventType, priority, location, notes, url string, distance float64) (*Event, error) {
|
||||
if name == "" {
|
||||
return nil, errors.New("name is required")
|
||||
}
|
||||
if eventDate.IsZero() {
|
||||
return nil, errors.New("event_date is required")
|
||||
}
|
||||
if !isValidEventType(eventType) {
|
||||
return nil, errors.New("invalid event_type")
|
||||
}
|
||||
if !isValidPriority(priority) {
|
||||
priority = "C"
|
||||
}
|
||||
|
||||
event := &Event{
|
||||
UserID: userID,
|
||||
Name: name,
|
||||
EventDate: eventDate,
|
||||
EventType: eventType,
|
||||
Distance: distance,
|
||||
Priority: priority,
|
||||
Location: location,
|
||||
Notes: notes,
|
||||
URL: url,
|
||||
}
|
||||
|
||||
if err := s.repo.CreateEvent(event); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return event, nil
|
||||
}
|
||||
|
||||
func (s *Service) GetUserEvents(userID uint) ([]Event, error) {
|
||||
return s.repo.GetUserEvents(userID)
|
||||
}
|
||||
|
||||
func (s *Service) GetUpcomingEvents(userID uint, limit int) ([]Event, error) {
|
||||
return s.repo.GetUpcomingEvents(userID, limit)
|
||||
}
|
||||
|
||||
func (s *Service) UpdateEvent(id, userID uint, name string, eventDate time.Time, eventType, priority, location, notes, url string, distance float64) (*Event, error) {
|
||||
event, err := s.repo.GetEventByID(id, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if name != "" {
|
||||
event.Name = name
|
||||
}
|
||||
if !eventDate.IsZero() {
|
||||
event.EventDate = eventDate
|
||||
}
|
||||
if eventType != "" {
|
||||
if !isValidEventType(eventType) {
|
||||
return nil, errors.New("invalid event_type")
|
||||
}
|
||||
event.EventType = eventType
|
||||
}
|
||||
if priority != "" {
|
||||
if !isValidPriority(priority) {
|
||||
return nil, errors.New("invalid priority")
|
||||
}
|
||||
event.Priority = priority
|
||||
}
|
||||
event.Location = location
|
||||
event.Notes = notes
|
||||
event.URL = url
|
||||
event.Distance = distance
|
||||
|
||||
if err := s.repo.UpdateEvent(event); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return event, nil
|
||||
}
|
||||
|
||||
func (s *Service) DeleteEvent(id, userID uint) error {
|
||||
return s.repo.DeleteEvent(id, userID)
|
||||
}
|
||||
|
||||
func isValidEventType(t string) bool {
|
||||
valid := map[string]bool{
|
||||
"race": true, "gran_fondo": true, "group_ride": true,
|
||||
"time_trial": true, "century": true,
|
||||
}
|
||||
return valid[t]
|
||||
}
|
||||
|
||||
func isValidPriority(p string) bool {
|
||||
return p == "A" || p == "B" || p == "C"
|
||||
}
|
||||
Reference in New Issue
Block a user