feat: implement save receipt functionality with transaction handling and DTOs
Test Suite / test (24.15.0) (push) Has been cancelled

This commit is contained in:
Nils-Johan Gynther
2026-05-09 15:04:23 +02:00
parent 853e853e5e
commit 8354abbc8f
10 changed files with 461 additions and 99 deletions
@@ -14,6 +14,8 @@ import { FileInterceptor } from '@nestjs/platform-express';
import { memoryStorage } from 'multer';
import { ReceiptImportService } from './receipt-import.service';
import { ParsedReceiptItem } from './dto/parsed-receipt-item.dto';
import { SaveReceiptDto } from './dto/save-receipt.dto';
import { SaveReceiptResponse } from './dto/save-receipt.response';
import { CreateUnitMappingDto } from './dto/create-unit-mapping.dto';
import { AuthGuard } from '@nestjs/passport';
@@ -87,4 +89,31 @@ export class ReceiptImportController {
dto.preferredUnit,
);
}
@HttpCode(200)
@Post('save')
@UseGuards(AuthGuard('jwt'))
@Throttle({ default: { ttl: 60_000, limit: 10 } })
async saveReceipt(
@Body() dto: SaveReceiptDto,
@Request() req?: any,
): Promise<SaveReceiptResponse> {
const userId =
typeof req?.user?.id === 'number'
? req.user.id
: typeof req?.user?.userId === 'number'
? req.user.userId
: undefined;
if (!userId) {
throw new BadRequestException('Kunde inte identifiera användaren.');
}
const isAdmin = req?.user?.role === 'admin';
if (dto.isAdminLearning && !isAdmin) {
throw new BadRequestException('Endast administratörer kan spara globala aliaser.');
}
return this.receiptImportService.saveReceipt(userId, dto);
}
}