Fix linting errors in routes admin product (#656)

This commit is contained in:
Daniel Tiringer authored and GitHub committed 2021-10-25 20:01:43 +02:00
1 parent 623d5f2b6d
commit e97367d26e
15 files changed
+225 -371

No files matched your search

-1
View File
@@ -35,7 +35,6 @@
/packages/medusa/src/api/routes/admin/notes /packages/medusa/src/api/routes/admin/notes
/packages/medusa/src/api/routes/admin/notifications /packages/medusa/src/api/routes/admin/notifications
/packages/medusa/src/api/routes/admin/orders /packages/medusa/src/api/routes/admin/orders
/packages/medusa/src/api/routes/admin/products
/packages/medusa/src/api/routes/admin/regions /packages/medusa/src/api/routes/admin/regions
/packages/medusa/src/api/routes/admin/return-reasons /packages/medusa/src/api/routes/admin/return-reasons
/packages/medusa/src/api/routes/admin/returns /packages/medusa/src/api/routes/admin/returns
@@ -39,17 +39,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 productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService")
await productService.addOption(id, value.title) await productService.addOption(id, value.title)
const product = await productService.retrieve(id, { const product = await productService.retrieve(id, {
select: defaultFields, select: defaultFields,
relations: defaultRelations, relations: defaultRelations,
}) })
res.json({ product }) res.json({ product })
} catch (err) {
throw err
}
} }
@@ -188,9 +188,7 @@ export default async (req, res) => {
description: Validator.string().allow(""), description: Validator.string().allow(""),
is_giftcard: Validator.boolean().default(false), is_giftcard: Validator.boolean().default(false),
discountable: Validator.boolean().default(true), discountable: Validator.boolean().default(true),
images: Validator.array() images: Validator.array().items(Validator.string()).optional(),
.items(Validator.string())
.optional(),
thumbnail: Validator.string().optional(), thumbnail: Validator.string().optional(),
handle: Validator.string().optional(), handle: Validator.string().optional(),
status: Validator.string() status: Validator.string()
@@ -203,9 +201,7 @@ export default async (req, res) => {
}) })
.allow(null) .allow(null)
.optional(), .optional(),
collection_id: Validator.string() collection_id: Validator.string().allow(null).optional(),
.allow(null)
.optional(),
tags: Validator.array() tags: Validator.array()
.items({ .items({
id: Validator.string().optional(), id: Validator.string().optional(),
@@ -225,30 +221,13 @@ export default async (req, res) => {
inventory_quantity: Validator.number().default(0), inventory_quantity: Validator.number().default(0),
allow_backorder: Validator.boolean().optional(), allow_backorder: Validator.boolean().optional(),
manage_inventory: Validator.boolean().optional(), manage_inventory: Validator.boolean().optional(),
weight: Validator.number() weight: Validator.number().allow(null).optional(),
.allow(null) length: Validator.number().allow(null).optional(),
.optional(), height: Validator.number().allow(null).optional(),
length: Validator.number() width: Validator.number().allow(null).optional(),
.allow(null) origin_country: Validator.string().optional().allow("").allow(null),
.optional(), mid_code: Validator.string().optional().allow("").allow(null),
height: Validator.number() material: Validator.string().optional().allow("").allow(null),
.allow(null)
.optional(),
width: Validator.number()
.allow(null)
.optional(),
origin_country: Validator.string()
.optional()
.allow("")
.allow(null),
mid_code: Validator.string()
.optional()
.allow("")
.allow(null),
material: Validator.string()
.optional()
.allow("")
.allow(null),
metadata: Validator.object().optional(), metadata: Validator.object().optional(),
prices: Validator.array() prices: Validator.array()
.items( .items(
@@ -256,9 +235,7 @@ export default async (req, res) => {
.keys({ .keys({
region_id: Validator.string(), region_id: Validator.string(),
currency_code: Validator.string(), currency_code: Validator.string(),
amount: Validator.number() amount: Validator.number().integer().required(),
.integer()
.required(),
sale_amount: Validator.number().optional(), sale_amount: Validator.number().optional(),
}) })
.xor("region_id", "currency_code") .xor("region_id", "currency_code")
@@ -270,30 +247,14 @@ export default async (req, res) => {
}) })
.default([]), .default([]),
}), }),
weight: Validator.number() weight: Validator.number().allow(null).optional(),
.allow(null) length: Validator.number().allow(null).optional(),
.optional(), height: Validator.number().allow(null).optional(),
length: Validator.number() width: Validator.number().allow(null).optional(),
.allow(null) hs_code: Validator.string().optional().allow(""),
.optional(), origin_country: Validator.string().optional().allow(""),
height: Validator.number() mid_code: Validator.string().optional().allow(""),
.allow(null) material: Validator.string().optional().allow(""),
.optional(),
width: Validator.number()
.allow(null)
.optional(),
hs_code: Validator.string()
.optional()
.allow(""),
origin_country: Validator.string()
.optional()
.allow(""),
mid_code: Validator.string()
.optional()
.allow(""),
material: Validator.string()
.optional()
.allow(""),
metadata: Validator.object().optional(), metadata: Validator.object().optional(),
}) })
@@ -302,66 +263,64 @@ 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 productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService") const productVariantService = req.scope.resolve("productVariantService")
const productVariantService = req.scope.resolve("productVariantService") const shippingProfileService = req.scope.resolve("shippingProfileService")
const shippingProfileService = req.scope.resolve("shippingProfileService")
const entityManager = req.scope.resolve("manager") const entityManager = req.scope.resolve("manager")
let newProduct let newProduct
await entityManager.transaction(async manager => { await entityManager.transaction(async (manager) => {
const { variants } = value const { variants } = value
delete value.variants delete value.variants
if (!value.thumbnail && value.images && value.images.length) { if (!value.thumbnail && value.images && value.images.length) {
value.thumbnail = value.images[0] value.thumbnail = value.images[0]
}
let shippingProfile
// Get default shipping profile
if (value.is_giftcard) {
shippingProfile = await shippingProfileService.retrieveGiftCardDefault()
} else {
shippingProfile = await shippingProfileService.retrieveDefault()
}
newProduct = await productService
.withTransaction(manager)
.create({ ...value, profile_id: shippingProfile.id })
if (variants) {
for (const [i, variant] of variants.entries()) {
variant.variant_rank = i
} }
let shippingProfile const optionIds = value.options.map(
// Get default shipping profile (o) => newProduct.options.find((newO) => newO.title === o.title).id
if (value.is_giftcard) { )
shippingProfile = await shippingProfileService.retrieveGiftCardDefault()
} else {
shippingProfile = await shippingProfileService.retrieveDefault()
}
newProduct = await productService await Promise.all(
.withTransaction(manager) variants.map(async (v) => {
.create({ ...value, profile_id: shippingProfile.id }) const variant = {
...v,
options: v.options.map((o, index) => ({
...o,
option_id: optionIds[index],
})),
}
if (variants) { await productVariantService
for (const [i, variant] of variants.entries()) variant.variant_rank = i .withTransaction(manager)
.create(newProduct.id, variant)
})
)
}
})
const optionIds = value.options.map( const product = await productService.retrieve(newProduct.id, {
o => newProduct.options.find(newO => newO.title === o.title).id select: defaultFields,
) relations: defaultRelations,
})
await Promise.all( res.json({ product })
variants.map(async v => {
const variant = {
...v,
options: v.options.map((o, index) => ({
...o,
option_id: optionIds[index],
})),
}
await productVariantService
.withTransaction(manager)
.create(newProduct.id, variant)
})
)
}
})
const product = await productService.retrieve(newProduct.id, {
select: defaultFields,
relations: defaultRelations,
})
res.json({ product })
} catch (err) {
throw err
}
} }
@@ -115,18 +115,10 @@ export default async (req, res) => {
inventory_quantity: Validator.number().default(0), inventory_quantity: Validator.number().default(0),
allow_backorder: Validator.boolean().optional(), allow_backorder: Validator.boolean().optional(),
manage_inventory: Validator.boolean().optional(), manage_inventory: Validator.boolean().optional(),
weight: Validator.number() weight: Validator.number().allow(null).optional(),
.allow(null) length: Validator.number().allow(null).optional(),
.optional(), height: Validator.number().allow(null).optional(),
length: Validator.number() width: Validator.number().allow(null).optional(),
.allow(null)
.optional(),
height: Validator.number()
.allow(null)
.optional(),
width: Validator.number()
.allow(null)
.optional(),
origin_country: Validator.string().allow(""), origin_country: Validator.string().allow(""),
mid_code: Validator.string().allow(""), mid_code: Validator.string().allow(""),
material: Validator.string().allow(""), material: Validator.string().allow(""),
@@ -137,9 +129,7 @@ export default async (req, res) => {
.keys({ .keys({
region_id: Validator.string().empty(null), region_id: Validator.string().empty(null),
currency_code: Validator.string().required(), currency_code: Validator.string().required(),
amount: Validator.number() amount: Validator.number().integer().required(),
.integer()
.required(),
sale_amount: Validator.number().optional(), sale_amount: Validator.number().optional(),
}) })
.xor("region_id", "currency_code") .xor("region_id", "currency_code")
@@ -158,19 +148,15 @@ 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 productVariantService = req.scope.resolve("productVariantService")
const productVariantService = req.scope.resolve("productVariantService") const productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService")
await productVariantService.create(id, value) await productVariantService.create(id, value)
const product = await productService.retrieve(id, { const product = await productService.retrieve(id, {
select: defaultFields, select: defaultFields,
relations: defaultRelations, relations: defaultRelations,
}) })
res.json({ product }) res.json({ product })
} catch (err) {
throw err
}
} }
@@ -31,21 +31,17 @@ import { defaultRelations, defaultFields } from "."
export default async (req, res) => { export default async (req, res) => {
const { id, option_id } = req.params const { id, option_id } = req.params
try { const productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService") await productService.deleteOption(id, option_id)
await productService.deleteOption(id, option_id) const data = await productService.retrieve(id, {
const data = await productService.retrieve(id, { select: defaultFields,
select: defaultFields, relations: defaultRelations,
relations: defaultRelations, })
})
res.json({ res.json({
option_id, option_id,
object: "option", object: "option",
deleted: true, deleted: true,
product: data, product: data,
}) })
} catch (err) {
throw err
}
} }
@@ -26,15 +26,11 @@
export default async (req, res) => { export default async (req, res) => {
const { id } = req.params const { id } = req.params
try { const productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService") await productService.delete(id)
await productService.delete(id) res.json({
res.json({ id,
id, object: "product",
object: "product", deleted: true,
deleted: true, })
})
} catch (err) {
throw err
}
} }
@@ -29,24 +29,20 @@ import { defaultRelations, defaultFields } from "."
export default async (req, res) => { export default async (req, res) => {
const { id, variant_id } = req.params const { id, variant_id } = req.params
try { const productVariantService = req.scope.resolve("productVariantService")
const productVariantService = req.scope.resolve("productVariantService") const productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService")
await productVariantService.delete(variant_id) await productVariantService.delete(variant_id)
const data = await productService.retrieve(id, { const data = await productService.retrieve(id, {
select: defaultFields, select: defaultFields,
relations: defaultRelations, relations: defaultRelations,
}) })
res.json({ res.json({
variant_id, variant_id,
object: "product-variant", object: "product-variant",
deleted: true, deleted: true,
product: data, product: 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("/products", route) app.use("/products", route)
route.post("/", middlewares.wrap(require("./create-product").default)) route.post("/", middlewares.wrap(require("./create-product").default))
@@ -1,4 +1,3 @@
import _ from "lodash"
import { MedusaError, Validator } from "medusa-core-utils" import { MedusaError, Validator } from "medusa-core-utils"
import { defaultFields, defaultRelations, filterableFields } from "./" import { defaultFields, defaultRelations, filterableFields } from "./"
@@ -42,52 +41,48 @@ export default async (req, res) => {
) )
} }
try { const productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService")
const limit = parseInt(req.query.limit) || 50 const limit = parseInt(req.query.limit) || 50
const offset = parseInt(req.query.offset) || 0 const offset = parseInt(req.query.offset) || 0
const selector = {} const selector = {}
if ("q" in req.query) { if ("q" in req.query) {
selector.q = req.query.q selector.q = req.query.q
}
let includeFields = []
if ("fields" in req.query) {
includeFields = req.query.fields.split(",")
}
let expandFields = []
if ("expand" in req.query) {
expandFields = req.query.expand.split(",")
}
for (const k of filterableFields) {
if (k in value) {
selector[k] = value[k]
}
}
if (selector.status?.indexOf("null") > -1) {
selector.status.splice(selector.status.indexOf("null"), 1)
if (selector.status.length === 0) {
delete selector.status
}
}
const listConfig = {
select: includeFields.length ? includeFields : defaultFields,
relations: expandFields.length ? expandFields : defaultRelations,
skip: offset,
take: limit,
}
let products = await productService.list(selector, listConfig)
res.json({ products, count: products.length, offset, limit })
} catch (error) {
throw error
} }
let includeFields = []
if ("fields" in req.query) {
includeFields = req.query.fields.split(",")
}
let expandFields = []
if ("expand" in req.query) {
expandFields = req.query.expand.split(",")
}
for (const k of filterableFields) {
if (k in value) {
selector[k] = value[k]
}
}
if (selector.status?.indexOf("null") > -1) {
selector.status.splice(selector.status.indexOf("null"), 1)
if (selector.status.length === 0) {
delete selector.status
}
}
const listConfig = {
select: includeFields.length ? includeFields : defaultFields,
relations: expandFields.length ? expandFields : defaultRelations,
skip: offset,
take: limit,
}
const products = await productService.list(selector, listConfig)
res.json({ products, count: products.length, offset, limit })
} }
@@ -1,11 +1,7 @@
export default async (req, res) => { export default async (req, res) => {
try { const productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService")
const tags = await productService.listTagsByUsage() const tags = await productService.listTagsByUsage()
res.json({ tags }) res.json({ tags })
} catch (error) {
throw error
}
} }
@@ -18,13 +18,9 @@
* $ref: "#/components/schemas/product_type" * $ref: "#/components/schemas/product_type"
*/ */
export default async (req, res) => { export default async (req, res) => {
try { const productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService")
const types = await productService.listTypes() const types = await productService.listTypes()
res.json({ types }) res.json({ types })
} catch (error) {
throw error
}
} }
@@ -14,19 +14,15 @@ 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 productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService") await productService.update(id, {
await productService.update(id, { metadata: { [value.key]: value.value },
metadata: { [value.key]: value.value }, })
})
const product = await productService.retrieve(id, { const product = await productService.retrieve(id, {
select: defaultFields, select: defaultFields,
relations: defaultRelations, relations: defaultRelations,
}) })
res.status(200).json({ product }) res.status(200).json({ product })
} catch (err) {
throw err
}
} }
@@ -41,18 +41,14 @@ 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 productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService")
await productService.updateOption(id, option_id, value) await productService.updateOption(id, option_id, value)
const product = await productService.retrieve(id, { const product = await productService.retrieve(id, {
select: defaultFields, select: defaultFields,
relations: defaultRelations, relations: defaultRelations,
}) })
res.json({ product }) res.json({ product })
} catch (err) {
throw err
}
} }
@@ -188,9 +188,7 @@ export default async (req, res) => {
const schema = Validator.object().keys({ const schema = Validator.object().keys({
title: Validator.string().optional(), title: Validator.string().optional(),
subtitle: Validator.string() subtitle: Validator.string().optional().allow(null, ""),
.optional()
.allow(null, ""),
description: Validator.string().optional(), description: Validator.string().optional(),
discountable: Validator.boolean().optional(), discountable: Validator.boolean().optional(),
status: Validator.string().valid( status: Validator.string().valid(
@@ -206,9 +204,7 @@ export default async (req, res) => {
}) })
.allow(null) .allow(null)
.optional(), .optional(),
collection_id: Validator.string() collection_id: Validator.string().allow(null).optional(),
.allow(null)
.optional(),
tags: Validator.array() tags: Validator.array()
.items({ .items({
id: Validator.string().optional(), id: Validator.string().optional(),
@@ -216,26 +212,15 @@ export default async (req, res) => {
}) })
.optional(), .optional(),
handle: Validator.string().optional(), handle: Validator.string().optional(),
weight: Validator.number() weight: Validator.number().allow(null).optional(),
.allow(null) length: Validator.number().allow(null).optional(),
.optional(), height: Validator.number().allow(null).optional(),
length: Validator.number() width: Validator.number().allow(null).optional(),
.allow(null)
.optional(),
height: Validator.number()
.allow(null)
.optional(),
width: Validator.number()
.allow(null)
.optional(),
origin_country: Validator.string().allow(null, ""), origin_country: Validator.string().allow(null, ""),
hs_code: Validator.string().allow(null, ""), hs_code: Validator.string().allow(null, ""),
mid_code: Validator.string().allow(null, ""), mid_code: Validator.string().allow(null, ""),
material: Validator.string().allow(null, ""), material: Validator.string().allow(null, ""),
images: Validator.array() images: Validator.array().items(Validator.string()).optional().optional(),
.items(Validator.string())
.optional()
.optional(),
thumbnail: Validator.string().optional(), thumbnail: Validator.string().optional(),
variants: Validator.array() variants: Validator.array()
.items({ .items({
@@ -249,9 +234,7 @@ export default async (req, res) => {
.keys({ .keys({
region_id: Validator.string(), region_id: Validator.string(),
currency_code: Validator.string(), currency_code: Validator.string(),
amount: Validator.number() amount: Validator.number().integer().required(),
.integer()
.required(),
sale_amount: Validator.number().optional(), sale_amount: Validator.number().optional(),
}) })
.xor("region_id", "currency_code") .xor("region_id", "currency_code")
@@ -266,21 +249,11 @@ export default async (req, res) => {
inventory_quantity: Validator.number().allow(null), inventory_quantity: Validator.number().allow(null),
allow_backorder: Validator.boolean().allow(null), allow_backorder: Validator.boolean().allow(null),
manage_inventory: Validator.boolean().allow(null), manage_inventory: Validator.boolean().allow(null),
weight: Validator.number() weight: Validator.number().allow(null).optional(),
.allow(null) length: Validator.number().allow(null).optional(),
.optional(), height: Validator.number().allow(null).optional(),
length: Validator.number() width: Validator.number().allow(null).optional(),
.allow(null) hs_code: Validator.string().optional().allow(null, ""),
.optional(),
height: Validator.number()
.allow(null)
.optional(),
width: Validator.number()
.allow(null)
.optional(),
hs_code: Validator.string()
.optional()
.allow(null, ""),
origin_country: Validator.string().allow(null, ""), origin_country: Validator.string().allow(null, ""),
mid_code: Validator.string().allow(null, ""), mid_code: Validator.string().allow(null, ""),
material: Validator.string().allow(null, ""), material: Validator.string().allow(null, ""),
@@ -295,21 +268,17 @@ 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 productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService") const entityManager = req.scope.resolve("manager")
const entityManager = req.scope.resolve("manager")
await entityManager.transaction(async manager => { await entityManager.transaction(async (manager) => {
await productService.withTransaction(manager).update(id, value) await productService.withTransaction(manager).update(id, value)
}) })
const product = await productService.retrieve(id, { const product = await productService.retrieve(id, {
select: defaultFields, select: defaultFields,
relations: defaultRelations, relations: defaultRelations,
}) })
res.json({ product }) res.json({ product })
} catch (err) {
throw err
}
} }
@@ -1,4 +1,3 @@
import _ from "lodash"
import { MedusaError, Validator } from "medusa-core-utils" import { MedusaError, Validator } from "medusa-core-utils"
import { defaultFields, defaultRelations } from "./" import { defaultFields, defaultRelations } from "./"
@@ -116,9 +115,7 @@ export default async (req, res) => {
.keys({ .keys({
region_id: Validator.string().empty(null), region_id: Validator.string().empty(null),
currency_code: Validator.string(), currency_code: Validator.string(),
amount: Validator.number() amount: Validator.number().integer().required(),
.integer()
.required(),
sale_amount: Validator.number().optional(), sale_amount: Validator.number().optional(),
}) })
.xor("region_id", "currency_code") .xor("region_id", "currency_code")
@@ -133,30 +130,14 @@ export default async (req, res) => {
inventory_quantity: Validator.number().optional(), inventory_quantity: Validator.number().optional(),
allow_backorder: Validator.boolean().optional(), allow_backorder: Validator.boolean().optional(),
manage_inventory: Validator.boolean().optional(), manage_inventory: Validator.boolean().optional(),
weight: Validator.number() weight: Validator.number().allow(null).optional(),
.allow(null) length: Validator.number().allow(null).optional(),
.optional(), height: Validator.number().allow(null).optional(),
length: Validator.number() width: Validator.number().allow(null).optional(),
.allow(null) hs_code: Validator.string().optional().allow(null, ""),
.optional(), origin_country: Validator.string().optional().allow(null, ""),
height: Validator.number() mid_code: Validator.string().optional().allow(null, ""),
.allow(null) material: Validator.string().optional().allow(null, ""),
.optional(),
width: Validator.number()
.allow(null)
.optional(),
hs_code: Validator.string()
.optional()
.allow(null, ""),
origin_country: Validator.string()
.optional()
.allow(null, ""),
mid_code: Validator.string()
.optional()
.allow(null, ""),
material: Validator.string()
.optional()
.allow(null, ""),
metadata: Validator.object().optional(), metadata: Validator.object().optional(),
}) })
@@ -165,18 +146,15 @@ 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 productService = req.scope.resolve("productService")
const productService = req.scope.resolve("productService") const productVariantService = req.scope.resolve("productVariantService")
const productVariantService = req.scope.resolve("productVariantService")
await productVariantService.update(variant_id, value) await productVariantService.update(variant_id, value)
const product = await productService.retrieve(id, { const product = await productService.retrieve(id, {
select: defaultFields, select: defaultFields,
relations: defaultRelations, relations: defaultRelations,
}) })
res.json({ product })
} catch (err) { res.json({ product })
throw err
}
} }