import { Request, Response, NextFunction } from 'express'; import authService from '../services/authService'; export class AuthController { async register(req: Request, res: Response, next: NextFunction) { try { const { email, password, name } = req.body; const result = await authService.register(email, password, name); res.status(201).json({ success: true, data: result }); } catch (error) { next(error); } } async login(req: Request, res: Response, next: NextFunction) { try { const { email, password } = req.body; const result = await authService.login(email, password); res.json({ success: true, data: result }); } catch (error) { next(error); } } async refreshToken(req: Request, res: Response, next: NextFunction) { try { const { refreshToken } = req.body; const result = await authService.refreshToken(refreshToken); res.json({ success: true, data: result }); } catch (error) { next(error); } } async verifyEmail(req: Request, res: Response, next: NextFunction) { try { const { token } = req.params; const result = await authService.verifyEmail(token); res.json({ success: true, data: result }); } catch (error) { next(error); } } async logout(req: Request, res: Response, next: NextFunction) { try { const result = await authService.logout(req.user!.userId); res.json({ success: true, data: result }); } catch (error) { next(error); } } async me(req: Request, res: Response, next: NextFunction) { try { const userRepo = (await import('../repositories/userRepository')).default; const user = await userRepo.findById(req.user!.userId); if (!user) { return res.status(404).json({ success: false, message: 'User not found' }); } res.json({ success: true, data: { id: user.id, email: user.email, name: user.name, role: user.role, isEmailVerified: user.isEmailVerified, createdAt: user.createdAt, }, }); } catch (error) { next(error); } } } export default new AuthController();