Server setup with mongodb.

Server handles creating and fetching products and their variations.
Models are saved to mongo using mongoose.
STILL PRETTY BARE BONES!
This commit is contained in:
2020-07-18 21:48:45 +02:00
parent 7078d994c0
commit 0dd3944fd2
10 changed files with 231 additions and 2 deletions

37
server/src/products.js Normal file
View File

@@ -0,0 +1,37 @@
const Product = require('schemas/Product');
const { slugify } = require('src/utils');
class Products {
constructor() {
}
async addVariationToProduct(variation, id) {
return Product.findById(id)
.then(product => {
product.variations.push(variation);
return product.save();
})
}
async saveNewProduct(product) {
const newProduct = new Product({
name: product.name,
description: product.description,
urlSlug: slugify(product.name),
image: product.image
})
return newProduct.save();
}
allProducts() {
return Product.find().populate('variations');
}
getById(id) {
return Product.findById(id).populate('variations');
}
}
module.exports = Products;

19
server/src/utils.js Normal file
View File

@@ -0,0 +1,19 @@
const slugify = (string) => {
const a = 'àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;'
const b = 'aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------'
const p = new RegExp(a.split('').join('|'), 'g')
return string.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters
.replace(/&/g, '-and-') // Replace & with 'and'
.replace(/[^\w\-]+/g, '') // Remove all non-word characters
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, '') // Trim - from end of text
}
module.exports = {
slugify
}

22
server/src/variation.js Normal file
View File

@@ -0,0 +1,22 @@
const Variation = require('schemas/Variation');
const updateVariation = () => {
return
}
const saveNewVariation = async (variation) => {
const newVariation = new Variation({
size: variation.size,
description: variation.description,
stock: variation.stock || 0,
price: variation.price,
discount: null
})
await newVariation.save();
return newVariation;
}
module.exports = {
saveNewVariation
}