Skip to content

Commit

Permalink
New Version Code
Browse files Browse the repository at this point in the history
  • Loading branch information
ElonMusk2002 committed Jun 29, 2023
1 parent bac291b commit 267bcc5
Show file tree
Hide file tree
Showing 28 changed files with 663 additions and 198 deletions.
21 changes: 0 additions & 21 deletions LICENSE

This file was deleted.

39 changes: 39 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Editor-specific files
.DS_Store
.vscode/

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Build output
/dist/

# Node dependencies
node_modules/

# dotenv environment configurations
.env
.env.test
.env*.local

# Caching files
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
*.sublime-workspace

# Grunt and Bower package manager
.grunt
bower_components/

# npm and yarn cache
.npm/
.yarn/

# ESLint cache
.eslintcache

# Stylelint cache
.stylelintcache
5 changes: 4 additions & 1 deletion backend/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const cors = require('cors');
const app = express();
const config = require('config');
const PORT = config.get('port') || 3000;
const { typeText } = require('rewive');

app.use(express.static('public'));
app.use(express.urlencoded({ extended: true }))
Expand All @@ -12,4 +13,6 @@ app.use(cors());

app.use('/', require('./product/router'));

app.listen(PORT, () => console.log(`Back-end has been started! http://localhost:${PORT}`));
app.listen(PORT, () => {
typeText(10, PORT)
});
14 changes: 14 additions & 0 deletions backend/models/Cart.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const mongoose = require('./db');

const cartItemSchema = new mongoose.Schema({
prodname: { type: String },
price: { type: Number },
description: { type: String },
image: { type: String },
quantityInStock: { type: Number },
quantityInCart: { type: Number }
});

const CartItem = mongoose.model('CartItem', cartItemSchema);

module.exports = CartItem;
20 changes: 20 additions & 0 deletions backend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@
"express-validator": "^6.15.0",
"faker": "^5.5.3",
"gradient-string": "^2.0.2",
"js-image-generator": "^1.0.4",
"jsonwebtoken": "^9.0.0",
"mongodb": "^5.1.0",
"mongoose": "^7.0.3",
"pm2": "^5.3.0",
"rewive": "^1.0.0",
"swagger-ui-express": "^4.6.2",
"uuid": "^7.0.3"
},
Expand Down
108 changes: 97 additions & 11 deletions backend/product/controller.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,86 @@
const express = require('express');
const Product = require('../models/Product');
const faker = require('faker');
const CartItem = require('../models/Cart');

module.exports.getCart = async (req, res) => {
try {
const cart = await CartItem.find();
res.status(200).json(cart);
} catch (err) {
console.log(err);
res.status(500).json({ error: err.message });
}
}

module.exports.addToCart = async (req, res) => {
try {
const { productId, quantity } = req.body;

// Найти товар по ID
const product = await Product.findById(productId);

// Проверить, есть ли товар уже в корзине
const existingCartItem = await CartItem.findOne({ prodname: product.prodname });

if (existingCartItem) {
// Обновить количество товара в корзине
existingCartItem.quantityInCart += quantity;
await existingCartItem.save();
res.status(200).json({ message: 'Product quantity updated' });
} else {
// Создать новый элемент корзины
const cartItem = new CartItem({
prodname: product.prodname,
price: product.price,
description: product.description,
image: product.image,
quantityInStock: product.quantityInStock,
quantityInCart: quantity
});

// Сохранить элемент корзины
await cartItem.save();

res.status(201).json({ message: 'Product added to cart' });
}
} catch (err) {
console.log(err);
res.status(500).json({ error: err.message });
}
}

module.exports.removeFromCart = async (req, res) => {
try {
const { id } = req.params;

// Найти элемент корзины по ID и удалить его
await CartItem.findByIdAndDelete(id);

res.status(200).json({ message: 'Product removed from cart' });
} catch (err) {
console.log(err);
res.status(500).json({ error: err.message });
}
}

module.exports.clearCart = async (req, res) => {
try {
// Очистить корзину
await CartItem.deleteMany({});

res.status(200).json({ message: 'Cart cleared' });
} catch (err) {
console.log(err);
res.status(500).json({ error: err.message });
}
}


