changes after review
This commit is contained in:
parent
fd8c986e22
commit
84e83b66dc
@ -324,6 +324,31 @@ components:
|
||||
delete:
|
||||
type: boolean
|
||||
description: Флаг удаления промокода
|
||||
bonus:
|
||||
type: object
|
||||
properties:
|
||||
privilege:
|
||||
type: object
|
||||
properties:
|
||||
privilegeID:
|
||||
type: string
|
||||
description: Идентификатор привилегии, которую необходимо предоставить
|
||||
amount:
|
||||
type: integer
|
||||
format: uint64
|
||||
description: Размер привилегии
|
||||
discount:
|
||||
type: object
|
||||
properties:
|
||||
layer:
|
||||
type: integer
|
||||
factor:
|
||||
type: number
|
||||
target:
|
||||
type: string
|
||||
threshold:
|
||||
type: integer
|
||||
description: Информация о бонусах
|
||||
required:
|
||||
- id
|
||||
GetPromoCodesListReq:
|
||||
@ -331,7 +356,6 @@ components:
|
||||
required:
|
||||
- page
|
||||
- limit
|
||||
- filter
|
||||
properties:
|
||||
page:
|
||||
type: integer
|
||||
|
@ -77,9 +77,8 @@ func (p *PromoCodeController) GetList(c *fiber.Ctx) error {
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error"})
|
||||
}
|
||||
|
||||
resp := models.GetPromoCodesListResp{
|
||||
return c.Status(fiber.StatusOK).JSON(models.GetPromoCodesListResp{
|
||||
Count: count,
|
||||
Items: promoCodes,
|
||||
}
|
||||
return c.Status(fiber.StatusOK).JSON(resp)
|
||||
})
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ type PromoCode struct {
|
||||
}
|
||||
|
||||
type ReqEditPromoCode struct {
|
||||
ID string `json:"id" bson:"_id"` //айдишник промокода, который обновляем
|
||||
ID string `json:"id" bson:"_id"` // айдишник промокода, который обновляем
|
||||
Description *string `json:"description,omitempty" bson:"description"` // описание, необходимое менеджеру в админке
|
||||
Greetings *string `json:"greetings,omitempty" bson:"greetings"` // текст, выдаваемый пользователю в ответ на активацию промокода
|
||||
|
||||
@ -39,6 +39,20 @@ type ReqEditPromoCode struct {
|
||||
ActivationCount *int64 `json:"activationCount,omitempty" bson:"activationCount"` // предел количества активаций промокода
|
||||
|
||||
Delete *bool `json:"delete,omitempty" bson:"delete"`
|
||||
|
||||
Bonus *struct {
|
||||
Privilege *struct {
|
||||
PrivilegeID string `json:"privilegeID,omitempty" bson:"privilegeID"`
|
||||
Amount uint64 `json:"amount,omitempty" bson:"amount"`
|
||||
} `json:"privilege,omitempty" bson:"privilege"`
|
||||
|
||||
Discount *struct {
|
||||
Layer int `json:"layer,omitempty" bson:"layer"`
|
||||
Factor float64 `json:"factor,omitempty" bson:"factor"`
|
||||
Target string `json:"target,omitempty" bson:"target"`
|
||||
Threshold int64 `json:"threshold,omitempty" bson:"threshold"`
|
||||
} `json:"discount,omitempty" bson:"discount"`
|
||||
} `json:"bonus,omitempty" bson:"bonus"`
|
||||
}
|
||||
|
||||
type GetPromoCodesListReqFilter struct {
|
||||
|
@ -99,21 +99,49 @@ func (r *PromoCodeRepository) EditPromoCode(ctx context.Context, req *models.Req
|
||||
updateFields["delete"] = *req.Delete
|
||||
}
|
||||
|
||||
if req.Bonus != nil {
|
||||
if req.Bonus.Privilege != nil {
|
||||
if req.Bonus.Privilege.PrivilegeID != "" {
|
||||
updateFields["bonus.privilege.privilegeID"] = req.Bonus.Privilege.PrivilegeID
|
||||
}
|
||||
if req.Bonus.Privilege.Amount != 0 {
|
||||
updateFields["bonus.privilege.amount"] = req.Bonus.Privilege.Amount
|
||||
}
|
||||
}
|
||||
if req.Bonus.Discount != nil {
|
||||
if req.Bonus.Discount.Layer != 0 {
|
||||
updateFields["bonus.discount.layer"] = req.Bonus.Discount.Layer
|
||||
}
|
||||
if req.Bonus.Discount.Factor != 0.0 {
|
||||
updateFields["bonus.discount.factor"] = req.Bonus.Discount.Factor
|
||||
}
|
||||
if req.Bonus.Discount.Target != "" {
|
||||
updateFields["bonus.discount.target"] = req.Bonus.Discount.Target
|
||||
}
|
||||
if req.Bonus.Discount.Threshold != 0 {
|
||||
updateFields["bonus.discount.threshold"] = req.Bonus.Discount.Threshold
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(updateFields) == 0 {
|
||||
return r.GetPromoCodeByID(ctx, promoCodeID)
|
||||
}
|
||||
|
||||
update := bson.M{"$set": updateFields}
|
||||
result, err := r.mdb.UpdateOne(ctx, bson.M{"_id": promoCodeID}, update)
|
||||
options := options.FindOneAndUpdate().SetReturnDocument(options.After)
|
||||
result := r.mdb.FindOneAndUpdate(ctx, bson.M{"_id": promoCodeID}, update, options)
|
||||
if result.Err() != nil {
|
||||
return nil, result.Err()
|
||||
}
|
||||
|
||||
var updatedPromoCode models.PromoCode
|
||||
err = result.Decode(&updatedPromoCode)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if result.MatchedCount == 0 {
|
||||
return nil, ErrPromoCodeNotFound
|
||||
}
|
||||
|
||||
return r.GetPromoCodeByID(ctx, promoCodeID)
|
||||
return &updatedPromoCode, nil
|
||||
}
|
||||
|
||||
func (r *PromoCodeRepository) GetPromoCodeByID(ctx context.Context, promoCodeID primitive.ObjectID) (*models.PromoCode, error) {
|
||||
@ -164,7 +192,7 @@ func (r *PromoCodeRepository) GetPromoCodesList(ctx context.Context, req *models
|
||||
}
|
||||
defer cursor.Close(ctx)
|
||||
|
||||
var promoCodes = make([]models.PromoCode, 0)
|
||||
var promoCodes = make([]models.PromoCode, 0, 10)
|
||||
for cursor.Next(ctx) {
|
||||
var p models.PromoCode
|
||||
if err := cursor.Decode(&p); err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user