working on healthcheck api and auth api

This commit is contained in:
2026-05-14 23:43:02 -07:00
parent ce914f91fd
commit fa6d6a97ba
4 changed files with 89 additions and 12 deletions
+7 -11
View File
@@ -1,9 +1,8 @@
const express = require('express') import express from 'express'
const path = require('path') import path from 'path'
import cors from 'cors'
const authRoutes = require('./routes/auth') import healthCheckRoutes from './routes/healthcheck'
const productsRoutes = require('./routes/products') import authRoutes from './routes/auth'
const usersRoutes = require('./routes/users')
const app = express() const app = express()
const port = process.env.PORT || 3000 const port = process.env.PORT || 3000
@@ -11,14 +10,11 @@ const port = process.env.PORT || 3000
// Middleware // Middleware
app.use(express.json()) // For parsing application/json app.use(express.json()) // For parsing application/json
app.use(express.urlencoded({ extended: true })) // For parsing URL-encoded form data app.use(express.urlencoded({ extended: true })) // For parsing URL-encoded form data
app.use(cors())
// Static Files (Serving Frontend)
app.use(express.static(path.join(__dirname, 'public')))
// Mount Routes // Mount Routes
app.use('/healthcheck', healthCheckRoutes)
app.use('/auth', authRoutes) app.use('/auth', authRoutes)
app.use('/products', productsRoutes)
app.use('/users', usersRoutes)
// Default Route (Catch-all for undefined routes) // Default Route (Catch-all for undefined routes)
app.use((req, res, next) => { app.use((req, res, next) => {
+5 -1
View File
@@ -22,9 +22,13 @@
"author": "Your Name", "author": "Your Name",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bcryptjs": "^3.0.3",
"body-parser": "^2.2.2",
"cors": "^2.8.6",
"csv-parser": "^3.0.0", "csv-parser": "^3.0.0",
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"express": "^4.18.2", "express": "^4.22.2",
"jsonwebtoken": "^9.0.3",
"node-pg": "^1.0.1", "node-pg": "^1.0.1",
"p-limit": "^7.3.0", "p-limit": "^7.3.0",
"pg": "^8.20.0" "pg": "^8.20.0"
+70
View File
@@ -0,0 +1,70 @@
import express from 'express'
const { Pool } = require('pg')
import jwt from 'jsonwebtoken'
import bcrypt from 'bcryptjs'
const router = express.Router()
// Database connection pool
const pool = new Pool({
user: process.env.DB_USER,
host: process.env.DB_HOST,
database: process.env.DB_NAME,
password: process.env.DB_PASS,
port: process.env.DB_PORT,
})
// Route to handle login and issue JWT token
router.post('/login', async (req, res) => {
const { username, password } = req.body
try {
const client = await pool.connect()
const queryText = 'SELECT * FROM users WHERE username = $1'
const result = await client.query(queryText, [username])
if (!result.rows.length) {
return res.status(401).json({ message: 'Invalid credentials' })
}
const user = result.rows[0]
// Compare passwords
const passwordMatch = await bcrypt.compare(password, user.password)
if (!passwordMatch) {
return res.status(401).json({ message: 'Invalid credentials' })
}
// Issue JWT token
const token = jwt.sign({ id: user.id, username: user.username }, process.env.JWT_SECRET, { expiresIn: '1h' })
res.json({ token })
} catch (error) {
console.error(error)
res.status(500).json({ message: 'Internal server error' })
}
})
// Route to refresh JWT token
router.post('/refresh-token', async (req, res) => {
const { refreshToken } = req.body
if (!refreshToken) {
return res.status(401).json({ message: 'Refresh token is required' })
}
try {
// Verify the refresh token
const decoded = jwt.verify(refreshToken, process.env.JWT_SECRET)
// Create a new access token (JWT)
const token = jwt.sign({ id: decoded.id, username: decoded.username }, process.env.JWT_SECRET, { expiresIn: '1h' })
res.json({ token })
} catch (error) {
console.error(error)
res.status(403).json({ message: 'Invalid refresh token' })
}
})
export default router
+7
View File
@@ -0,0 +1,7 @@
import express from 'express'
const router = exporess.Router()
router.get('/', (req, res) => res.json({ status: "UP" }))
export default router