import { Controller, Get, Post, Body, Param, Query, UseGuards, Request, } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiBearerAuth } from '@nestjs/swagger'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { RequireCapability } from '../../common/decorators/capability.decorator'; import { JournalEntriesService } from './journal-entries.service'; import { CreateJournalEntryDto } from './dto/create-journal-entry.dto'; import { VoidJournalEntryDto } from './dto/void-journal-entry.dto'; @ApiTags('journal-entries') @Controller('journal-entries') @ApiBearerAuth() @UseGuards(JwtAuthGuard) export class JournalEntriesController { constructor(private jeService: JournalEntriesService) {} @Get() @ApiOperation({ summary: 'List journal entries' }) @RequireCapability('transactions.view') findAll( @Query('from') from?: string, @Query('to') to?: string, @Query('accountId') accountId?: string, @Query('type') type?: string, ) { return this.jeService.findAll({ from, to, accountId, type }); } @Get(':id') @ApiOperation({ summary: 'Get journal entry by ID' }) @RequireCapability('transactions.view') findOne(@Param('id') id: string) { return this.jeService.findOne(id); } @Post() @ApiOperation({ summary: 'Create a journal entry' }) @RequireCapability('transactions.edit') create(@Body() dto: CreateJournalEntryDto, @Request() req: any) { return this.jeService.create(dto, req.user.sub); } @Post(':id/post') @ApiOperation({ summary: 'Post (finalize) a journal entry' }) @RequireCapability('transactions.edit') post(@Param('id') id: string, @Request() req: any) { return this.jeService.post(id, req.user.sub); } @Post(':id/void') @ApiOperation({ summary: 'Void a journal entry' }) @RequireCapability('transactions.edit') void(@Param('id') id: string, @Body() dto: VoidJournalEntryDto, @Request() req: any) { return this.jeService.void(id, req.user.sub, dto.reason); } }