seperate module for reseller
This commit is contained in:
+19
@@ -0,0 +1,19 @@
|
||||
import { ApiProperty } from "@nestjs/swagger";
|
||||
import { IsMobilePhone, IsNotEmpty, IsString, Length } from "class-validator";
|
||||
import { AuthMessage } from "../../../common/enums/message.enum";
|
||||
|
||||
|
||||
export class CreateResellerDto {
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
@Length(2, 50,)
|
||||
@ApiProperty({ description: "name", example: "mahyar" })
|
||||
name: string;
|
||||
|
||||
@IsNotEmpty({ message: AuthMessage.PHONE_NOT_EMPTY })
|
||||
@IsMobilePhone("fa-IR", {}, { message: AuthMessage.INVALID_PHONE_FORMAT })
|
||||
@Length(11, 11, { message: AuthMessage.PHONE_SHOULD_BE_11_DIGIT })
|
||||
@ApiProperty({ description: "phone number", default: "09922320740" })
|
||||
phone: string;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import { PartialType } from '@nestjs/swagger';
|
||||
import { CreateResellerDto } from './create-reseller.dto';
|
||||
|
||||
export class UpdateResellerDto extends PartialType(CreateResellerDto) {}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
import { Column, Entity, JoinColumn, OneToMany, OneToOne } from "typeorm";
|
||||
|
||||
import { User } from "../../users/entities/user.entity";
|
||||
import { BaseEntity } from "../../../common/entities/base.entity";
|
||||
|
||||
@Entity()
|
||||
export class Reseller extends BaseEntity {
|
||||
@Column({ type: "varchar", length: 100, unique: true })
|
||||
name: string;
|
||||
|
||||
//---------------------------------------
|
||||
|
||||
@OneToOne(() => User,user=>user.ownedReseller)
|
||||
@JoinColumn()
|
||||
owner!: User;
|
||||
|
||||
@OneToMany(() => User, user => user.reseller)
|
||||
agents: User[];
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import { Injectable } from "@nestjs/common";
|
||||
import { InjectRepository } from "@nestjs/typeorm";
|
||||
import { Repository } from "typeorm";
|
||||
import { Reseller } from "../entities/reseller.entity";
|
||||
|
||||
|
||||
@Injectable()
|
||||
export class ResellerRepository extends Repository<Reseller> {
|
||||
constructor(@InjectRepository(Reseller) resellerRepository: Repository<Reseller>) {
|
||||
super(resellerRepository.target, resellerRepository.manager, resellerRepository.queryRunner);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import { Controller, Get, Post, Body } from '@nestjs/common';
|
||||
import { ResellerService } from './reseller.service';
|
||||
import { ApiOperation } from '@nestjs/swagger';
|
||||
import { PermissionsDec } from '../../common/decorators/permission.decorator';
|
||||
import { PermissionEnum } from '../users/enums/permission.enum';
|
||||
import { CreateResellerDto } from './dto/create-reseller.dto';
|
||||
|
||||
@Controller('reseller')
|
||||
export class ResellerController {
|
||||
constructor(
|
||||
private readonly resellerService: ResellerService,
|
||||
|
||||
) { }
|
||||
|
||||
|
||||
@ApiOperation({ summary: "create Reseller ==> admin route" })
|
||||
@PermissionsDec(PermissionEnum.RESELLER)
|
||||
@Post("reseller")
|
||||
createReseller(@Body() dto: CreateResellerDto) {
|
||||
return this.resellerService.create(dto)
|
||||
}
|
||||
|
||||
@ApiOperation({ summary: "get Resellers ==> admin route" })
|
||||
@PermissionsDec(PermissionEnum.RESELLER)
|
||||
@Get("reseller")
|
||||
getResellers() {
|
||||
return this.resellerService.findAll()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ResellerService } from './reseller.service';
|
||||
import { ResellerController } from './reseller.controller';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { Reseller } from './entities/reseller.entity';
|
||||
import { ResellerRepository } from './repositories/reseller.repository';
|
||||
import { UsersModule } from '../users/users.module';
|
||||
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([Reseller]), UsersModule],
|
||||
controllers: [ResellerController],
|
||||
providers: [ResellerService, ResellerRepository],
|
||||
})
|
||||
export class ResellerModule { }
|
||||
@@ -0,0 +1,40 @@
|
||||
import { BadRequestException, Injectable } from '@nestjs/common';
|
||||
import { UsersService } from '../users/providers/users.service';
|
||||
import { CreateResellerDto } from './dto/create-reseller.dto';
|
||||
import { ResellerRepository } from './repositories/reseller.repository';
|
||||
import { AuthMessage } from '../../common/enums/message.enum';
|
||||
|
||||
@Injectable()
|
||||
export class ResellerService {
|
||||
constructor(
|
||||
private readonly usersService: UsersService,
|
||||
private readonly resellerRepository: ResellerRepository,
|
||||
) { }
|
||||
|
||||
async create(dto: CreateResellerDto) {
|
||||
const { name, phone } = dto
|
||||
|
||||
const user = await this.usersService.findOneWithPhone(phone)
|
||||
|
||||
if (!user) {
|
||||
throw new BadRequestException(AuthMessage.USER_NOT_FOUND)
|
||||
}
|
||||
|
||||
const reseller = this.resellerRepository.create({
|
||||
name,
|
||||
owner: user
|
||||
})
|
||||
|
||||
await this.resellerRepository.save(reseller)
|
||||
|
||||
return reseller
|
||||
}
|
||||
|
||||
async findAll() {
|
||||
return this.resellerRepository.find({
|
||||
relations: {
|
||||
owner: true
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user