9 changed files with 1369 additions and 5 deletions
@ -1,3 +1,4 @@ |
|||
.idea/ |
|||
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