From 37b0c1c9e11d1b0674c22026c23ba98850e6677b Mon Sep 17 00:00:00 2001 From: Kfir Dayan Date: Thu, 8 Jun 2023 19:03:27 +0300 Subject: [PATCH] done changing --- package-lock.json | 112 ++++++++++++++++++++++++++++++ package.json | 1 + prisma/schema.prisma | 66 +++++++++--------- src/controllers/UserController.ts | 20 ++---- src/index.ts | 23 ++++-- src/models/User.ts | 38 ++++++---- src/routes/user.ts | 4 +- 7 files changed, 193 insertions(+), 71 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69c89ce..d41dfb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "express": "^4.18.2", "jsonwebtoken": "^9.0.0", "mongodb": "^5.6.0", + "mongoose": "^7.2.2", "prisma": "^4.15.0" }, "devDependencies": { @@ -548,6 +549,14 @@ "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": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -662,6 +671,104 @@ "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": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -889,6 +996,11 @@ "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": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", diff --git a/package.json b/package.json index 3c8b04a..0eb4399 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "express": "^4.18.2", "jsonwebtoken": "^9.0.0", "mongodb": "^5.6.0", + "mongoose": "^7.2.2", "prisma": "^4.15.0" }, "devDependencies": { diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c614a86..3793a9a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,37 +1,37 @@ -datasource db { - provider = "mongodb" - url = env("DATABASE_URL") -} +// datasource db { +// provider = "mongodb" +// url = env("DATABASE_URL") +// } -generator client { - provider = "prisma-client-js" -} +// generator client { +// provider = "prisma-client-js" +// } -model User { - id String @id @default(cuid()) @map("_id") - firstName String - lastName String - email String @unique - password String - address String - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} +// model User { +// id String @id @default(cuid()) @map("_id") +// firstName String +// lastName String +// email String @unique +// password String +// address String +// createdAt DateTime @default(now()) +// updatedAt DateTime @updatedAt +// } -model Item { - id String @id @default(cuid()) @map("_id") - name String - price Float - quantity Int @default(0) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} +// model Item { +// id String @id @default(cuid()) @map("_id") +// name String +// price Float +// quantity Int @default(0) +// createdAt DateTime @default(now()) +// updatedAt DateTime @updatedAt +// } -model Cart { - id String @id @default(cuid()) @map("_id") - userId String - itemId String - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - @@unique([userId, itemId]) -} \ No newline at end of file +// model Cart { +// id String @id @default(cuid()) @map("_id") +// userId String +// itemId String +// createdAt DateTime @default(now()) +// updatedAt DateTime @updatedAt +// @@unique([userId, itemId]) +// } \ No newline at end of file diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index a7b7539..2d5462b 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -1,34 +1,26 @@ import { Request, Response } from 'express'; import bcrypt from 'bcryptjs'; -import { User } from '@prisma/client'; -import { createUser } from '../models/User'; +import User, { IUser } from '../models/User'; -async function createUserController(req: Request, res: Response) { +export async function createUser(req: Request, res: Response) { try { const { firstName, lastName, email, password, address } = req.body; + // Hash the password 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, lastName, email, password: hashedPassword, address, - id: '', - createdAt: undefined, - updatedAt: undefined }); - res.json(hashedPassword); + res.json(user); } catch (error) { console.error('Error creating user:', error); res.status(500).json({ error: 'An error occurred while creating the user.' }); } } - -const UserController = { - createUser: createUserController, -}; - -export default UserController; diff --git a/src/index.ts b/src/index.ts index c4cb7c4..9ee83c0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,17 +1,26 @@ import express from 'express'; +import mongoose from 'mongoose'; import userRoutes from './routes/user'; +const env = require('dotenv').config().parsed; + const app = express(); const PORT = 3000; 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.listen(PORT, () => { - console.log('Server started on port 3000!'); -}) - - - - +app.listen(PORT, () => { + console.log(`Server started on port ${PORT}`); +}); diff --git a/src/models/User.ts b/src/models/User.ts index bb4f841..7485137 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -1,17 +1,25 @@ -import { PrismaClient, User } from '@prisma/client'; +import mongoose, { Schema, Document } from 'mongoose'; -const prisma = new PrismaClient(); - -export async function createUser(user: User): Promise { - const createdUser = await prisma.user.create({ - data: { - firstName: user.firstName, - lastName: user.lastName, - email: user.email, - password: user.password, - address: user.address, - }, - }); - - return createdUser; +export interface IUser extends Document { + firstName: string; + lastName: string; + email: string; + password: string; + address: string; + createdAt: Date; + updatedAt: Date; } + +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('User', UserSchema); + +export default User; diff --git a/src/routes/user.ts b/src/routes/user.ts index a8807ad..ef3e0ed 100644 --- a/src/routes/user.ts +++ b/src/routes/user.ts @@ -1,8 +1,8 @@ import express from 'express'; -import UserController from '../controllers/UserController'; +import { createUser } from '../controllers/UserController'; const router = express.Router(); -router.post('/', UserController.createUser); +router.post('/', createUser); export default router; \ No newline at end of file