Skip to content

Commit b4a7137

Browse files
add sync for event for club meeting
1 parent a82ca53 commit b4a7137

File tree

1 file changed

+67
-2
lines changed

1 file changed

+67
-2
lines changed

internal/services/event.go

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package services
22

33
import (
4+
"encoding/json"
45
"errors"
6+
"time"
57

68
"github.com/nevzattalhaozcan/forgotten/internal/config"
79
"github.com/nevzattalhaozcan/forgotten/internal/models"
@@ -49,6 +51,7 @@ func (s *EventService) CreateEvent(clubID uint, req *models.CreateEventRequest)
4951
}
5052

5153
response := event.ToResponse()
54+
_ = s.refreshClubNextMeeting(clubID)
5255
return &response, nil
5356
}
5457

@@ -126,18 +129,25 @@ func (s *EventService) UpdateEvent(id uint, req *models.UpdateEventRequest) (*mo
126129
}
127130

128131
response := event.ToResponse()
132+
_ = s.refreshClubNextMeeting(event.ClubID)
129133
return &response, nil
130134
}
131135

132136
func (s *EventService) DeleteEvent(id uint) error {
133-
_, err := s.eventRepo.GetByID(id)
137+
event, err := s.eventRepo.GetByID(id)
134138
if err != nil {
135139
if errors.Is(err, gorm.ErrRecordNotFound) {
136140
return errors.New("event not found")
137141
}
138142
return err
139143
}
140-
return s.eventRepo.Delete(id)
144+
if err := s.eventRepo.Delete(id); err != nil {
145+
return err
146+
}
147+
148+
_ = s.refreshClubNextMeeting(event.ClubID)
149+
150+
return nil
141151
}
142152

143153
func (s *EventService) RSVPToEvent(id uint, rsvp *models.EventRSVP) error {
@@ -161,3 +171,58 @@ func (s *EventService) GetEventAttendees(eventID uint) ([]models.EventRSVP, erro
161171
}
162172
return s.eventRepo.GetEventAttendees(eventID)
163173
}
174+
175+
func (s *EventService) refreshClubNextMeeting(clubID uint) error {
176+
events, err := s.eventRepo.GetClubEvents(clubID)
177+
if err != nil {
178+
return err
179+
}
180+
181+
now := time.Now()
182+
var next *models.Event
183+
for i := range events {
184+
e := events[i]
185+
if e.StartTime.Before(now) {
186+
continue
187+
}
188+
if next == nil || e.StartTime.Before(next.StartTime) {
189+
next = &e
190+
}
191+
}
192+
193+
club, err := s.clubRepo.GetByID(clubID)
194+
if err != nil {
195+
return err
196+
}
197+
198+
if next == nil {
199+
club.NextMeeting = nil
200+
return s.clubRepo.Update(club)
201+
}
202+
203+
var loc *string
204+
switch next.EventType {
205+
case models.EventOnline:
206+
if next.OnlineLink != "" {
207+
l := next.OnlineLink
208+
loc = &l
209+
}
210+
default:
211+
if next.Location != "" {
212+
l := next.Location
213+
loc = &l
214+
}
215+
}
216+
217+
topic := next.Title
218+
nm := models.NextMeeting{
219+
Date: &next.StartTime,
220+
Location: loc,
221+
Topic: &topic,
222+
}
223+
if b, merr := json.Marshal(&nm); merr == nil {
224+
club.NextMeeting = b
225+
}
226+
227+
return s.clubRepo.Update(club)
228+
}

0 commit comments

Comments
 (0)