diff --git a/migrations/20250104074851-create-user.js b/migrations/20250104074851-create-user.js index 51a4a24..d2dba97 100644 --- a/migrations/20250104074851-create-user.js +++ b/migrations/20250104074851-create-user.js @@ -22,6 +22,7 @@ module.exports = { role: { type: Sequelize.ENUM('admin', 'user'), allowNull: false, + defaultValue: 'user', }, firstName: { type: Sequelize.STRING, diff --git a/migrations/20250105063054-create-cart.js b/migrations/20250105063054-create-cart.js index 8f18d49..ae64465 100644 --- a/migrations/20250105063054-create-cart.js +++ b/migrations/20250105063054-create-cart.js @@ -32,7 +32,7 @@ module.exports = { type: Sequelize.INTEGER, allowNull: false, references: { - model: 'Invoices', // نام جدول Invoices + model: 'Invoices', key: 'id', }, onDelete: 'CASCADE', diff --git a/src/app.module.ts b/src/app.module.ts index f8ee676..536d2ea 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -5,7 +5,7 @@ import { ConfigModule } from "@nestjs/config"; import { SequelizeModule } from "@nestjs/sequelize"; import { databaseConfig } from "../config/database.config"; import { UsersModule } from './users/users.module'; -import { ProductsModule } from './shop/shop.module'; +import { ShopModule } from './shop/shop.module'; @Module({ @@ -15,7 +15,7 @@ import { ProductsModule } from './shop/shop.module'; }), SequelizeModule.forRoot(databaseConfig), UsersModule, - ProductsModule, + ShopModule, ], controllers: [AppController], diff --git a/src/shop/shop.controller.ts b/src/shop/shop.controller.ts index 68e74fd..c4489a9 100644 --- a/src/shop/shop.controller.ts +++ b/src/shop/shop.controller.ts @@ -1,13 +1,13 @@ import { Controller, Get, Post, Body, Param, Delete, Query, Put, UseGuards, Request, Patch, HttpException, HttpStatus } from "@nestjs/common"; +import { InjectModel } from "@nestjs/sequelize"; import { ShopService } from "./shop.service"; -import { Product } from "./entities/product.entity"; -import { CreateProductDto } from "./dto/products/create-product.dto"; -import { UpdateProductDto } from "./dto/products/update-product.dto"; import { RoleGuard } from "src/users/guard/role.guard"; -import { AddToCartDto } from "./dto/cart/add-to-cart.dto"; import { JwtAuthGuard } from "src/users/guard/auth.guard"; +import { CreateProductDto } from "./dto/products/create-product.dto"; +import { UpdateProductDto } from "./dto/products/update-product.dto"; import { UpdateCartDto } from "./dto/cart/update-cart.dto"; -import { InjectModel } from "@nestjs/sequelize"; +import { AddToCartDto } from "./dto/cart/add-to-cart.dto"; +import { Product } from "./entities/product.entity"; import { Transaction } from "./entities/transaction.entity"; import { Payment } from "./entities/payment.entity"; @@ -54,12 +54,12 @@ export class ShopController { //delete a product (admin) @UseGuards(RoleGuard) @Delete("product/:id") - async remove(@Param("id") id: string): Promise<{ message: string }> { + async remove(@Param("id") id: string){ return this.shopService.remove(id); } ////////////////////////////////////////cart//////////////////////////////////////// //create and a item to cart (user) - @UseGuards(JwtAuthGuard) + @UseGuards(JwtAuthGuard) @Post("cart") async createAndAddItemToCart(@Body() addToCartDto: AddToCartDto, @Request() req: any) { const userId = req.user.id; @@ -211,7 +211,7 @@ export class ShopController { async getInvoices() { return this.shopService.getInvoices(); } - //get specific user invoices + //get specific user invoices (admin) @UseGuards(RoleGuard) @Get('invoice/:id') async getUserInvoice(@Param('id') id:number) { diff --git a/src/shop/shop.module.ts b/src/shop/shop.module.ts index 84a3d18..187e2d0 100644 --- a/src/shop/shop.module.ts +++ b/src/shop/shop.module.ts @@ -1,12 +1,12 @@ import { Module } from "@nestjs/common"; +import { JwtModule } from "@nestjs/jwt"; +import { SequelizeModule } from "@nestjs/sequelize"; import { ShopService } from "./shop.service"; import { ShopController } from "./shop.controller"; -import { SequelizeModule } from "@nestjs/sequelize"; -import { Product } from "./entities/product.entity"; import { RoleGuard } from "src/users/guard/role.guard"; -import { JwtModule } from "@nestjs/jwt"; -import { Cart } from "./entities/cart.entity"; import { JwtAuthGuard } from "src/users/guard/auth.guard"; +import { Product } from "./entities/product.entity"; +import { Cart } from "./entities/cart.entity"; import { Wallet } from "./entities/wallet.entity"; import { Transaction } from "./entities/transaction.entity"; import { Payment } from "./entities/payment.entity"; @@ -23,4 +23,4 @@ import { Invoice } from "./entities/invoice.entity"; controllers: [ShopController], providers: [ShopService, RoleGuard, JwtAuthGuard], }) -export class ProductsModule {} +export class ShopModule {} diff --git a/src/shop/shop.service.ts b/src/shop/shop.service.ts index f866fce..b25a4e3 100644 --- a/src/shop/shop.service.ts +++ b/src/shop/shop.service.ts @@ -1,14 +1,14 @@ import { Injectable } from "@nestjs/common"; +import { HttpException, HttpStatus } from "@nestjs/common"; +import { InternalServerErrorException } from "@nestjs/common"; +import { Op } from "sequelize"; import { InjectModel } from "@nestjs/sequelize"; -import { Product } from "./entities/product.entity"; import { CreateProductDto } from "./dto/products/create-product.dto"; import { UpdateProductDto } from "./dto/products/update-product.dto"; -import { Op } from "sequelize"; -import { HttpException, HttpStatus } from "@nestjs/common"; +import { Product } from "./entities/product.entity"; import { Cart } from "./entities/cart.entity"; import { Wallet } from "./entities/wallet.entity"; import { Transaction } from "./entities/transaction.entity"; -import { InternalServerErrorException } from "@nestjs/common"; import { Invoice } from "./entities/invoice.entity"; const ZarinpalCheckout = require("zarinpal-checkout"); diff --git a/src/users/entities/user.entity.ts b/src/users/entities/user.entity.ts index 49a60d0..a1c2727 100644 --- a/src/users/entities/user.entity.ts +++ b/src/users/entities/user.entity.ts @@ -10,6 +10,7 @@ export class User extends Model { @Column({ type: DataType.ENUM("admin", "user"), + defaultValue: "user", allowNull: false, }) role: string; @@ -23,7 +24,7 @@ export class User extends Model { @Column({ unique: true }) username: string; - @Column({ unique: true }) + @Column({ unique: true, allowNull: false }) phoneNumber: string; @Column({ @@ -34,12 +35,11 @@ export class User extends Model { @Column({ type: DataType.STRING, - allowNull: true, + allowNull: true, }) refreshToken: string; - } export enum Gender { - Male = 'male', - Female = 'female', + Male = "male", + Female = "female", } diff --git a/src/users/users.controller.ts b/src/users/users.controller.ts index 54e4669..f9feef9 100644 --- a/src/users/users.controller.ts +++ b/src/users/users.controller.ts @@ -6,17 +6,16 @@ import { LoginUserDto } from "./dto/login-user.dto"; import { JwtAuthGuard } from "src/users/guard/auth.guard"; import { UpdateUserDto } from "./dto/update-user.dto"; import { RoleGuard } from "src/users/guard/role.guard"; -import { plainToInstance } from "class-transformer"; @Controller("user") export class UsersController { constructor(private readonly usersService: UsersService) {} - //register as user + //register @Post("register") async register(@Body() createUserDto: CreateUserDto) { return this.usersService.register(createUserDto); } - //login as user + //login @Post("login") async login(@Body() loginUserDto: LoginUserDto) { return this.usersService.login(loginUserDto); @@ -58,7 +57,6 @@ export class UsersController { ){ return this.usersService.findAll(page, limit); } - // get a specific user info (admin) @UseGuards(RoleGuard) @Get("userinfo/:id") diff --git a/src/users/users.module.ts b/src/users/users.module.ts index 49d0fb8..0ad1819 100644 --- a/src/users/users.module.ts +++ b/src/users/users.module.ts @@ -1,15 +1,13 @@ import { Module } from '@nestjs/common'; -import { UsersService } from './users.service'; -import { UsersController } from './users.controller'; import { SequelizeModule } from '@nestjs/sequelize'; -import { User } from './entities/user.entity'; import { ConfigModule, ConfigService } from '@nestjs/config'; -import { PassportModule } from '@nestjs/passport'; import { JwtModule } from '@nestjs/jwt'; +import { PassportModule } from '@nestjs/passport'; +import { UsersService } from './users.service'; +import { UsersController } from './users.controller'; +import { User } from './entities/user.entity'; import { JwtAuthGuard } from 'src/users/guard/auth.guard'; - - @Module({ imports: [SequelizeModule.forFeature([User]), PassportModule.register({ defaultStrategy: 'jwt' }), diff --git a/src/users/users.service.ts b/src/users/users.service.ts index d9def3f..4e0170c 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -7,8 +7,6 @@ import { ConfigService } from "@nestjs/config"; import { CreateUserDto } from "./dto/create-user.dto"; import { LoginUserDto } from "./dto/login-user.dto"; import { UpdateUserDto } from "./dto/update-user.dto"; -import e from "express"; -import { IsInstance } from "class-validator"; @Injectable() export class UsersService { @@ -168,7 +166,7 @@ export class UsersService { try { const user = await this.userModel.findOne({ where: { id: userId }, - attributes: { exclude: ["password"] }, + attributes: { exclude: ["password","refreshToken"] }, }); if (!user) { throw new HttpException("User not found.", HttpStatus.NOT_FOUND);