Merge pull request #677 from RonaldoCaetano/fix-discounts

Fix discounts
This commit is contained in:
Sebastian Rindom
2021-10-26 12:00:06 +02:00
committed by GitHub
14 changed files with 109 additions and 193 deletions
-1
View File
@@ -27,7 +27,6 @@
/packages/medusa/src/api/routes/admin/auth /packages/medusa/src/api/routes/admin/auth
/packages/medusa/src/api/routes/admin/collections /packages/medusa/src/api/routes/admin/collections
/packages/medusa/src/api/routes/admin/customers /packages/medusa/src/api/routes/admin/customers
/packages/medusa/src/api/routes/admin/discounts
/packages/medusa/src/api/routes/admin/draft-orders /packages/medusa/src/api/routes/admin/draft-orders
/packages/medusa/src/api/routes/admin/notes /packages/medusa/src/api/routes/admin/notes
/packages/medusa/src/api/routes/admin/orders /packages/medusa/src/api/routes/admin/orders
@@ -22,18 +22,13 @@ import { defaultFields, defaultRelations } from "./"
*/ */
export default async (req, res) => { export default async (req, res) => {
const { discount_id, region_id } = req.params const { discount_id, region_id } = req.params
try { const discountService = req.scope.resolve("discountService")
const discountService = req.scope.resolve("discountService") await discountService.addRegion(discount_id, region_id)
await discountService.addRegion(discount_id, region_id) const discount = await discountService.retrieve(discount_id, {
select: defaultFields,
relations: defaultRelations,
})
const discount = await discountService.retrieve(discount_id, { res.status(200).json({ discount })
select: defaultFields,
relations: defaultRelations,
})
res.status(200).json({ discount })
} catch (err) {
throw err
}
} }
@@ -22,19 +22,13 @@ import { defaultFields, defaultRelations } from "./"
*/ */
export default async (req, res) => { export default async (req, res) => {
const { discount_id, variant_id } = req.params const { discount_id, variant_id } = req.params
const discountService = req.scope.resolve("discountService")
await discountService.addValidProduct(discount_id, variant_id)
try { const discount = await discountService.retrieve(discount_id, {
const discountService = req.scope.resolve("discountService") select: defaultFields,
relations: defaultRelations,
})
await discountService.addValidProduct(discount_id, variant_id) res.status(200).json({ discount })
const discount = await discountService.retrieve(discount_id, {
select: defaultFields,
relations: defaultRelations,
})
res.status(200).json({ discount })
} catch (err) {
throw err
}
} }
@@ -63,47 +63,29 @@ export default async (req, res) => {
.keys({ .keys({
description: Validator.string().optional(), description: Validator.string().optional(),
type: Validator.string().required(), type: Validator.string().required(),
value: Validator.number() value: Validator.number().positive().required(),
.positive()
.required(),
allocation: Validator.string().required(), allocation: Validator.string().required(),
valid_for: Validator.array().items(Validator.string()), valid_for: Validator.array().items(Validator.string()),
}) })
.required(), .required(),
is_disabled: Validator.boolean().default(false), is_disabled: Validator.boolean().default(false),
starts_at: Validator.date().optional(), starts_at: Validator.date().optional(),
ends_at: Validator.date() ends_at: Validator.date().greater(Validator.ref("starts_at")).optional(),
.greater(Validator.ref("starts_at")) valid_duration: Validator.string().isoDuration().allow(null).optional(),
.optional(), usage_limit: Validator.number().positive().optional(),
valid_duration: Validator.string() regions: Validator.array().items(Validator.string()).optional(),
.isoDuration()
.allow(null)
.optional(),
usage_limit: Validator.number()
.positive()
.optional(),
regions: Validator.array()
.items(Validator.string())
.optional(),
metadata: Validator.object().optional(), metadata: Validator.object().optional(),
}) })
const { value, error } = schema.validate(req.body) const { value, error } = schema.validate(req.body)
if (error) { if (error) {
throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details)
} }
try { const discountService = req.scope.resolve("discountService")
const discountService = req.scope.resolve("discountService") const created = await discountService.create(value)
const discount = await discountService.retrieve(created.id, defaultRelations)
const created = await discountService.create(value) res.status(200).json({ discount })
const discount = await discountService.retrieve(
created.id,
defaultRelations
)
res.status(200).json({ discount })
} catch (err) {
throw err
}
} }
@@ -31,20 +31,17 @@ export default async (req, res) => {
}) })
const { value, error } = schema.validate(req.body) const { value, error } = schema.validate(req.body)
if (error) { if (error) {
throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details)
} }
try { const discountService = req.scope.resolve("discountService")
const discountService = req.scope.resolve("discountService") const created = await discountService.createDynamicCode(discount_id, value)
const created = await discountService.createDynamicCode(discount_id, value)
const discount = await discountService.retrieve(created.id, { const discount = await discountService.retrieve(created.id, {
relations: ["rule", "rule.valid_for", "regions"], relations: ["rule", "rule.valid_for", "regions"],
}) })
res.status(200).json({ discount }) res.status(200).json({ discount })
} catch (err) {
throw err
}
} }
@@ -25,17 +25,12 @@
*/ */
export default async (req, res) => { export default async (req, res) => {
const { discount_id } = req.params const { discount_id } = req.params
const discountService = req.scope.resolve("discountService")
await discountService.delete(discount_id)
try { res.json({
const discountService = req.scope.resolve("discountService") id: discount_id,
await discountService.delete(discount_id) object: "discount",
deleted: true,
res.json({ })
id: discount_id,
object: "discount",
deleted: true,
})
} catch (err) {
throw err
}
} }
@@ -20,17 +20,12 @@
*/ */
export default async (req, res) => { export default async (req, res) => {
const { discount_id, code } = req.params const { discount_id, code } = req.params
const discountService = req.scope.resolve("discountService")
await discountService.deleteDynamicCode(discount_id, code)
try { const discount = await discountService.retrieve(discount_id, {
const discountService = req.scope.resolve("discountService") relations: ["rule", "rule.valid_for", "regions"],
await discountService.deleteDynamicCode(discount_id, code) })
const discount = await discountService.retrieve(discount_id, { res.status(200).json({ discount })
relations: ["rule", "rule.valid_for", "regions"],
})
res.status(200).json({ discount })
} catch (err) {
throw err
}
} }
@@ -1,4 +1,4 @@
import { defaultFields, defaultRelations } from "./" import { defaultRelations } from "./"
/** /**
* @oas [get] /discounts/code/{code} * @oas [get] /discounts/code/{code}
@@ -21,15 +21,8 @@ import { defaultFields, defaultRelations } from "./"
*/ */
export default async (req, res) => { export default async (req, res) => {
const { code } = req.params const { code } = req.params
try { const discountService = req.scope.resolve("discountService")
const discountService = req.scope.resolve("discountService") const discount = await discountService.retrieveByCode(code, defaultRelations)
const discount = await discountService.retrieveByCode(
code,
defaultRelations
)
res.status(200).json({ discount }) res.status(200).json({ discount })
} catch (err) {
throw err
}
} }
@@ -21,15 +21,11 @@ import { defaultFields, defaultRelations } from "./"
*/ */
export default async (req, res) => { export default async (req, res) => {
const { discount_id } = req.params const { discount_id } = req.params
try { const discountService = req.scope.resolve("discountService")
const discountService = req.scope.resolve("discountService") const data = await discountService.retrieve(discount_id, {
const data = await discountService.retrieve(discount_id, { select: defaultFields,
select: defaultFields, relations: defaultRelations,
relations: defaultRelations, })
})
res.status(200).json({ discount: data }) res.status(200).json({ discount: data })
} catch (err) {
throw err
}
} }
@@ -3,7 +3,7 @@ import middlewares from "../../../middlewares"
const route = Router() const route = Router()
export default app => { export default (app) => {
app.use("/discounts", route) app.use("/discounts", route)
route.get("/", middlewares.wrap(require("./list-discounts").default)) route.get("/", middlewares.wrap(require("./list-discounts").default))
@@ -18,41 +18,35 @@ import { defaultFields, defaultRelations } from "./"
* $ref: "#/components/schemas/discount" * $ref: "#/components/schemas/discount"
*/ */
export default async (req, res) => { export default async (req, res) => {
try { const discountService = req.scope.resolve("discountService")
const discountService = req.scope.resolve("discountService") const limit = parseInt(req.query.limit) || 20
const offset = parseInt(req.query.offset) || 0
const selector = {}
const limit = parseInt(req.query.limit) || 20 if ("q" in req.query) {
const offset = parseInt(req.query.offset) || 0 selector.q = req.query.q
let selector = {}
if ("q" in req.query) {
selector.q = req.query.q
}
if ("is_dynamic" in req.query) {
selector.is_dynamic = req.query.is_dynamic === "true"
}
if ("is_disabled" in req.query) {
selector.is_disabled = req.query.is_disabled === "true"
}
const listConfig = {
select: defaultFields,
relations: defaultRelations,
skip: offset,
take: limit,
order: { created_at: "DESC" },
}
const [discounts, count] = await discountService.listAndCount(
selector,
listConfig
)
res.status(200).json({ discounts, count, offset, limit })
} catch (err) {
throw err
} }
if ("is_dynamic" in req.query) {
selector.is_dynamic = req.query.is_dynamic === "true"
}
if ("is_disabled" in req.query) {
selector.is_disabled = req.query.is_disabled === "true"
}
const listConfig = {
select: defaultFields,
relations: defaultRelations,
skip: offset,
take: limit,
order: { created_at: "DESC" },
}
const [discounts, count] = await discountService.listAndCount(
selector,
listConfig
)
res.status(200).json({ discounts, count, offset, limit })
} }
@@ -22,18 +22,13 @@ import { defaultFields, defaultRelations } from "./"
*/ */
export default async (req, res) => { export default async (req, res) => {
const { discount_id, region_id } = req.params const { discount_id, region_id } = req.params
const discountService = req.scope.resolve("discountService")
await discountService.removeRegion(discount_id, region_id)
try { const discount = await discountService.retrieve(discount_id, {
const discountService = req.scope.resolve("discountService") select: defaultFields,
relations: defaultRelations,
})
await discountService.removeRegion(discount_id, region_id) res.status(200).json({ discount })
const discount = await discountService.retrieve(discount_id, {
select: defaultFields,
relations: defaultRelations,
})
res.status(200).json({ discount })
} catch (err) {
throw err
}
} }
@@ -22,19 +22,13 @@ import { defaultFields, defaultRelations } from "./"
*/ */
export default async (req, res) => { export default async (req, res) => {
const { discount_id, variant_id } = req.params const { discount_id, variant_id } = req.params
const discountService = req.scope.resolve("discountService")
await discountService.removeValidProduct(discount_id, variant_id)
try { const discount = await discountService.retrieve(discount_id, {
const discountService = req.scope.resolve("discountService") select: defaultFields,
relations: defaultRelations,
})
await discountService.removeValidProduct(discount_id, variant_id) res.status(200).json({ discount })
const discount = await discountService.retrieve(discount_id, {
select: defaultFields,
relations: defaultRelations,
})
res.status(200).json({ discount })
} catch (err) {
throw err
}
} }
@@ -70,20 +70,12 @@ export default async (req, res) => {
starts_at: Validator.date().optional(), starts_at: Validator.date().optional(),
ends_at: Validator.when("starts_at", { ends_at: Validator.when("starts_at", {
not: undefined, not: undefined,
then: Validator.date() then: Validator.date().greater(Validator.ref("starts_at")).optional(),
.greater(Validator.ref("starts_at"))
.optional(),
otherwise: Validator.date().optional(), otherwise: Validator.date().optional(),
}), }),
valid_duration: Validator.string() valid_duration: Validator.string().isoDuration().allow(null).optional(),
.isoDuration().allow(null) usage_limit: Validator.number().positive().optional(),
.optional(), regions: Validator.array().items(Validator.string()).optional(),
usage_limit: Validator.number()
.positive()
.optional(),
regions: Validator.array()
.items(Validator.string())
.optional(),
}) })
const { value, error } = schema.validate(req.body) const { value, error } = schema.validate(req.body)
@@ -92,18 +84,13 @@ export default async (req, res) => {
throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details)
} }
try { const discountService = req.scope.resolve("discountService")
const discountService = req.scope.resolve("discountService") await discountService.update(discount_id, value)
await discountService.update(discount_id, value) const discount = await discountService.retrieve(discount_id, {
select: defaultFields,
relations: defaultRelations,
})
const discount = await discountService.retrieve(discount_id, { res.status(200).json({ discount })
select: defaultFields,
relations: defaultRelations,
})
res.status(200).json({ discount })
} catch (err) {
throw err
}
} }