module.exports.createProduct = async (req, res) => {
try {
const { prodname, subprodname, price, description, quantityInStock, reviews } = req.body;

const newProduct = new Product({
prodname: prodname || faker.commerce.product(),
subprodname: subprodname || faker.commerce.productName(),
Expand Down Expand Up @@ -39,11 +114,11 @@ module.exports.createProduct = async (req, res) => {
price: faker.commerce.price(),
description: faker.commerce.productDescription(),
image: faker.image.fashion(),
quantityInStock: faker.datatype.number({min: 0, max: 100}),
reviews: Array.from({length: faker.datatype.number({min: 0, max: 10})}, () => ({
quantityInStock: faker.datatype.number({ min: 0, max: 100 }),
reviews: Array.from({ length: faker.datatype.number({ min: 0, max: 10 }) }, () => ({
avatar: faker.image.avatar(),
nickname: faker.internet.userName(),
stars: faker.datatype.number({min: 1, max: 5}),
stars: faker.datatype.number({ min: 1, max: 5 }),
text: faker.lorem.sentences(),
image: faker.datatype.boolean ? faker.image.image() : undefined
}))
Expand All @@ -53,7 +128,7 @@ module.exports.createProduct = async (req, res) => {
res.status(201).json(newProduct);
} catch (err) {
console.log(err);
res.status(500).json({error: err.message});
res.status(500).json({ error: err.message });
}
}

Expand All @@ -64,7 +139,7 @@ module.exports.readProduct = async (req, res) => {
res.status(200).json(products);
} catch (err) {
console.log(err);
res.status(500).json({error: err.message});
res.status(500).json({ error: err.message });
}
}

Expand All @@ -75,27 +150,38 @@ module.exports.updateProduct = async (req, res) => {
res.status(200).json(updatedProduct);
} catch (err) {
console.log(err);
res.status(500).json({error: err.message});
res.status(500).json({ error: err.message });
}
}

module.exports.deleteProduct = async (req, res) => {
try {
const { id } = req.params;
await Product.findByIdAndDelete(id);
res.status(200).json({message: "Success"});
res.status(200).json({ message: "Success" });
} catch (err) {
console.log(err);
res.status(500).json({error: err.message});
res.status(500).json({ error: err.message });
}
}

module.exports.deleteAllProducts = async (req, res) => {
try {
await Product.deleteMany({});
res.status(200).json({message: "Success"});
res.status(200).json({ message: "Success" });
} catch (err) {
console.log(err);
res.status(500).json({error: err.message});
res.status(500).json({ error: err.message });
}
}

module.exports.getCartItem = async (req, res) => {
try {
const cartItems = await CartItem.find();
const totalQuantity = cartItems.reduce((total, item) => total + item.quantityInCart, 0);
res.status(200).json({ totalQuantity });
} catch (err) {
console.log(err);
res.status(500).json({ error: err.message });
}
}
16 changes: 11 additions & 5 deletions backend/product/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@ const express = require('express');
const router = express.Router();
const controller = require('./controller');

router.post('/api/product/', controller.createProduct); //добавить новый продукт (товар)
router.get('/api/product/', controller.readProduct); //запросить все существующие продукты (товары)
router.put('/api/product/:id', controller.updateProduct); //обновить информацию о продукте (товаре)
router.delete('/api/product/', controller.deleteAllProducts); //удалить все продукты (товары) из БД
router.delete('/api/product/:id', controller.deleteProduct); //удалить конкретный продукт (товар) из БД по ID
router.post('/api/product/', controller.createProduct);
router.get('/api/product/', controller.readProduct);
router.put('/api/product/:id', controller.updateProduct);
router.delete('/api/product/', controller.deleteAllProducts);
router.delete('/api/product/:id', controller.deleteProduct);

router.post('/api/cart/', controller.addToCart);
router.get('/api/cart/', controller.getCart);
router.get('/api/cart/item', controller.getCartItem);
router.delete('/api/cart/:id', controller.removeFromCart);
router.delete('/api/cart/', controller.clearCart);

module.exports = router;
39 changes: 39 additions & 0 deletions frontend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Editor-specific files
.DS_Store
.vscode/

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Build output
/dist/

# Node dependencies
node_modules/

# dotenv environment configurations
.env
.env.test
.env*.local

# Caching files
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
*.sublime-workspace

# Grunt and Bower package manager
.grunt
bower_components/

# npm and yarn cache
.npm/
.yarn/

# ESLint cache
.eslintcache

# Stylelint cache
.stylelintcache
Loading

0 comments on commit 267bcc5

Please sign in to comment.