@@ -148,7 +148,8 @@ defmodule Msg.Calendar.Events do
148148 @ spec get ( Req.Request . t ( ) , String . t ( ) , keyword ( ) ) :: { :ok , map ( ) } | { :error , term ( ) }
149149 def get ( client , event_id , opts ) do
150150 base_path = build_base_path ( opts )
151- path = "#{ base_path } /#{ event_id } "
151+ encoded_event_id = URI . encode ( event_id , & URI . char_unreserved? / 1 )
152+ path = "#{ base_path } /#{ encoded_event_id } "
152153
153154 query_params = [ ]
154155
@@ -273,7 +274,8 @@ defmodule Msg.Calendar.Events do
273274 { :ok , map ( ) } | { :error , term ( ) }
274275 def update ( client , event_id , updates , opts ) do
275276 base_path = build_base_path ( opts )
276- path = "#{ base_path } /#{ event_id } "
277+ encoded_event_id = URI . encode ( event_id , & URI . char_unreserved? / 1 )
278+ path = "#{ base_path } /#{ encoded_event_id } "
277279 updates_converted = Request . convert_keys ( updates )
278280
279281 case Req . patch ( client , url: path , json: updates_converted ) do
@@ -315,7 +317,8 @@ defmodule Msg.Calendar.Events do
315317 @ spec delete ( Req.Request . t ( ) , String . t ( ) , keyword ( ) ) :: :ok | { :error , term ( ) }
316318 def delete ( client , event_id , opts ) do
317319 base_path = build_base_path ( opts )
318- path = "#{ base_path } /#{ event_id } "
320+ encoded_event_id = URI . encode ( event_id , & URI . char_unreserved? / 1 )
321+ path = "#{ base_path } /#{ encoded_event_id } "
319322
320323 case Req . delete ( client , url: path ) do
321324 { :ok , % { status: 204 } } ->
@@ -431,12 +434,25 @@ defmodule Msg.Calendar.Events do
431434 { :ok , map ( ) } | { :error , term ( ) }
432435 def get_with_extensions ( client , event_id , extension_id , opts ) do
433436 base_path = build_base_path ( opts )
434- resource_path = "#{ base_path } /#{ event_id } "
437+ encoded_event_id = URI . encode ( event_id , & URI . char_unreserved? / 1 )
438+ resource_path = "#{ base_path } /#{ encoded_event_id } "
435439
436- # Get event and specific extension
437- with { :ok , event } <- get ( client , event_id , opts ) ,
438- { :ok , extension } <- Request . get ( client , "#{ resource_path } /extensions/#{ extension_id } " ) do
439- { :ok , Map . put ( event , "extensions" , [ extension ] ) }
440+ # Get event first
441+ # Note: get/3 already encodes event_id, so we pass the original
442+ with { :ok , event } <- get ( client , event_id , opts ) do
443+ # Try to get the extension, but return event without it if not found
444+ case Request . get ( client , "#{ resource_path } /extensions/#{ extension_id } " ) do
445+ { :ok , extension } ->
446+ { :ok , Map . put ( event , "extensions" , [ extension ] ) }
447+
448+ { :error , % { status: 404 } } ->
449+ # Extension not found, return event without extensions
450+ { :ok , Map . put ( event , "extensions" , [ ] ) }
451+
452+ { :error , reason } ->
453+ # Other errors should still propagate
454+ { :error , reason }
455+ end
440456 end
441457 end
442458
0 commit comments