diff --git a/server/app.js b/server/app.js index 29421b9..e572e39 100644 --- a/server/app.js +++ b/server/app.js @@ -21,9 +21,11 @@ app.use(express.json()); // app.use(express.urlencoded()); router.get('/products', productsController.allProducts) +router.get('/product/schema', productsController.getProductSchema) router.get('/product/:slug', productsController.productBySlug) router.post('/product', productsController.addNewProduct) +router.get('/variation/schema', variationsController.getVariationSchema) router.post('/variation/:id', variationsController.addNewVariationToProduct); router.post('/applepay/validateSession', applePayController.validateSession) diff --git a/server/controllers/product.js b/server/controllers/product.js index b2d8ca7..4993f61 100644 --- a/server/controllers/product.js +++ b/server/controllers/product.js @@ -46,8 +46,14 @@ const addNewProduct = (req, res) => { .then(resp => res.send(resp)) } +const getProductSchema = (req, res) => { + return products.productSchema() + .then(schema => res.json(schema)) +} + module.exports = { allProducts, productBySlug, - addNewProduct + addNewProduct, + getProductSchema }; diff --git a/server/controllers/variation.js b/server/controllers/variation.js index 66013bc..aac68a7 100644 --- a/server/controllers/variation.js +++ b/server/controllers/variation.js @@ -1,4 +1,4 @@ -const { saveNewVariation } = require('src/variation.js') +const { saveNewVariation, variationSchema } = require('src/variation.js') const Products = require('src/products'); const products = new Products(); @@ -35,6 +35,13 @@ const addNewVariationToProduct = async (req, res) => { .catch(err => handleError(err, res)) } + +const getVariationSchema = (req, res) => { + return variationSchema() + .then(schema => res.json(schema)) +} + module.exports = { - addNewVariationToProduct + addNewVariationToProduct, + getVariationSchema }; diff --git a/server/src/products.js b/server/src/products.js index 7d34c77..652f105 100644 --- a/server/src/products.js +++ b/server/src/products.js @@ -1,5 +1,6 @@ const Product = require('schemas/Product'); -const { slugify } = require('src/utils'); +const Variation = require('schemas/Variation'); +const { slugify, nulledSchema } = require('src/utils'); class Products { constructor() { @@ -29,6 +30,13 @@ class Products { return Product.find().populate('variations'); } + productSchema() { + const product = { ...Product.schema.obj }; + const productSchema = nulledSchema(product); + + return Promise.resolve(productSchema); + } + getBySlug(slug) { return Product.findOne({ urlSlug: slug }).populate('variations'); } diff --git a/server/src/utils.js b/server/src/utils.js index c26da73..b550a9a 100644 --- a/server/src/utils.js +++ b/server/src/utils.js @@ -14,6 +14,12 @@ const slugify = (string) => { .replace(/-+$/, '') // Trim - from end of text } +const nulledSchema = schema => Object.keys(schema).reduce((accumulator, current) => { + accumulator[current] = ""; + return accumulator; +}, {}); + module.exports = { - slugify + slugify, + nulledSchema } diff --git a/server/src/variation.js b/server/src/variation.js index c8e095d..b2206dd 100644 --- a/server/src/variation.js +++ b/server/src/variation.js @@ -1,4 +1,5 @@ const Variation = require('schemas/Variation'); +const { nulledSchema } = require('src/utils'); const updateVariation = () => { return @@ -17,6 +18,15 @@ const saveNewVariation = async (variation) => { return newVariation; } -module.exports = { - saveNewVariation +const variationSchema = () => { + const variation = { ...Variation.schema.obj }; + const variationSchema = nulledSchema(variation); + + return Promise.resolve(variationSchema); +} + + +module.exports = { + saveNewVariation, + variationSchema }