update 9 files

master
alimohtarami 7 days ago
parent d9be3397f7
commit 5d524effec
  1. 2
      src/app.module.ts
  2. 16
      src/products/dto/create-product.dto.ts
  3. 4
      src/products/dto/update-product.dto.ts
  4. 30
      src/products/entities/product.entity.ts
  5. 42
      src/products/products.controller.ts
  6. 12
      src/products/products.module.ts
  7. 41
      src/products/products.service.ts

@ -6,6 +6,7 @@ import { SequelizeModule } from "@nestjs/sequelize";
import { databaseConfig } from "../config/database.config";
import { UsersModule } from './users/users.module';
import { ShopModule } from './shop/shop.module';
import { ProductsModule } from './products/products.module';
@Module({
@ -14,6 +15,7 @@ import { ShopModule } from './shop/shop.module';
isGlobal: true,
}),
SequelizeModule.forRoot(databaseConfig),
ProductsModule,
UsersModule,
ShopModule,

@ -0,0 +1,16 @@
import { IsNotEmpty, IsNumber, IsString, Min } from 'class-validator';
export class CreateProductDto {
@IsNotEmpty()
@IsString()
name: string;
@IsNotEmpty()
@IsString()
description: string;
@IsNotEmpty()
@IsNumber()
@Min(0)
price: number;
}

@ -0,0 +1,4 @@
import { PartialType } from '@nestjs/mapped-types';
import { CreateProductDto } from './create-product.dto';
export class UpdateProductDto extends PartialType(CreateProductDto) {}

@ -0,0 +1,30 @@
import { Table, Column, Model, DataType, PrimaryKey, AutoIncrement, Default } from 'sequelize-typescript';
@Table({ tableName: 'products', timestamps: true })
export class Product extends Model<Product> {
@PrimaryKey
@AutoIncrement
@Column(DataType.INTEGER)
id: number;
@Column(DataType.STRING)
name: string;
@Column(DataType.STRING)
description: string;
@Column(DataType.DECIMAL(10, 2))
price: number;
@Default(true)
@Column(DataType.BOOLEAN)
isActive: boolean;
@Default(DataType.NOW)
@Column({ type: DataType.DATE })
createdAt: Date;
@Default(DataType.NOW)
@Column({ type: DataType.DATE })
updatedAt: Date;
}

@ -0,0 +1,42 @@
import {
Controller,
Get,
Post,
Body,
Patch,
Param,
Delete,
} from '@nestjs/common';
import { ProductsService } from './products.service';
import { CreateProductDto } from './dto/create-product.dto';
import { UpdateProductDto } from './dto/update-product.dto';
@Controller('products')
export class ProductsController {
constructor(private readonly productsService: ProductsService) {}
@Post()
create(@Body() createProductDto: CreateProductDto) {
return this.productsService.create(createProductDto);
}
@Get()
findAll() {
return this.productsService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.productsService.findOne(+id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updateProductDto: UpdateProductDto) {
return this.productsService.update(+id, updateProductDto);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.productsService.remove(+id);
}
}

@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { SequelizeModule } from '@nestjs/sequelize';
import { ProductsService } from './products.service';
import { ProductsController } from './products.controller';
import { Product } from '../shop/entities/product.entity';
@Module({
imports: [SequelizeModule.forFeature([Product])],
controllers: [ProductsController],
providers: [ProductsService],
})
export class ProductsModule {}

@ -0,0 +1,41 @@
import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectModel } from '@nestjs/sequelize';
import { Product } from '../shop/entities/product.entity';
import { CreateProductDto } from './dto/create-product.dto';
import { UpdateProductDto } from './dto/update-product.dto';
@Injectable()
export class ProductsService {
constructor(
@InjectModel(Product)
private readonly productModel: typeof Product,
) {}
async create(createProductDto: CreateProductDto) {
return this.productModel.create(createProductDto);
}
async findAll() {
return this.productModel.findAll();
}
async findOne(id: number) {
const product = await this.productModel.findByPk(id);
if (!product) {
throw new NotFoundException(`Product with ID ${id} not found`);
}
return product;
}
async update(id: number, updateProductDto: UpdateProductDto) {
const product = await this.findOne(id);
await product.update(updateProductDto);
return product;
}
async remove(id: number) {
const product = await this.findOne(id);
await product.destroy();
return { message: 'Product deleted successfully' };
}
}
Loading…
Cancel
Save