feat: implement save receipt functionality with transaction handling and DTOs
Test Suite / test (24.15.0) (push) Has been cancelled
Test Suite / test (24.15.0) (push) Has been cancelled
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user