99 "github.com/go-playground/validator/v10"
1010 "github.com/nevzattalhaozcan/forgotten/internal/models"
1111 "github.com/nevzattalhaozcan/forgotten/internal/services"
12+ "gorm.io/gorm"
1213)
1314
1415type EventHandler struct {
@@ -207,16 +208,13 @@ func (h *EventHandler) RSVPToEvent(c *gin.Context) {
207208 return
208209 }
209210
210- var req models. RSVPRequest
211- if err := c . ShouldBindJSON ( & req ); err != nil {
212- c .JSON (http .StatusBadRequest , gin.H {"error" : err . Error () })
213- return
214- }
211+ event , err := h . eventService . GetEventByID ( uint ( eventID ))
212+ if err != nil {
213+ c .JSON (http .StatusNotFound , gin.H {"error" : "event not found" })
214+ return
215+ }
215216
216- if err := h .validator .Struct (& req ); err != nil {
217- c .JSON (http .StatusBadRequest , gin.H {"error" : err .Error ()})
218- return
219- }
217+ clubID := event .ClubID
220218
221219 userIdRaw , ok := c .Get ("user_id" )
222220 if ! ok {
@@ -229,6 +227,31 @@ func (h *EventHandler) RSVPToEvent(c *gin.Context) {
229227 return
230228 }
231229
230+ membership , err := h .eventService .ClubRepo ().GetClubMemberByUserID (clubID , userID )
231+ if err != nil {
232+ if err == gorm .ErrRecordNotFound {
233+ c .JSON (http .StatusForbidden , gin.H {"error" : "club membership required" })
234+ } else {
235+ c .JSON (http .StatusInternalServerError , gin.H {"error" : "failed to check membership" })
236+ }
237+ return
238+ }
239+ if ! membership .IsApproved {
240+ c .JSON (http .StatusForbidden , gin.H {"error" : "membership approval required" })
241+ return
242+ }
243+
244+ var req models.RSVPRequest
245+ if err := c .ShouldBindJSON (& req ); err != nil {
246+ c .JSON (http .StatusBadRequest , gin.H {"error" : err .Error ()})
247+ return
248+ }
249+
250+ if err := h .validator .Struct (& req ); err != nil {
251+ c .JSON (http .StatusBadRequest , gin.H {"error" : err .Error ()})
252+ return
253+ }
254+
232255 err = h .eventService .RSVPToEvent (uint (eventID ), & models.EventRSVP {
233256 UserID : userID ,
234257 EventID : uint (eventID ),
0 commit comments