/
discount-rule.go
115 lines (105 loc) · 3.24 KB
/
discount-rule.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package models
import (
"database/sql/driver"
"github.com/driver005/gateway/core"
)
type DiscountRuleType string
const (
DiscountRuleFixed DiscountRuleType = "fixed"
DiscountRulePersentage DiscountRuleType = "percentage"
DiscountRuleFreeShipping DiscountRuleType = "free_shipping"
)
func (pl *DiscountRuleType) Scan(value interface{}) error {
*pl = DiscountRuleType(value.([]byte))
return nil
}
func (pl DiscountRuleType) Value() (driver.Value, error) {
return string(pl), nil
}
type AllocationType string
const (
AllocationTotal AllocationType = "total"
AllocationItem AllocationType = "item"
)
// @oas:schema:DiscountRule
// title: "Discount Rule"
// description: "A discount rule defines how a Discount is calculated when applied to a Cart."
// type: object
// required:
// - allocation
// - created_at
// - deleted_at
// - description
// - id
// - metadata
// - type
// - updated_at
// - value
//
// properties:
//
// id:
// description: The discount rule's ID
// type: string
// example: dru_01F0YESMVK96HVX7N419E3CJ7C
// type:
// description: >-
// The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers.
// type: string
// enum:
// - fixed
// - percentage
// - free_shipping
// example: percentage
// description:
// description: A short description of the discount
// nullable: true
// type: string
// example: 10 Percent
// value:
// description: The value that the discount represents; this will depend on the type of the discount
// type: integer
// example: 10
// allocation:
// description: The scope that the discount should apply to.
// nullable: true
// type: string
// enum:
// - total
// - item
// example: total
// conditions:
// description: The details of the discount conditions associated with the rule. They can be used to limit when the discount can be used.
// type: array
// x-expandable: "conditions"
// items:
// $ref: "#/components/schemas/DiscountCondition"
// created_at:
// description: The date with timezone at which the resource was created.
// type: string
// format: date-time
// updated_at:
// description: The date with timezone at which the resource was updated.
// type: string
// format: date-time
// deleted_at:
// description: The date with timezone at which the resource was deleted.
// nullable: true
// type: string
// format: date-time
// metadata:
// description: An optional key-value map with additional details
// nullable: true
// type: object
// example: {car: "white"}
// externalDocs:
// description: "Learn about the metadata attribute, and how to delete and update it."
// url: "https://docs.medusajs.com/development/entities/overview#metadata-attribute"
type DiscountRule struct {
core.SoftDeletableModel
Type DiscountRuleType `json:"type" gorm:"column:type"`
Description string `json:"description" gorm:"column:description"`
Value float64 `json:"value" gorm:"column:value"`
Allocation AllocationType `json:"allocation" gorm:"column:allocation"`
Conditions []DiscountCondition `json:"conditions" gorm:"foreignKey:Id"`
}