9 changed files with 1369 additions and 5 deletions
@ -1,3 +1,4 @@ |
|||||
.idea/ |
.idea/ |
||||
backend/node_modules/ |
backend/node_modules/ |
||||
frontend/node_modules/ |
frontend/node_modules/ |
||||
|
.env |
||||
@ -0,0 +1,53 @@ |
|||||
|
import {createUserService, getUserByEmailServices} from '../services/users.services.js'; |
||||
|
import bcrypt from 'bcrypt'; |
||||
|
|
||||
|
export async function createUser(req,res) { |
||||
|
|
||||
|
const { username, email, password } = req.body; |
||||
|
|
||||
|
const user = { |
||||
|
username, |
||||
|
email, |
||||
|
password |
||||
|
} |
||||
|
|
||||
|
user.password = await bcrypt.hash(password, 12); |
||||
|
|
||||
|
try { |
||||
|
await createUserService(user); |
||||
|
res.status(201).send({ |
||||
|
message: 'User created successfully', |
||||
|
data:{ |
||||
|
"username": username, |
||||
|
"email": email, |
||||
|
} |
||||
|
}); |
||||
|
} catch (error) { |
||||
|
console.log(error); |
||||
|
res.status(500).json({ |
||||
|
error: 500, |
||||
|
message: error.message, |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
export async function logUser(req,res) { |
||||
|
const email = req.body.email; |
||||
|
const password = req.body.password; |
||||
|
const response = await getUserByEmailServices(email); |
||||
|
const userData = response.rows[0]; |
||||
|
const isPasswordValid = await bcrypt.compare(password, userData.password); |
||||
|
|
||||
|
if (isPasswordValid) { |
||||
|
res.status(200).send({ |
||||
|
message: 'User logged successfully', |
||||
|
}) |
||||
|
} else { |
||||
|
res.status(401).send({ |
||||
|
"error": 401, |
||||
|
"message": "Bad Credentials" |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,31 @@ |
|||||
|
import {getUserByEmailServices} from "../services/users.services.js"; |
||||
|
|
||||
|
export async function doUserAlreadyExists(req,res,next){ |
||||
|
const email = req.body.email; |
||||
|
|
||||
|
const request = await getUserByEmailServices(email); |
||||
|
|
||||
|
if (request.rows && request.rows.length > 0) { |
||||
|
return res.status(409).json({ |
||||
|
error: 409, |
||||
|
message: `Email already exists`, |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
next(); |
||||
|
} |
||||
|
|
||||
|
export async function doUserExists(req,res,next){ |
||||
|
console.log(req.body); |
||||
|
const email = req.body.email; |
||||
|
const request = await getUserByEmailServices(email); |
||||
|
if (request.rows && request.rows.length > 0) { |
||||
|
next() |
||||
|
} else { |
||||
|
return res.json({ |
||||
|
error: 401, |
||||
|
message: 'Bad Credentials' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
import {Router} from "express"; |
||||
|
import {createUser, logUser} from "../controllers/users.controller.js"; |
||||
|
import {doUserAlreadyExists, doUserExists} from "../middlewares/users.middlewares.js"; |
||||
|
|
||||
|
const router = Router(); |
||||
|
|
||||
|
router.post("/register", [doUserAlreadyExists], createUser); |
||||
|
|
||||
|
router.post("/login", [doUserExists], logUser); |
||||
|
|
||||
|
export default router; |
||||
@ -0,0 +1,20 @@ |
|||||
|
import pg from "pg"; |
||||
|
|
||||
|
async function query(query,values) { |
||||
|
const client = await new pg.Client({ |
||||
|
user: process.env.PG_USER, |
||||
|
password: process.env.PG_PASSWORD, |
||||
|
host: process.env.PG_HOST, |
||||
|
database: "spotifine", |
||||
|
}); |
||||
|
|
||||
|
client.connect(); |
||||
|
|
||||
|
const res = await client.query(query,values); |
||||
|
|
||||
|
await client.end(); |
||||
|
|
||||
|
return res; |
||||
|
} |
||||
|
|
||||
|
export default query; |
||||
@ -0,0 +1,16 @@ |
|||||
|
import db from './db.services.js'; |
||||
|
|
||||
|
export async function createUserService(user) { |
||||
|
|
||||
|
const query = "INSERT INTO users (username, password, email) VALUES ($1, $2, $3)"; |
||||
|
const values = [user.username, user.password, user.email]; |
||||
|
|
||||
|
const res = await db(query, values); |
||||
|
return res.ok; |
||||
|
} |
||||
|
|
||||
|
export async function getUserByEmailServices(email) { |
||||
|
const query = "SELECT * FROM users WHERE email = $1"; |
||||
|
const values = [email]; |
||||
|
return await db(query, values); |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
import express from 'express'; |
||||
|
import dotenv from 'dotenv'; |
||||
|
import cors from 'cors'; |
||||
|
|
||||
|
import UserRouter from "./app/routes/users.routes.js"; |
||||
|
|
||||
|
console.clear() |
||||
|
|
||||
|
dotenv.config({ |
||||
|
path: `../.env`, |
||||
|
}); |
||||
|
|
||||
|
const app = express(); |
||||
|
|
||||
|
const port = process.env.BACKEND_PORT || 3000; |
||||
|
|
||||
|
app.use(express.json()); |
||||
|
app.use(express.urlencoded({ extended: true })); |
||||
|
app.use(express.static('public')); |
||||
|
app.use(cors()); |
||||
|
app.use((err, req, res, next) => { |
||||
|
console.log(err); |
||||
|
res.status(500).json({ |
||||
|
message: err.message, |
||||
|
}) |
||||
|
}) |
||||
|
|
||||
|
app.use("/users", UserRouter); |
||||
|
|
||||
|
app.get('/', (req, res) => { |
||||
|
res.send("Welcome"); |
||||
|
}) |
||||
|
|
||||
|
app.listen(port, () => { |
||||
|
console.log(`Server started on port ${port}`); |
||||
|
}) |
||||
File diff suppressed because it is too large
Loading…
Reference in new issue