kawaiilingo-api/src/routes/auth.ts

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;