Начат фронтенд

This commit is contained in:
Georgiy Syralev
2025-09-16 14:47:30 +03:00
parent f37e85e2e0
commit 40de29041d
2100 changed files with 305701 additions and 11807 deletions

View File

@@ -10,7 +10,11 @@ const JWT_SECRET = process.env.JWT_SECRET || 'любая_секретная_ст
export const register = async (req: Request, res: Response) => {
try {
const { name, email, password } = req.body;
const { username, email, password } = req.body as Partial<{ username: string; email: string; password: string }>;
if (!username || !email || !password) {
return res.status(400).json({ message: 'Необходимо указать username, email и password' });
}
// Проверка, есть ли уже пользователь с таким email
const existingUser = await prisma.user.findUnique({ where: { email } });
@@ -25,21 +29,21 @@ export const register = async (req: Request, res: Response) => {
// Создание нового пользователя в базе данных
const newUser = await prisma.user.create({
data: {
name,
username,
email,
password: hashedPassword,
},
});
// Генерация JWT токена
const token = jwt.sign({ id: newUser.id }, JWT_SECRET, { expiresIn: '1h' });
const token = jwt.sign({ id: newUser.id }, JWT_SECRET, { expiresIn: '1h' });
res.status(201).json({
message: 'Регистрация прошла успешно!',
token,
user: {
id: newUser.id,
name: newUser.name,
username: newUser.username,
email: newUser.email,
},
});
@@ -52,7 +56,10 @@ export const register = async (req: Request, res: Response) => {
export const login = async (req: Request, res: Response) => {
try {
const { email, password } = req.body;
const { email, password } = req.body as Partial<{ email: string; password: string }>;
if (!email || !password) {
return res.status(400).json({ message: 'Необходимо указать email и password' });
}
// Поиск пользователя по email
const user = await prisma.user.findUnique({ where: { email } });
@@ -61,7 +68,7 @@ export const login = async (req: Request, res: Response) => {
}
// Проверка пароля
const isMatch = await bcrypt.compare(password, user.password);
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res.status(401).json({ message: 'Неверный email или пароль' });
}
@@ -74,7 +81,7 @@ export const login = async (req: Request, res: Response) => {
token,
user: {
id: user.id,
name: user.name,
username: user.username,
email: user.email,
},
});
@@ -85,17 +92,22 @@ export const login = async (req: Request, res: Response) => {
}
};
export const getMe = async (req: Request, res: Response) => {
type AuthRequest = Request & { userId?: number };
export const getMe = async (req: AuthRequest, res: Response) => {
try {
// ID пользователя будет добавлен в req.user.id мидлваром
const userId = (req as any).userId;
// ID пользователя будет добавлен мидлваром
const userId = req.userId;
if (!userId) {
return res.status(401).json({ message: 'Не авторизован' });
}
// Получение пользователя из базы данных, исключая пароль
const user = await prisma.user.findUnique({
where: { id: userId },
select: {
id: true,
name: true,
username: true,
email: true,
createdAt: true,
},