MAJOR UPPDATE: "First Ai"

feat: add AI categorization for products and enhance user management

- Integrated AI service for category suggestions in receipt import and product management.
- Added premium subscription feature for users with corresponding API endpoints.
- Implemented admin interface for managing pending product suggestions.
- Enhanced user management to include premium status and corresponding UI updates.
- Updated database schema to support new fields for premium status and product status.
This commit is contained in:
Nils-Johan Gynther
2026-04-19 10:34:21 +02:00
parent 0286ab0991
commit 054a19ed7c
30 changed files with 917 additions and 77 deletions
@@ -1,7 +1,9 @@
import {
Controller,
Post,
Request,
UploadedFile,
UseGuards,
UseInterceptors,
BadRequestException,
} from '@nestjs/common';
@@ -9,6 +11,7 @@ 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 { JwtAuthGuard } from '../auth/jwt-auth.guard';
const ALLOWED_MIMES = [
'image/jpeg',
@@ -24,6 +27,7 @@ export class ReceiptImportController {
constructor(private readonly receiptImportService: ReceiptImportService) {}
@Post()
@UseGuards(JwtAuthGuard)
@UseInterceptors(
FileInterceptor('file', {
storage: memoryStorage(),
@@ -32,6 +36,7 @@ export class ReceiptImportController {
)
async parseReceipt(
@UploadedFile() file?: Express.Multer.File,
@Request() req?: any,
): Promise<ParsedReceiptItem[]> {
if (!file?.buffer) {
throw new BadRequestException('Ingen fil skickades med.');
@@ -41,6 +46,7 @@ export class ReceiptImportController {
'Otillåten filtyp. Använd JPEG, PNG, WebP eller PDF.',
);
}
return this.receiptImportService.parseReceipt(file);
const isPremium = req?.user?.isPremium === true || req?.user?.role === 'admin';
return this.receiptImportService.parseReceipt(file, isPremium);
}
}