import { Request, Response, NextFunction } from 'express'; import { AuthService } from '../services/auth.service'; import { sukses } from '../utils/response'; import { AuthenticatedRequest } from '../middlewares/auth.middleware'; export class AuthController { static async login(req: Request, res: Response, next: NextFunction) { try { const { username, password } = req.body; const ip = (req.ip || req.socket.remoteAddress || 'unknown').replace('::ffff:', ''); const userAgent = (req.headers['user-agent'] || 'unknown') as string; const result = await AuthService.login({ username, passwordSecret: password, ip, userAgent, }); return sukses( res, { access_token: result.accessToken, refresh_token: result.refreshToken, token_type: 'bearer', role: result.user.role, nama: result.user.nama, }, 'Login berhasil' ); } catch (error) { next(error); } } static async refresh(req: Request, res: Response, next: NextFunction) { try { const { refresh_token } = req.body; const result = await AuthService.refresh(refresh_token); return sukses( res, { access_token: result.accessToken, refresh_token: result.refreshToken, token_type: 'bearer', role: result.role, }, 'Token berhasil diperbarui' ); } catch (error) { next(error); } } static async logout(req: AuthenticatedRequest, res: Response, next: NextFunction) { try { const ip = (req.ip || req.socket.remoteAddress || 'unknown').replace('::ffff:', ''); const userAgent = (req.headers['user-agent'] || 'unknown') as string; const userId = req.user.id; await AuthService.logout(userId, ip, userAgent); return sukses(res, null, 'Logout berhasil'); } catch (error) { next(error); } } }