diff options
Diffstat (limited to 'invoice/controller.go')
-rw-r--r-- | invoice/controller.go | 229 |
1 files changed, 22 insertions, 207 deletions
diff --git a/invoice/controller.go b/invoice/controller.go index ad6df3e..b03ec22 100644 --- a/invoice/controller.go +++ b/invoice/controller.go @@ -32,17 +32,7 @@ func handleGetSingleInvoice (ctx *gin.Context) { return } - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - var invoice Invoice - err = getInvoice(&invoice, uint(id)) if err != nil { ctx.Error(err) @@ -50,85 +40,36 @@ func handleGetSingleInvoice (ctx *gin.Context) { return } - if invoice.UserID != userId { - ctx.Error(e.ErrForbidden) - ctx.Abort() - return - } - ctx.JSON(http.StatusOK, gin.H{ - "message": "success", "data": invoice, }) } -func handleGetInvoices (ctx *gin.Context) { - var invoices []Invoice - - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - - err := getInvoices(&invoices, userId, false) - if err != nil { - ctx.Error(err) - ctx.Abort() - return - } - - ctx.JSON(http.StatusOK, gin.H{ - "message": "success", - "data": invoices, - }) -} - -func handleGetDrafts (ctx *gin.Context) { - var invoices []Invoice - - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } +func handleGetInvoices(getDrafts bool) func(*gin.Context) { + return func(ctx *gin.Context) { + var invoices []Invoice - userId := uId.(uint) + err := getInvoices(&invoices, getDrafts) + if err != nil { + ctx.Error(err) + ctx.Abort() + return + } - err := getInvoices(&invoices, userId, true) - if err != nil { - ctx.Error(err) - ctx.Abort() - return + ctx.JSON(http.StatusOK, gin.H{ + "data": invoices, + }) } - - ctx.JSON(http.StatusOK, gin.H{ - "message": "success", - "data": invoices, - }) } func handleSaveInvoice (ctx *gin.Context) { var invoice Invoice ctx.Bind(&invoice) - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - invoice.UserID = userId - // if invoice number is 0, generate one! + // (maybe the client didn't give us one) if invoice.InvoiceNumber == 0 { - n, err := getNewInvoiceNumber(invoice.UserID) + n, err := getNewInvoiceNumber() if err != nil { ctx.Error(err) @@ -147,12 +88,12 @@ func handleSaveInvoice (ctx *gin.Context) { } ctx.JSON(http.StatusOK, gin.H{ - "message": "success", "data": invoice, }) } func handleDelInvoice (ctx *gin.Context) { + // TODO: only drafts can be deleted, non-drafts should be "cancelled" id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) if err != nil { ctx.Error(e.ErrInvalidID) @@ -163,23 +104,6 @@ func handleDelInvoice (ctx *gin.Context) { var invoice Invoice invoice.ID = uint(id) - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - invoice.UserID = userId - - err = checkInvoiceOwnership(invoice.ID, invoice.UserID) - if err != nil { - ctx.Error(err) - ctx.Abort() - return - } - err = invoice.del() if err != nil { ctx.Error(err) @@ -187,9 +111,7 @@ func handleDelInvoice (ctx *gin.Context) { return } - ctx.JSON(http.StatusOK, gin.H{ - "message": "success", - }) + ctx.JSON(http.StatusOK, nil) } // get items belonging to a certain invoice @@ -201,22 +123,6 @@ func handleGetInvoiceItems (ctx *gin.Context) { return } - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - - err = checkInvoiceOwnership(uint(id), userId) - if err != nil { - ctx.Error(err) - ctx.Abort() - return - } - var items []InvoiceItem err = getInvoiceItems(&items, uint(id)) if err != nil { @@ -226,12 +132,12 @@ func handleGetInvoiceItems (ctx *gin.Context) { } ctx.JSON(http.StatusOK, gin.H{ - "message": "success", "data": items, }) } func addItem (ctx *gin.Context) { + // TODO: only drafts can be edited id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) if err != nil { ctx.Error(e.ErrInvalidID) @@ -239,27 +145,11 @@ func addItem (ctx *gin.Context) { return } - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - var item InvoiceItem ctx.Bind(&item) item.InvoiceID = uint(id) - err = checkInvoiceOwnership(item.InvoiceID, userId) - if err != nil { - ctx.Error(err) - ctx.Abort() - return - } - err = item.upsert() if err != nil { ctx.Error(err) @@ -267,13 +157,11 @@ func addItem (ctx *gin.Context) { return } - ctx.JSON(http.StatusOK, gin.H{ - "message": "success", - "data": item, - }) + ctx.JSON(http.StatusOK, nil) } func removeItem (ctx *gin.Context) { + // TODO: only drafts can be edited id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) if err != nil { ctx.Error(e.ErrInvalidID) @@ -281,27 +169,9 @@ func removeItem (ctx *gin.Context) { return } - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - var item InvoiceItem item.ID = uint(id) - invoiceId, err := getItemInvoice(item.ID, userId) - if err != nil { - ctx.Error(err) - ctx.Abort() - return - } - - item.InvoiceID = invoiceId - err = item.del() if err != nil { ctx.Error(err) @@ -309,10 +179,7 @@ func removeItem (ctx *gin.Context) { return } - ctx.JSON(http.StatusOK, gin.H{ - "message": "success", - "data": item, - }) + ctx.JSON(http.StatusOK, nil) } // get custom fields belonging to a certain invoice @@ -324,22 +191,6 @@ func handleGetInvoiceCustomFields (ctx *gin.Context) { return } - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - - err = checkInvoiceOwnership(uint(id), userId) - if err != nil { - ctx.Error(err) - ctx.Abort() - return - } - var cf []CustomField err = getInvoiceCustomFields(&cf, uint(id)) if err != nil { @@ -349,12 +200,12 @@ func handleGetInvoiceCustomFields (ctx *gin.Context) { } ctx.JSON(http.StatusOK, gin.H{ - "message": "success", "data": cf, }) } func addCustomField (ctx *gin.Context) { + // TODO: only drafts can be edited id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) if err != nil { ctx.Error(e.ErrInvalidID) @@ -362,27 +213,10 @@ func addCustomField (ctx *gin.Context) { return } - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - var cf CustomField ctx.Bind(&cf) - cf.InvoiceID = uint(id) - err = checkInvoiceOwnership(cf.InvoiceID, userId) - if err != nil { - ctx.Error(err) - ctx.Abort() - return - } - err = cf.upsert() if err != nil { ctx.Error(err) @@ -391,12 +225,12 @@ func addCustomField (ctx *gin.Context) { } ctx.JSON(http.StatusOK, gin.H{ - "message": "success", "data": cf, }) } func removeCustomField (ctx *gin.Context) { + // TODO: only drafts can be edited id, err := strconv.ParseUint(ctx.Param("id"), 10, 64) if err != nil { ctx.Error(e.ErrInvalidID) @@ -404,27 +238,9 @@ func removeCustomField (ctx *gin.Context) { return } - uId, ok := ctx.Get("UserID") - if !ok { - ctx.Error(e.ErrUnauthorized) - ctx.Abort() - return - } - - userId := uId.(uint) - var cf CustomField cf.ID = uint(id) - invoiceId, err := getCustomFieldInvoice(cf.ID, userId) - if err != nil { - ctx.Error(err) - ctx.Abort() - return - } - - cf.InvoiceID = invoiceId - err = cf.del() if err != nil { ctx.Error(err) @@ -433,7 +249,6 @@ func removeCustomField (ctx *gin.Context) { } ctx.JSON(http.StatusOK, gin.H{ - "message": "success", "data": cf, }) } |