47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { Router } from "express";
|
|
import jwt from 'jsonwebtoken';
|
|
import Database from "../db/database";
|
|
import User from "../types/User";
|
|
|
|
const db = new Database();
|
|
const router = Router();
|
|
|
|
router.post('/login', async (req, res) => {
|
|
const { username, password } = req.body;
|
|
|
|
const user = (await db.query('SELECT * FROM users WHERE username = ? AND password = ?', [username, password]))[0] as User | undefined;
|
|
|
|
if (user) {
|
|
const accessToken = jwt.sign({ userId: user.userId }, process.env.ACCESS_TOKEN_SECRET ?? "", { expiresIn: '7d' });
|
|
|
|
res.json({
|
|
code: 200,
|
|
accessToken
|
|
});
|
|
} else {
|
|
res.status(401).json({ code: 401, error: 'Username or password incorrect' });
|
|
}
|
|
});
|
|
|
|
router.post('/register', async (req, res) => {
|
|
const { username, email, password } = req.body;
|
|
|
|
const user = (await db.query('SELECT * FROM users WHERE username = ? OR email = ?', [username, email]))[0] as User | undefined;
|
|
|
|
if (user) {
|
|
return res.status(409).json({ code: 409, error: 'Username already exists' });
|
|
}
|
|
|
|
await db.query('INSERT INTO users VALUES (NULL, ?, ?, ?, ?, ?, ?)', [username, password, email, 0, 0, new Date()]);
|
|
|
|
res.status(201).json({ code: 201, message: 'User created' });
|
|
});
|
|
|
|
router.get('/users', async (req, res) => {
|
|
const users = await db.query('SELECT * FROM users', []);
|
|
|
|
res.json({ code: 200, users });
|
|
});
|
|
|
|
export default router;
|