@@ -46,7 +46,7 @@ func (h *UserHandler) RegisterRoutes(router fiber.Router, middlewares ...fiber.H
4646 router .Put ("/v1/users/:userID/notifications" , h .computeRoute (middlewares , h .UpdateNotifications )... )
4747 router .Get ("/v1/users/subscription-update-url" , h .computeRoute (middlewares , h .subscriptionUpdateURL )... )
4848 router .Delete ("/v1/users/subscription" , h .computeRoute (middlewares , h .cancelSubscription )... )
49- router .Get ("/v1/users/subscription/invoices " , h .computeRoute (middlewares , h .subscriptionPayments )... )
49+ router .Get ("/v1/users/subscription/payments " , h .computeRoute (middlewares , h .subscriptionPayments )... )
5050 router .Post ("/v1/users/subscription/invoices/:subscriptionInvoiceID" , h .computeRoute (middlewares , h .subscriptionInvoice )... )
5151}
5252
@@ -161,11 +161,9 @@ func (h *UserHandler) Delete(c *fiber.Ctx) error {
161161// @Failure 500 {object} responses.InternalServerError
162162// @Router /users/{userID}/notifications [put]
163163func (h * UserHandler ) UpdateNotifications (c * fiber.Ctx ) error {
164- ctx , span := h .tracer .StartFromFiberCtx ( c )
164+ ctx , span , ctxLogger := h .tracer .StartFromFiberCtxWithLogger ( c , h . logger )
165165 defer span .End ()
166166
167- ctxLogger := h .tracer .CtxLogger (h .logger , span )
168-
169167 var request requests.UserNotificationUpdate
170168 if err := c .BodyParser (& request ); err != nil {
171169 msg := fmt .Sprintf ("cannot marshall params [%s] into %T" , c .OriginalURL (), request )
@@ -303,12 +301,13 @@ func (h *UserHandler) subscriptionPayments(c *fiber.Ctx) error {
303301}
304302
305303// subscriptionInvoice generates an invoice for a given subscription invoice ID
306- // @Summary Generate a subscription invoice
304+ // @Summary Generate a subscription payment invoice
307305// @Description Generates a new invoice PDF file for the given subscription payment with given parameters.
308306// @Security ApiKeyAuth
309307// @Tags Users
310308// @Accept json
311309// @Produce application/pdf
310+ // @Param payload body requests.UserPaymentInvoice true "Generate subscription payment invoice parameters"
312311// @Success 200 {file} file
313312// @Failure 400 {object} responses.BadRequest
314313// @Failure 401 {object} responses.Unauthorized
@@ -319,17 +318,29 @@ func (h *UserHandler) subscriptionInvoice(c *fiber.Ctx) error {
319318 ctx , span , ctxLogger := h .tracer .StartFromFiberCtxWithLogger (c , h .logger )
320319 defer span .End ()
321320
322- invoiceID := c .Params ("subscriptionInvoiceID" )
321+ var request requests.UserPaymentInvoice
322+ if err := c .BodyParser (& request ); err != nil {
323+ msg := fmt .Sprintf ("cannot marshall params [%s] into %T" , c .Body (), request )
324+ ctxLogger .Warn (stacktrace .Propagate (err , msg ))
325+ return h .responseBadRequest (c , err )
326+ }
327+
328+ request .SubscriptionInvoiceID = c .Params ("subscriptionInvoiceID" )
329+ if errors := h .validator .ValidatePaymentInvoice (ctx , h .userIDFomContext (c ), request .Sanitize ()); len (errors ) != 0 {
330+ msg := fmt .Sprintf ("validation errors [%s], while validating subscription payment invoice request [%s]" , spew .Sdump (errors ), c .Body ())
331+ ctxLogger .Warn (stacktrace .NewError (msg ))
332+ return h .responseUnprocessableEntity (c , errors , "validation errors while generating payment invoice" )
333+ }
323334
324- data , err := h .service .GenerateReceipt (ctx , h .userIDFomContext (c ))
335+ data , err := h .service .GenerateReceipt (ctx , request . UserInvoiceGenerateParams ( h .userIDFomContext (c ) ))
325336 if err != nil {
326- msg := fmt .Sprintf ("cannot generate receipt for invoice ID [%s] and user [%s]" , invoiceID , h .userFromContext (c ))
337+ msg := fmt .Sprintf ("cannot generate receipt for invoice ID [%s] and user [%s]" , request . SubscriptionInvoiceID , h .userFromContext (c ))
327338 ctxLogger .Error (stacktrace .Propagate (err , msg ))
328339 return h .responseInternalServerError (c )
329340 }
330341
331342 c .Set (fiber .HeaderContentType , "application/pdf" )
332- c .Set (fiber .HeaderContentDisposition , fmt .Sprintf ("attachment; filename=\" %s.pdf\" " , invoiceID ))
343+ c .Set (fiber .HeaderContentDisposition , fmt .Sprintf ("attachment; filename=\" httpsms.com - %s.pdf\" " , request . SubscriptionInvoiceID ))
333344
334345 return c .SendStream (data )
335346}
0 commit comments