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 { 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 { config } from 'dotenv';
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
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) {
|
||||
try {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { Request, Response } from 'express';
|
||||
import bcrypt from 'bcryptjs';
|
||||
import jwt from 'jsonwebtoken';
|
||||
import { User, IUser } from '../mongoose/Schema';
|
||||
import { User, IUser } from '../models/userModel';
|
||||
import { clearJwtCookie, setJwtCookie } from '../middlewares/checkAuth';
|
||||
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 { User, Order } from "../mongoose/Schema";
|
||||
import { Order } from "../models/orderModel";
|
||||
import { User } from "../models/userModel";
|
||||
import client from '@sendgrid/mail';
|
||||
config();
|
||||
|
||||
|
|
Loading…
Reference in a new issue