Compare commits
	
		
			2 Commits 
		
	
	
		
			e18858fd60
			...
			be0f01bc1a
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | be0f01bc1a | 10 months ago | 
|  | cb3eaeb425 | 10 months ago | 
				 5 changed files with 97 additions and 0 deletions
			
			
		| @ -0,0 +1,14 @@ | |||||||
|  | import { Table, Model, Column, BelongsTo, ForeignKey } from "sequelize-typescript"; | ||||||
|  | import { User } from "../../users/entities/user.entity"; | ||||||
|  | import { Product } from "../../products/entities/product.entity"; | ||||||
|  | 
 | ||||||
|  | @Table | ||||||
|  | export class Invoice extends Model<Invoice> { | ||||||
|  |   @ForeignKey(() => User) | ||||||
|  |   @Column | ||||||
|  |   userId: number; | ||||||
|  |   @BelongsTo(() => User) | ||||||
|  |   user: User; | ||||||
|  |   @Column | ||||||
|  |   totalAmount: number; | ||||||
|  | } | ||||||
| @ -0,0 +1,17 @@ | |||||||
|  | import { Controller, Get, Post, Body, Patch, Param, Delete } from "@nestjs/common"; | ||||||
|  | import { InvoiceService } from "./invoice.service"; | ||||||
|  | import { Invoice } from "./entities/invoice.entity"; | ||||||
|  | 
 | ||||||
|  | @Controller("invoice") | ||||||
|  | export class InvoiceController { | ||||||
|  |   constructor(private readonly invoiceService: InvoiceService) {} | ||||||
|  |   @Post("create") | ||||||
|  |   async createInvoice(@Body() body: { userId: number; totalAmount: number }): Promise<Invoice> { | ||||||
|  |     const { userId, totalAmount } = body; | ||||||
|  |     return this.invoiceService.createInvoice(userId, totalAmount); | ||||||
|  |   } | ||||||
|  |   @Get(":userId") | ||||||
|  |   async getInvoices(@Param("userId") userId: number): Promise<any> { | ||||||
|  |     return this.invoiceService.getInvoicesByUser(userId); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | import { Module } from '@nestjs/common'; | ||||||
|  | import { InvoiceService } from './invoice.service'; | ||||||
|  | import { InvoiceController } from './invoice.controller'; | ||||||
|  | import { SequelizeModule } from '@nestjs/sequelize'; | ||||||
|  | import { Invoice } from './entities/invoice.entity'; | ||||||
|  | 
 | ||||||
|  | @Module({ | ||||||
|  |   imports : [SequelizeModule.forFeature([Invoice])], | ||||||
|  |   controllers: [InvoiceController], | ||||||
|  |   providers: [InvoiceService], | ||||||
|  | }) | ||||||
|  | export class InvoiceModule {} | ||||||
| @ -0,0 +1,52 @@ | |||||||
|  | import { HttpException, HttpStatus, Injectable } from "@nestjs/common"; | ||||||
|  | import { InjectModel } from "@nestjs/sequelize"; | ||||||
|  | import { Invoice } from "./entities/invoice.entity"; | ||||||
|  | import { where } from "sequelize"; | ||||||
|  | 
 | ||||||
|  | @Injectable() | ||||||
|  | export class InvoiceService { | ||||||
|  |   constructor(@InjectModel(Invoice) private readonly invoiceModel: typeof Invoice) {} | ||||||
|  | 
 | ||||||
|  |   async createInvoice(userId: number, totalAmount: number): Promise<Invoice> { | ||||||
|  |     try { | ||||||
|  |       if (!userId) { | ||||||
|  |         throw new HttpException("User id not found!", HttpStatus.BAD_REQUEST); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       const newInvoice = await this.invoiceModel.create({ userId, totalAmount }); | ||||||
|  |       return newInvoice; | ||||||
|  |     } catch (error) { | ||||||
|  |    
 | ||||||
|  |       if (error instanceof HttpException) { | ||||||
|  |         throw error; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       throw new HttpException("An error occurred while creating the invoice.", HttpStatus.INTERNAL_SERVER_ERROR); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   async getInvoicesByUser(userId: number): Promise<Invoice[]> { | ||||||
|  |     try { | ||||||
|  |       if (!userId) { | ||||||
|  |         throw new HttpException('User ID is required.', HttpStatus.BAD_REQUEST); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       const invoices = await this.invoiceModel.findAll({ | ||||||
|  |         where: { userId }, | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       if (!invoices || invoices.length === 0) { | ||||||
|  |         throw new HttpException('No invoices found for this user.', HttpStatus.NOT_FOUND); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       return invoices; | ||||||
|  |     } catch (error) { | ||||||
|  |       if (error instanceof HttpException) { | ||||||
|  |         throw error; | ||||||
|  |       } | ||||||
|  |       throw new HttpException( | ||||||
|  |         'An error occurred while retrieving invoices.', | ||||||
|  |         HttpStatus.INTERNAL_SERVER_ERROR, | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue