@@ -22,44 +22,6 @@ func NewDiscordHandler(discordService *services.DiscordService, logger zerolog.L
2222 }
2323}
2424
25- // GetUserEventRoleByDiscordID
26- //
27- // @Summary Get user event role by Discord ID
28- // @Description Get the event role for a user based on their Discord account ID
29- // @Tags Discord
30- // @Param discord_id path string true "Discord account ID"
31- // @Success 200 {object} map[string]interface{} "event_id and role"
32- // @Failure 404 {object} response.ErrorResponse "User or role not found"
33- // @Failure 500 {object} response.ErrorResponse "Internal server error"
34- // @Router /discord/user/{discord_id}/role [get]
35-
36- func (h * DiscordHandler ) GetUserEventRoleByDiscordID (w http.ResponseWriter , r * http.Request ) {
37- discordID := chi .URLParam (r , "discord_id" )
38- if discordID == "" {
39- res .SendError (w , http .StatusBadRequest , res .NewError ("bad_request" , "discord_id is required" ))
40- return
41- }
42-
43- eventID , role , err := h .discordService .GetUserEventRoleByDiscordID (r .Context (), discordID )
44- if err != nil {
45- if err == services .ErrDiscordAccountNotFound || err == services .ErrNoEventRole {
46- res .SendError (w , http .StatusNotFound , res .NewError ("not_found" , err .Error ()))
47- return
48- }
49- h .logger .Err (err ).Msg ("failed to get user event role" )
50- res .SendError (w , http .StatusInternalServerError , res .NewError ("internal_error" , "Failed to get user role" ))
51- return
52- }
53-
54- response := map [string ]interface {}{
55- "event_id" : eventID ,
56- "role" : role ,
57- }
58-
59- w .Header ().Set ("Content-Type" , "application/json" )
60- json .NewEncoder (w ).Encode (response )
61- }
62-
6325// GetEventAttendeesWithDiscord
6426//
6527// @Summary Get event attendees with Discord IDs
@@ -96,4 +58,54 @@ func (h *DiscordHandler) GetEventAttendeesWithDiscord(w http.ResponseWriter, r *
9658 res .SendError (w , http .StatusInternalServerError , res .NewError ("internal_error" , "Failed to encode response" ))
9759 return
9860 }
61+ }
62+
63+ // GetUserEventRoleByDiscordIDAndEventId
64+ //
65+ // @Summary Get user event role by Discord ID and Event ID
66+ // @Description Get the event role for a user based on their Discord account ID and a specific event ID
67+ // @Tags Discord
68+ // @Param eventId path string true "Event ID (UUID)"
69+ // @Param discordId path string true "Discord account ID"
70+ // @Success 200 {object} map[string]interface{} "role"
71+ // @Failure 400 {object} response.ErrorResponse "Invalid event ID or discord ID"
72+ // @Failure 404 {object} response.ErrorResponse "User or role not found"
73+ // @Failure 500 {object} response.ErrorResponse "Internal server error"
74+ // @Router /events/{eventId}/discord/{discordId} [get]
75+ func (h * DiscordHandler ) GetUserEventRoleByDiscordIDAndEventId (w http.ResponseWriter , r * http.Request ) {
76+ eventIDStr := chi .URLParam (r , "eventId" )
77+ if eventIDStr == "" {
78+ res .SendError (w , http .StatusBadRequest , res .NewError ("bad_request" , "eventId is required" ))
79+ return
80+ }
81+
82+ eventID , err := uuid .Parse (eventIDStr )
83+ if err != nil {
84+ res .SendError (w , http .StatusBadRequest , res .NewError ("bad_request" , "invalid event ID format" ))
85+ return
86+ }
87+
88+ discordID := chi .URLParam (r , "discordId" )
89+ if discordID == "" {
90+ res .SendError (w , http .StatusBadRequest , res .NewError ("bad_request" , "discordId is required" ))
91+ return
92+ }
93+
94+ role , err := h .discordService .GetUserEventRoleByDiscordIDAndEventId (r .Context (), discordID , eventID )
95+ if err != nil {
96+ if err == services .ErrNoEventRole {
97+ res .SendError (w , http .StatusNotFound , res .NewError ("not_found" , err .Error ()))
98+ return
99+ }
100+ h .logger .Err (err ).Msg ("failed to get user event role" )
101+ res .SendError (w , http .StatusInternalServerError , res .NewError ("internal_error" , "Failed to get user role" ))
102+ return
103+ }
104+
105+ response := map [string ]interface {}{
106+ "role" : role ,
107+ }
108+
109+ w .Header ().Set ("Content-Type" , "application/json" )
110+ json .NewEncoder (w ).Encode (response )
99111}
0 commit comments