diff --git a/pkg/controllers/subscriptions.go b/pkg/controllers/subscriptions.go index eac96ad..60e7a49 100644 --- a/pkg/controllers/subscriptions.go +++ b/pkg/controllers/subscriptions.go @@ -17,7 +17,9 @@ func NewSubscriptionController(as *services.SubscriptionService, s *gin.RouterGr wc.SubscriptionService = as s.POST("", wc.New) + s.PUT("/:id", wc.Edit) s.GET("", wc.GetAll) + s.GET("/:id", wc.Get) return wc } @@ -33,6 +35,36 @@ func (wc *SubscriptionController) New(c *gin.Context) { c.JSON(200, wm) } +func (wc *SubscriptionController) Edit(c *gin.Context) { + body := new(models.SubscriptionEdit) + if err := c.ShouldBind(body); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + id := c.Param("id") + + wm := wc.SubscriptionService.Edit(c, body, id) + c.JSON(200, wm) +} + +func (wc *SubscriptionController) Get(c *gin.Context) { + body := new(models.Auth) + params := new(models.Params) + + auth := c.MustGet("auth") + body.Id = auth.(*models.Auth).Id + + id := c.Param("id") + + embed, _ := c.GetQuery("embed") + params.Embed = embed + + fr := wc.SubscriptionService.Get(c, body, id, params) + + c.JSON(200, fr) +} + func (wc *SubscriptionController) GetAll(c *gin.Context) { body := new(models.Auth) auth := c.MustGet("auth") diff --git a/pkg/models/models.go b/pkg/models/models.go index 96ff832..6b79356 100644 --- a/pkg/models/models.go +++ b/pkg/models/models.go @@ -4,11 +4,7 @@ import "github.com/gin-gonic/gin" type FilteredResponse struct { Items interface{} `json:"items"` - SortBy string `json:"sortBy"` - Embed string `json:"embed"` - Page int `json:"page"` - Rpp int `json:"rpp"` - TotalRecords int `json:"totalRecords"` + Params } type ResponseFunc func(*gin.Context) *[]interface{} @@ -16,3 +12,11 @@ type ResponseFunc func(*gin.Context) *[]interface{} type MessageResponse struct { Message string `json:"message"` } + +type Params struct { + SortBy string `json:"sortBy"` + Embed string `json:"embed"` + Page int `json:"page"` + Rpp int `json:"rpp"` + TotalRecords int `json:"totalRecords"` +} \ No newline at end of file diff --git a/pkg/models/subscriptions.go b/pkg/models/subscriptions.go index 5384216..3d7e856 100644 --- a/pkg/models/subscriptions.go +++ b/pkg/models/subscriptions.go @@ -23,6 +23,16 @@ type Subscription struct { Amount float32 `json:"amount", pg:"amount,default:0"` } +type SubscriptionEdit struct { + tableName struct{} `pg:"subscriptions,alias:subscriptions"` + Id string `json:"id" form:"id"` + Description string `json:"description" form:"description"` + EndDate time.Time `json:"endDate" form:"endDate" ` + HasEnd bool `json:"hasEnd" form:"hasEnd"` + WalletID string `json:"walletId" form:"walletId"` + Amount json.Number `json:"amount" form:"amount"` +} + type NewSubscriptionBody struct { WalletID string `json:"walletId" form:"walletId"` TransactionTypeID string `json:"transactionTypeId" form:"transactionTypeId"` @@ -60,7 +70,7 @@ func (cm *Subscription) HasNew() bool { } return false case "weekly": - lastDate := time.Now().AddDate(0, 0, -(7*cm.CustomRange)) + lastDate := time.Now().AddDate(0, 0, -(7 * cm.CustomRange)) if cm.LastTransactionDate.Before(lastDate) { return true } @@ -80,4 +90,4 @@ func (cm *Subscription) HasNew() bool { } } return true -} \ No newline at end of file +} diff --git a/pkg/services/subscriptions.go b/pkg/services/subscriptions.go index 8981c53..fcd930a 100644 --- a/pkg/services/subscriptions.go +++ b/pkg/services/subscriptions.go @@ -5,6 +5,7 @@ import ( "math" "time" "wallet-api/pkg/models" + "wallet-api/pkg/utl/common" "github.com/go-pg/pg/v10" ) @@ -47,6 +48,27 @@ func (as *SubscriptionService) New(ctx context.Context, body *models.NewSubscrip return tm } +func (as *SubscriptionService) Get(ctx context.Context, am *models.Auth, id string, params *models.Params) *models.Subscription { + db := as.Db.WithContext(ctx) + + wm := new(models.Subscription) + wm.Id = id + + tx, _ := db.Begin() + defer tx.Rollback() + + qry := tx.Model(wm) + common.GenerateEmbed(qry, params.Embed).WherePK().Select() + + if (*wm).HasNew() { + as.SubToTrans(wm, tx) + } + + tx.Commit() + + return wm +} + func (as *SubscriptionService) GetAll(ctx context.Context, am *models.Auth, walletId string, filtered *models.FilteredResponse) { db := as.Db.WithContext(ctx) @@ -69,6 +91,29 @@ func (as *SubscriptionService) GetAll(ctx context.Context, am *models.Auth, wall tx.Commit() } +func (as *SubscriptionService) Edit(ctx context.Context, body *models.SubscriptionEdit, id string) *models.Subscription { + db := as.Db.WithContext(ctx) + + amount, _ := body.Amount.Float64() + + tm := new(models.Subscription) + tm.Id = id + tm.EndDate = body.EndDate + tm.HasEnd = body.HasEnd + tm.Description = body.Description + tm.WalletID = body.WalletID + tm.Amount = float32(math.Round(amount*100) / 100) + + tx, _ := db.Begin() + defer tx.Rollback() + + tx.Model(tm).WherePK().UpdateNotZero() + + tx.Commit() + + return tm +} + func (as *SubscriptionService) SubToTrans(subModel *models.Subscription, tx *pg.Tx) { now := time.Now()