using model for each instance
This commit is contained in:
parent
4c25aa65fe
commit
8329a33271
9 changed files with 111 additions and 78 deletions
|
@ -1,5 +1,7 @@
|
||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import { Cart, ICart, Order, Product } from '../mongoose/Schema';
|
import { Cart, ICart } from '../models/cartModel';
|
||||||
|
import { Product } from '../models/productModel';
|
||||||
|
import { Order } from '../models/orderModel';
|
||||||
import { sendEmailasync } from '../services/sendGrid';
|
import { sendEmailasync } from '../services/sendGrid';
|
||||||
import { config } from 'dotenv';
|
import { config } from 'dotenv';
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import { Product, IProduct } from '../mongoose/Schema';
|
import { Product, IProduct } from '../models/productModel';
|
||||||
|
|
||||||
export async function createProduct(req: Request, res: Response) {
|
export async function createProduct(req: Request, res: Response) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import bcrypt from 'bcryptjs';
|
import bcrypt from 'bcryptjs';
|
||||||
import jwt from 'jsonwebtoken';
|
import jwt from 'jsonwebtoken';
|
||||||
import { User, IUser } from '../mongoose/Schema';
|
import { User, IUser } from '../models/userModel';
|
||||||
import { clearJwtCookie, setJwtCookie } from '../middlewares/checkAuth';
|
import { clearJwtCookie, setJwtCookie } from '../middlewares/checkAuth';
|
||||||
import validate from 'deep-email-validator';
|
import validate from 'deep-email-validator';
|
||||||
|
|
||||||
|
|
23
src/models/cartModel.ts
Normal file
23
src/models/cartModel.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import mongoose, { Schema, Document } from 'mongoose';
|
||||||
|
|
||||||
|
interface ICart extends Document {
|
||||||
|
userId: string;
|
||||||
|
products: { [itemId: string]: number };
|
||||||
|
createdAt: Date;
|
||||||
|
updatedAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const CartSchema: Schema = new Schema({
|
||||||
|
userId: { type: Schema.Types.ObjectId, ref: 'User', required: true, unique: true },
|
||||||
|
products: { type: Schema.Types.Mixed, default: {} },
|
||||||
|
createdAt: { type: Date, default: Date.now },
|
||||||
|
updatedAt: { type: Date, default: Date.now },
|
||||||
|
});
|
||||||
|
|
||||||
|
const Cart = mongoose.model<ICart>('Cart', CartSchema);
|
||||||
|
|
||||||
|
export {
|
||||||
|
Cart,
|
||||||
|
ICart
|
||||||
|
}
|
27
src/models/orderModel.ts
Normal file
27
src/models/orderModel.ts
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
import mongoose, { Schema, Document } from 'mongoose';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
interface IOrder extends Document {
|
||||||
|
userId: string;
|
||||||
|
products: { [itemId: string]: number };
|
||||||
|
emailSent: boolean;
|
||||||
|
createdAt: Date;
|
||||||
|
updatedAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
const OrderSchema: Schema = new Schema({
|
||||||
|
userId: { type: Schema.Types.ObjectId, ref: 'User', required: true },
|
||||||
|
products: { type: Schema.Types.Mixed, default: {} },
|
||||||
|
emailSent: { type: Boolean, default: false },
|
||||||
|
createdAt: { type: Date, default: Date.now },
|
||||||
|
updatedAt: { type: Date, default: Date.now },
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const Order = mongoose.model<IOrder>('Order', OrderSchema);
|
||||||
|
|
||||||
|
export {
|
||||||
|
Order,
|
||||||
|
IOrder
|
||||||
|
};
|
28
src/models/productModel.ts
Normal file
28
src/models/productModel.ts
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import mongoose, { Schema, Document } from 'mongoose';
|
||||||
|
|
||||||
|
interface IProduct extends Document {
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
price: number;
|
||||||
|
userId: string;
|
||||||
|
createdAt: Date;
|
||||||
|
updatedAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ProductSchema: Schema = new Schema({
|
||||||
|
name: { type: String, required: true },
|
||||||
|
description: { type: String, required: true },
|
||||||
|
price: { type: Number, required: true },
|
||||||
|
userId: { type: Schema.Types.ObjectId, ref: 'User', required: true },
|
||||||
|
createdAt: { type: Date, default: Date.now },
|
||||||
|
updatedAt: { type: Date, default: Date.now },
|
||||||
|
});
|
||||||
|
|
||||||
|
const Product = mongoose.model<IProduct>('Product', ProductSchema);
|
||||||
|
|
||||||
|
ProductSchema.index({ name: 1, userId: 1 }, { unique: true });
|
||||||
|
|
||||||
|
export {
|
||||||
|
Product,
|
||||||
|
IProduct
|
||||||
|
}
|
26
src/models/userModel.ts
Normal file
26
src/models/userModel.ts
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
// src/models/userModel.ts
|
||||||
|
|
||||||
|
import mongoose, { Schema, Document } from 'mongoose';
|
||||||
|
|
||||||
|
interface IUser extends Document {
|
||||||
|
email: string;
|
||||||
|
password: string;
|
||||||
|
address: string;
|
||||||
|
createdAt: Date;
|
||||||
|
updatedAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
const UserSchema: Schema = new Schema({
|
||||||
|
email: { type: String, required: true, unique: true },
|
||||||
|
password: { type: String, required: true },
|
||||||
|
address: { type: String, required: true },
|
||||||
|
createdAt: { type: Date, default: Date.now },
|
||||||
|
updatedAt: { type: Date, default: Date.now },
|
||||||
|
});
|
||||||
|
|
||||||
|
const User = mongoose.model<IUser>('User', UserSchema);
|
||||||
|
|
||||||
|
export {
|
||||||
|
User,
|
||||||
|
IUser
|
||||||
|
}
|
|
@ -1,74 +0,0 @@
|
||||||
import mongoose, { Schema, Document } from 'mongoose';
|
|
||||||
|
|
||||||
export interface IUser extends Document {
|
|
||||||
email: string;
|
|
||||||
password: string;
|
|
||||||
address: string;
|
|
||||||
createdAt: Date;
|
|
||||||
updatedAt: Date;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IProduct extends Document {
|
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
price: number;
|
|
||||||
userId: string;
|
|
||||||
createdAt: Date;
|
|
||||||
updatedAt: Date;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ICart extends Document {
|
|
||||||
userId: string;
|
|
||||||
products: { [itemId: string]: number };
|
|
||||||
createdAt: Date;
|
|
||||||
updatedAt: Date;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IOrder extends Document {
|
|
||||||
userId: string;
|
|
||||||
products: { [itemId: string]: number };
|
|
||||||
emailSent: boolean;
|
|
||||||
createdAt: Date;
|
|
||||||
updatedAt: Date;
|
|
||||||
}
|
|
||||||
|
|
||||||
const UserSchema: Schema = new Schema({
|
|
||||||
email: { type: String, required: true, unique: true },
|
|
||||||
password: { type: String, required: true },
|
|
||||||
address: { type: String, required: true },
|
|
||||||
createdAt: { type: Date, default: Date.now },
|
|
||||||
updatedAt: { type: Date, default: Date.now },
|
|
||||||
});
|
|
||||||
|
|
||||||
const ProductSchema: Schema = new Schema({
|
|
||||||
name: { type: String, required: true },
|
|
||||||
description: { type: String, required: true },
|
|
||||||
price: { type: Number, required: true },
|
|
||||||
userId: { type: Schema.Types.ObjectId, ref: 'User', required: true },
|
|
||||||
createdAt: { type: Date, default: Date.now },
|
|
||||||
updatedAt: { type: Date, default: Date.now },
|
|
||||||
});
|
|
||||||
|
|
||||||
const CartSchema: Schema = new Schema({
|
|
||||||
userId: { type: Schema.Types.ObjectId, ref: 'User', required: true, unique: true },
|
|
||||||
products: { type: Schema.Types.Mixed, default: {} },
|
|
||||||
createdAt: { type: Date, default: Date.now },
|
|
||||||
updatedAt: { type: Date, default: Date.now },
|
|
||||||
});
|
|
||||||
|
|
||||||
const OrderSchema: Schema = new Schema({
|
|
||||||
userId: { type: Schema.Types.ObjectId, ref: 'User', required: true },
|
|
||||||
products: { type: Schema.Types.Mixed, default: {} },
|
|
||||||
emailSent: { type: Boolean, default: false },
|
|
||||||
createdAt: { type: Date, default: Date.now },
|
|
||||||
updatedAt: { type: Date, default: Date.now },
|
|
||||||
});
|
|
||||||
|
|
||||||
ProductSchema.index({ name: 1, userId: 1 }, { unique: true });
|
|
||||||
|
|
||||||
const User = mongoose.model<IUser>('User', UserSchema);
|
|
||||||
const Product = mongoose.model<IProduct>('Product', ProductSchema);
|
|
||||||
const Cart = mongoose.model<ICart>('Cart', CartSchema);
|
|
||||||
const Order = mongoose.model<IOrder>('Order', OrderSchema);
|
|
||||||
|
|
||||||
export { User, Product, Cart, Order };
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { config } from "dotenv";
|
import { config } from "dotenv";
|
||||||
import { User, Order } from "../mongoose/Schema";
|
import { Order } from "../models/orderModel";
|
||||||
|
import { User } from "../models/userModel";
|
||||||
import client from '@sendgrid/mail';
|
import client from '@sendgrid/mail';
|
||||||
config();
|
config();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue