From ea5efcdfb68a9928119c8daa2547a55070ae61f0 Mon Sep 17 00:00:00 2001 From: PH - ACER Date: Thu, 29 Oct 2020 21:40:32 -0300 Subject: [PATCH] Creating models --- backend/models/orderModel.js | 48 ++++++++++++++++++++++++++++++++++ backend/models/productModel.js | 23 ++++++++++++++++ backend/models/userModel.js | 16 ++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 backend/models/orderModel.js create mode 100644 backend/models/productModel.js create mode 100644 backend/models/userModel.js diff --git a/backend/models/orderModel.js b/backend/models/orderModel.js new file mode 100644 index 0000000..6b89c7a --- /dev/null +++ b/backend/models/orderModel.js @@ -0,0 +1,48 @@ +// Main model of the project, which is responsible for holding the orders made through the app. +// This collection will relate to Users collection and Products collection. +import mongoose from 'mongoose'; +const orderSchema = new mongoose.Schema( + { + orderItems: [ + { + name: { type: String, required: true }, + qty: { type: Number, required: true }, + image: { type: String, required: true }, + price: { type: Number, required: true }, + product: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Product', + required: true, + }, + }, + ], + shippingAddress: { + fullName: { type: String, required: true }, + address: { type: String, required: true }, + city: { type: String, required: true }, + postalCode: { type: String, required: true }, + country: { type: String, required: true }, + }, + paymentMethod: { type: String, required: true }, + paymentResult: { + id: String, + status: String, + update_time: String, + email_address: String, + }, + itemsPrice: { type: Number, required: true }, + shippingPrice: { type: Number, required: true }, + taxPrice: { type: Number, required: true }, + totalPrice: { type: Number, required: true }, + user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, + isPaid: { type: Boolean, default: false }, + paidAt: { type: Date }, + isDelivered: { type: Boolean, default: false }, + deliveredAt: { type: Date }, + }, + { + timestamps: true, + } +); +const Order = mongoose.model('Order', orderSchema); +export default Order; diff --git a/backend/models/productModel.js b/backend/models/productModel.js new file mode 100644 index 0000000..b724963 --- /dev/null +++ b/backend/models/productModel.js @@ -0,0 +1,23 @@ +// Product Model holds all the products available in the virtual pet store. +// Admin users will be able to do all the CRUD operations on this model. +// Ordinary users (Buyers) can only read it. +import mongoose from 'mongoose'; +const productSchema = new mongoose.Schema( + { + name: { type: String, required: true, unique: true }, + image: { type: String, required: true }, + brand: { type: String, required: true }, + category: { type: String, required: true }, + description: { type: String, required: true }, + price: { type: Number, required: true }, + countInStock: { type: Number, required: true }, + rating: { type: Number, required: true }, + numReviews: { type: Number, required: true }, + }, + { + timestamps: true, + } +); +const Product = mongoose.model('Product', productSchema); + +export default Product; diff --git a/backend/models/userModel.js b/backend/models/userModel.js new file mode 100644 index 0000000..fee55c0 --- /dev/null +++ b/backend/models/userModel.js @@ -0,0 +1,16 @@ +// User models holds all the users authorized to use the app. +// User password will be safely saved in the database using cryptography +import mongoose from 'mongoose'; +const userSchema = new mongoose.Schema( + { + name: { type: String, required: true }, + email: { type: String, required: true, unique: true }, + password: { type: String, required: true }, + isAdmin: { type: Boolean, default: false, required: true }, + }, + { + timestamps: true, + } +); +const User = mongoose.model('User', userSchema); +export default User;