@@ -179,16 +179,11 @@ func mainMenuHandler(b *gotgbot.Bot, ctx *ext.Context) error {
179179func showPriceagentDetail (b * gotgbot.Bot , ctx * ext.Context ) error {
180180 cb := ctx .Update .CallbackQuery
181181
182- menu , parseErr := models . NewMenu ( cb . Data )
182+ menu , priceagent , parseErr := parseMenuPriceagent ( ctx )
183183 if parseErr != nil {
184184 return fmt .Errorf ("showPriceagentDetail: failed to parse callback data: %w" , parseErr )
185185 }
186186
187- priceagent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , menu .PriceAgentID )
188- if dbErr != nil {
189- return fmt .Errorf ("showPriceagentDetail: failed to get priceagent from database: %w" , dbErr )
190- }
191-
192187 var backCallbackData string
193188 switch {
194189 case priceagent .Entity .Type == geizhals .Wishlist :
@@ -225,19 +220,19 @@ func showPriceagentDetail(b *gotgbot.Bot, ctx *ext.Context) error {
225220 case "00" :
226221 _ , err := cb .Message .EditText (b , editedText , & gotgbot.EditMessageTextOpts {ReplyMarkup : markup , ParseMode : "HTML" })
227222 if err != nil {
228- return fmt .Errorf ("showPriceagent : failed to edit message text: %w" , err )
223+ return fmt .Errorf ("showPriceagentDetail : failed to edit message text: %w" , err )
229224 }
230225 case "01" :
231226 bot .DeleteMessage (ctx .EffectiveChat .Id , cb .Message .MessageId )
232227
233228 _ , err := b .SendMessage (ctx .EffectiveChat .Id , editedText , & gotgbot.SendMessageOpts {ReplyMarkup : markup , ParseMode : "HTML" })
234229 if err != nil {
235- return fmt .Errorf ("showPriceagent : failed to send new message: %w" , err )
230+ return fmt .Errorf ("showPriceagentDetail : failed to send new message: %w" , err )
236231 }
237232 case "02" :
238233 _ , err := b .SendMessage (ctx .EffectiveChat .Id , editedText , & gotgbot.SendMessageOpts {ReplyMarkup : markup , ParseMode : "HTML" })
239234 if err != nil {
240- return fmt .Errorf ("showPriceagent : failed to send new message: %w" , err )
235+ return fmt .Errorf ("showPriceagentDetail : failed to send new message: %w" , err )
241236 }
242237 }
243238 return nil
@@ -248,14 +243,9 @@ func showPriceagentDetail(b *gotgbot.Bot, ctx *ext.Context) error {
248243func changePriceagentSettingsHandler (b * gotgbot.Bot , ctx * ext.Context ) error {
249244 cb := ctx .Update .CallbackQuery
250245
251- priceagentID , parseErr := parseIDFromCallbackData ( cb . Data , "m04_00_" )
246+ _ , priceagent , parseErr := parseMenuPriceagent ( ctx )
252247 if parseErr != nil {
253- return fmt .Errorf ("changePriceagentSettingsHandler: failed to parse priceagentID from callback data: %w" , parseErr )
254- }
255-
256- priceagent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , priceagentID )
257- if dbErr != nil {
258- return fmt .Errorf ("setNotifPriceagentHandler: failed to get priceagent from database: %w" , dbErr )
248+ return fmt .Errorf ("changePriceagentSettingsHandler: failed to parse callback data: %w" , parseErr )
259249 }
260250
261251 if _ , err := cb .Answer (b , & gotgbot.AnswerCallbackQueryOpts {}); err != nil {
@@ -286,14 +276,9 @@ func changePriceagentSettingsHandler(b *gotgbot.Bot, ctx *ext.Context) error {
286276func deletePriceagentConfirmationHandler (b * gotgbot.Bot , ctx * ext.Context ) error {
287277 cb := ctx .Update .CallbackQuery
288278
289- priceagentID , parseErr := parseIDFromCallbackData ( cb . Data , "m04_98_" )
279+ _ , priceagent , parseErr := parseMenuPriceagent ( ctx )
290280 if parseErr != nil {
291- return fmt .Errorf ("deletePriceagentConfirmationHandler: failed to parse priceagentID from callback data: %w" , parseErr )
292- }
293-
294- priceagent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , priceagentID )
295- if dbErr != nil {
296- return fmt .Errorf ("deletePriceagentConfirmationHandler: failed to get priceagent from database: %w" , dbErr )
281+ return fmt .Errorf ("deletePriceagentConfirmationHandler: failed to parse callback data: %w" , parseErr )
297282 }
298283
299284 if _ , err := cb .Answer (b , & gotgbot.AnswerCallbackQueryOpts {}); err != nil {
@@ -326,15 +311,10 @@ func deletePriceagentHandler(b *gotgbot.Bot, ctx *ext.Context) error {
326311 }
327312
328313 // Get Priceagent from DB
329- priceagentID , parseErr := parseIDFromCallbackData ( cb . Data , "m04_99_" )
314+ _ , priceagent , parseErr := parseMenuPriceagent ( ctx )
330315 if parseErr != nil {
331- return fmt .Errorf ("deletePriceagentHandler: failed to parse priceagentID from callback data: %w" , parseErr )
332- }
333-
334- priceagent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , priceagentID )
335- if dbErr != nil {
336316 ctx .EffectiveMessage .Reply (b , "Der Preisagent existiert nicht mehr, vielleicht wurde er schon gelöscht?" , & gotgbot.SendMessageOpts {})
337- return fmt .Errorf ("deletePriceagentHandler: failed to get priceagent from database : %w" , dbErr )
317+ return fmt .Errorf ("deletePriceagentHandler: failed to parse callback data : %w" , parseErr )
338318 }
339319
340320 deleteErr := database .DeletePriceAgentForUser (priceagent )
@@ -347,7 +327,7 @@ func deletePriceagentHandler(b *gotgbot.Bot, ctx *ext.Context) error {
347327
348328 _ , err := cb .Message .EditText (b , editText , & gotgbot.EditMessageTextOpts {ParseMode : "HTML" , DisableWebPagePreview : true })
349329 if err != nil {
350- return fmt .Errorf ("deletePriceagent : failed to edit message text: %w" , err )
330+ return fmt .Errorf ("deletePriceagentHandler : failed to edit message text: %w" , err )
351331 }
352332 return nil
353333}
@@ -515,3 +495,17 @@ func Start(botConfig config.Config) {
515495
516496 updater .Idle ()
517497}
498+
499+ func parseMenuPriceagent (ctx * ext.Context ) (models.Menu , models.PriceAgent , error ) {
500+ menu , parseMenuErr := models .NewMenu (ctx .CallbackQuery .Data )
501+ if parseMenuErr != nil {
502+ return models.Menu {}, models.PriceAgent {}, fmt .Errorf ("invalid callback data: %s" , ctx .CallbackQuery .Data )
503+ }
504+
505+ priceAgent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , menu .PriceAgentID )
506+ if dbErr != nil {
507+ return models.Menu {}, models.PriceAgent {}, fmt .Errorf ("invalid callback data: %s" , ctx .CallbackQuery .Data )
508+ }
509+
510+ return * menu , priceAgent , nil
511+ }
0 commit comments