Spaces:
Sleeping
Sleeping
| import { Request, Response, NextFunction } from 'express'; | |
| import { TransaksiService } from '../services/transaksi.service'; | |
| import { sukses, gagal } from '../utils/response'; | |
| import { AuthenticatedRequest } from '../middlewares/auth.middleware'; | |
| import prisma from '../utils/db'; | |
| export class TransaksiController { | |
| static async create(req: AuthenticatedRequest, res: Response, next: NextFunction) { | |
| try { | |
| const actorId = req.user.id; | |
| const ip = (req.ip || req.socket.remoteAddress || 'unknown').replace('::ffff:', ''); | |
| const userAgent = (req.headers['user-agent'] || 'unknown') as string; | |
| const trans = await TransaksiService.prosesTransaksi({ | |
| data: req.body, | |
| actorId, | |
| ip, | |
| userAgent, | |
| }); | |
| return sukses(res, trans, 'Transaksi berhasil diproses'); | |
| } catch (error) { | |
| next(error); | |
| } | |
| } | |
| static async list(req: Request, res: Response, next: NextFunction) { | |
| try { | |
| const skip = parseInt(req.query.skip as string) || 0; | |
| const limit = parseInt(req.query.limit as string) || 20; | |
| const statusFilter = (req.query.status_filter as any) || undefined; | |
| const memberId = req.query.member_id ? parseInt(req.query.member_id as string) : undefined; | |
| const where: any = {}; | |
| if (statusFilter) where.status = statusFilter; | |
| if (memberId) where.member_id = memberId; | |
| const total = await prisma.transaksi.count({ where }); | |
| const trans = await prisma.transaksi.findMany({ | |
| where, | |
| orderBy: { created_at: 'desc' }, | |
| skip, | |
| take: limit, | |
| include: { | |
| transaksi_detail: true, | |
| pembayaran: true, | |
| }, | |
| }); | |
| const page = Math.floor(skip / limit) + 1; | |
| return sukses(res, trans, 'Daftar transaksi berhasil dimuat', { | |
| total, | |
| page, | |
| per_page: limit, | |
| }); | |
| } catch (error) { | |
| next(error); | |
| } | |
| } | |
| static async get(req: Request, res: Response, next: NextFunction) { | |
| try { | |
| const transaksiId = parseInt(req.params.id); | |
| const trans = await prisma.transaksi.findUnique({ | |
| where: { id: transaksiId }, | |
| include: { | |
| transaksi_detail: true, | |
| pembayaran: true, | |
| user: { | |
| select: { | |
| id: true, | |
| nama: true, | |
| username: true, | |
| }, | |
| }, | |
| member: true, | |
| }, | |
| }); | |
| if (!trans) { | |
| return gagal(res, 404, 'Transaksi tidak ditemukan'); | |
| } | |
| return sukses(res, trans, 'Detail transaksi berhasil dimuat'); | |
| } catch (error) { | |
| next(error); | |
| } | |
| } | |
| static async void(req: AuthenticatedRequest, res: Response, next: NextFunction) { | |
| try { | |
| const transaksiId = parseInt(req.params.id); | |
| const actorId = req.user.id; | |
| const ip = (req.ip || req.socket.remoteAddress || 'unknown').replace('::ffff:', ''); | |
| const userAgent = (req.headers['user-agent'] || 'unknown') as string; | |
| const alasan = req.body.alasan || 'Pembatalan transaksi oleh kasir'; | |
| const trans = await TransaksiService.prosesVoidTransaksi(transaksiId, alasan, actorId, ip, userAgent); | |
| return sukses(res, trans, 'Transaksi berhasil di-void'); | |
| } catch (error) { | |
| next(error); | |
| } | |
| } | |
| static async retur(req: AuthenticatedRequest, res: Response, next: NextFunction) { | |
| try { | |
| const actorId = req.user.id; | |
| const ip = (req.ip || req.socket.remoteAddress || 'unknown').replace('::ffff:', ''); | |
| const userAgent = (req.headers['user-agent'] || 'unknown') as string; | |
| const retur = await TransaksiService.prosesReturBarang(req.body, actorId, ip, userAgent); | |
| return sukses(res, retur, 'Retur barang berhasil dicatat'); | |
| } catch (error) { | |
| next(error); | |
| } | |
| } | |
| } | |