done changing

This commit is contained in:
Kfir Dayan 2023-06-08 19:03:27 +03:00
parent 4ae6bb45d3
commit 37b0c1c9e1
7 changed files with 193 additions and 71 deletions

112
package-lock.json generated
View file

@ -15,6 +15,7 @@
"express": "^4.18.2", "express": "^4.18.2",
"jsonwebtoken": "^9.0.0", "jsonwebtoken": "^9.0.0",
"mongodb": "^5.6.0", "mongodb": "^5.6.0",
"mongoose": "^7.2.2",
"prisma": "^4.15.0" "prisma": "^4.15.0"
}, },
"devDependencies": { "devDependencies": {
@ -548,6 +549,14 @@
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
} }
}, },
"node_modules/kareem": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
"integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/lodash": { "node_modules/lodash": {
"version": "4.17.21", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@ -662,6 +671,104 @@
"whatwg-url": "^11.0.0" "whatwg-url": "^11.0.0"
} }
}, },
"node_modules/mongoose": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.2.2.tgz",
"integrity": "sha512-JPBMTF+oYfLGVFWbHSZ/H+f1GajNanGLYH6c/P0nE3bNJfwGhX573vieGR0kNlNhj3cZk8WCPrnVsTNeUmFUag==",
"dependencies": {
"bson": "^5.3.0",
"kareem": "2.5.1",
"mongodb": "5.5.0",
"mpath": "0.9.0",
"mquery": "5.0.0",
"ms": "2.1.3",
"sift": "16.0.1"
},
"engines": {
"node": ">=14.20.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mongoose"
}
},
"node_modules/mongoose/node_modules/mongodb": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.5.0.tgz",
"integrity": "sha512-XgrkUgAAdfnZKQfk5AsYL8j7O99WHd4YXPxYxnh8dZxD+ekYWFRA3JktUsBnfg+455Smf75/+asoU/YLwNGoQQ==",
"dependencies": {
"bson": "^5.3.0",
"mongodb-connection-string-url": "^2.6.0",
"socks": "^2.7.1"
},
"engines": {
"node": ">=14.20.1"
},
"optionalDependencies": {
"saslprep": "^1.0.3"
},
"peerDependencies": {
"@aws-sdk/credential-providers": "^3.201.0",
"mongodb-client-encryption": ">=2.3.0 <3",
"snappy": "^7.2.2"
},
"peerDependenciesMeta": {
"@aws-sdk/credential-providers": {
"optional": true
},
"mongodb-client-encryption": {
"optional": true
},
"snappy": {
"optional": true
}
}
},
"node_modules/mongoose/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/mpath": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
"integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/mquery": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
"integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
"dependencies": {
"debug": "4.x"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/mquery/node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/mquery/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/ms": { "node_modules/ms": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -889,6 +996,11 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/sift": {
"version": "16.0.1",
"resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
"integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
},
"node_modules/smart-buffer": { "node_modules/smart-buffer": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",

View file

@ -15,6 +15,7 @@
"express": "^4.18.2", "express": "^4.18.2",
"jsonwebtoken": "^9.0.0", "jsonwebtoken": "^9.0.0",
"mongodb": "^5.6.0", "mongodb": "^5.6.0",
"mongoose": "^7.2.2",
"prisma": "^4.15.0" "prisma": "^4.15.0"
}, },
"devDependencies": { "devDependencies": {

View file

@ -1,37 +1,37 @@
datasource db { // datasource db {
provider = "mongodb" // provider = "mongodb"
url = env("DATABASE_URL") // url = env("DATABASE_URL")
} // }
generator client { // generator client {
provider = "prisma-client-js" // provider = "prisma-client-js"
} // }
model User { // model User {
id String @id @default(cuid()) @map("_id") // id String @id @default(cuid()) @map("_id")
firstName String // firstName String
lastName String // lastName String
email String @unique // email String @unique
password String // password String
address String // address String
createdAt DateTime @default(now()) // createdAt DateTime @default(now())
updatedAt DateTime @updatedAt // updatedAt DateTime @updatedAt
} // }
model Item { // model Item {
id String @id @default(cuid()) @map("_id") // id String @id @default(cuid()) @map("_id")
name String // name String
price Float // price Float
quantity Int @default(0) // quantity Int @default(0)
createdAt DateTime @default(now()) // createdAt DateTime @default(now())
updatedAt DateTime @updatedAt // updatedAt DateTime @updatedAt
} // }
model Cart { // model Cart {
id String @id @default(cuid()) @map("_id") // id String @id @default(cuid()) @map("_id")
userId String // userId String
itemId String // itemId String
createdAt DateTime @default(now()) // createdAt DateTime @default(now())
updatedAt DateTime @updatedAt // updatedAt DateTime @updatedAt
@@unique([userId, itemId]) // @@unique([userId, itemId])
} // }

View file

@ -1,34 +1,26 @@
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import bcrypt from 'bcryptjs'; import bcrypt from 'bcryptjs';
import { User } from '@prisma/client'; import User, { IUser } from '../models/User';
import { createUser } from '../models/User';
async function createUserController(req: Request, res: Response) { export async function createUser(req: Request, res: Response) {
try { try {
const { firstName, lastName, email, password, address } = req.body; const { firstName, lastName, email, password, address } = req.body;
// Hash the password
const hashedPassword = await bcrypt.hash(password, 10); const hashedPassword = await bcrypt.hash(password, 10);
const user: User = await createUser({ // Create the user in the database
const user: IUser = await User.create({
firstName, firstName,
lastName, lastName,
email, email,
password: hashedPassword, password: hashedPassword,
address, address,
id: '',
createdAt: undefined,
updatedAt: undefined
}); });
res.json(hashedPassword); res.json(user);
} catch (error) { } catch (error) {
console.error('Error creating user:', error); console.error('Error creating user:', error);
res.status(500).json({ error: 'An error occurred while creating the user.' }); res.status(500).json({ error: 'An error occurred while creating the user.' });
} }
} }
const UserController = {
createUser: createUserController,
};
export default UserController;

View file

@ -1,17 +1,26 @@
import express from 'express'; import express from 'express';
import mongoose from 'mongoose';
import userRoutes from './routes/user'; import userRoutes from './routes/user';
const env = require('dotenv').config().parsed;
const app = express(); const app = express();
const PORT = 3000; const PORT = 3000;
app.use(express.json()); app.use(express.json());
// Connect to MongoDB using Mongoose
mongoose.connect(env.DATABASE_URL);
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', () => {
console.log('Connected to MongoDB');
});
app.use('/users', userRoutes); app.use('/users', userRoutes);
app.listen(PORT, () => { app.listen(PORT, () => {
console.log('Server started on port 3000!'); console.log(`Server started on port ${PORT}`);
}) });

View file

@ -1,17 +1,25 @@
import { PrismaClient, User } from '@prisma/client'; import mongoose, { Schema, Document } from 'mongoose';
const prisma = new PrismaClient(); export interface IUser extends Document {
firstName: string;
export async function createUser(user: User): Promise<User> { lastName: string;
const createdUser = await prisma.user.create({ email: string;
data: { password: string;
firstName: user.firstName, address: string;
lastName: user.lastName, createdAt: Date;
email: user.email, updatedAt: Date;
password: user.password,
address: user.address,
},
});
return createdUser;
} }
const UserSchema: Schema = new Schema({
firstName: { type: String, required: true },
lastName: { type: String, required: true },
email: { type: String, required: 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 default User;

View file

@ -1,8 +1,8 @@
import express from 'express'; import express from 'express';
import UserController from '../controllers/UserController'; import { createUser } from '../controllers/UserController';
const router = express.Router(); const router = express.Router();
router.post('/', UserController.createUser); router.post('/', createUser);
export default router; export default router;