changes after review

This commit is contained in:
Pavel 2024-02-22 12:18:24 +03:00
parent fd8c986e22
commit 84e83b66dc
4 changed files with 77 additions and 12 deletions

@ -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 {