seperate module for reseller
This commit is contained in:
+3
-1
@@ -45,6 +45,7 @@ import { WalletsModule } from "./modules/wallets/wallets.module";
|
|||||||
import { DkalaModule } from "./modules/dkala/dkala.module";
|
import { DkalaModule } from "./modules/dkala/dkala.module";
|
||||||
import { DpageModule } from './modules/dpage/dpage.module';
|
import { DpageModule } from './modules/dpage/dpage.module';
|
||||||
import { DmailModule } from './modules/dmail/dmail.module';
|
import { DmailModule } from './modules/dmail/dmail.module';
|
||||||
|
import { ResellerModule } from './modules/reseller/reseller.module';
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
// TelegrafModule.forRootAsync(telegrafConfig()),
|
// TelegrafModule.forRootAsync(telegrafConfig()),
|
||||||
@@ -92,7 +93,8 @@ import { DmailModule } from './modules/dmail/dmail.module';
|
|||||||
DmenuModule,
|
DmenuModule,
|
||||||
DkalaModule,
|
DkalaModule,
|
||||||
DpageModule,
|
DpageModule,
|
||||||
DmailModule
|
DmailModule,
|
||||||
|
ResellerModule
|
||||||
],
|
],
|
||||||
controllers: [],
|
controllers: [],
|
||||||
})
|
})
|
||||||
|
|||||||
+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) {}
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
import { Column, Entity, JoinColumn, OneToMany, OneToOne } from "typeorm";
|
import { Column, Entity, JoinColumn, OneToMany, OneToOne } from "typeorm";
|
||||||
|
|
||||||
import { User } from "./user.entity";
|
import { User } from "../../users/entities/user.entity";
|
||||||
import { BaseEntity } from "../../../common/entities/base.entity";
|
import { BaseEntity } from "../../../common/entities/base.entity";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,7 +30,7 @@ import { TicketMessage } from "../../tickets/entities/ticket-message.entity";
|
|||||||
import { Ticket } from "../../tickets/entities/ticket.entity";
|
import { Ticket } from "../../tickets/entities/ticket.entity";
|
||||||
import { Wallet } from "../../wallets/entities/wallet.entity";
|
import { Wallet } from "../../wallets/entities/wallet.entity";
|
||||||
import { FinancialType } from "../enums/financial-type.enum";
|
import { FinancialType } from "../enums/financial-type.enum";
|
||||||
import { Reseller } from "./reseller.entity";
|
import { Reseller } from "../../reseller/entities/reseller.entity";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class User extends BaseEntity {
|
export class User extends BaseEntity {
|
||||||
|
|||||||
@@ -30,8 +30,7 @@ import { LegalUserRepository } from "../repositories/legal-user.repository";
|
|||||||
import { RealUserRepository } from "../repositories/real-user.repository";
|
import { RealUserRepository } from "../repositories/real-user.repository";
|
||||||
import { UserGroupRepository } from "../repositories/user-group.repository";
|
import { UserGroupRepository } from "../repositories/user-group.repository";
|
||||||
import { UserRepository } from "../repositories/users.repository";
|
import { UserRepository } from "../repositories/users.repository";
|
||||||
import { ResellerRepository } from "../repositories/reseller.repository";
|
|
||||||
import { CreateResellerDto } from "../DTO/create-reseller.dto";
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UsersService {
|
export class UsersService {
|
||||||
private readonly logger = new Logger(UsersService.name);
|
private readonly logger = new Logger(UsersService.name);
|
||||||
@@ -49,7 +48,6 @@ export class UsersService {
|
|||||||
private readonly smsService: SmsService,
|
private readonly smsService: SmsService,
|
||||||
private readonly cacheService: CacheService,
|
private readonly cacheService: CacheService,
|
||||||
private readonly referralsService: ReferralsService,
|
private readonly referralsService: ReferralsService,
|
||||||
private readonly resellerRepository: ResellerRepository,
|
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
/************************************************************ */
|
/************************************************************ */
|
||||||
@@ -385,15 +383,7 @@ export class UsersService {
|
|||||||
return { agent };
|
return { agent };
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************ */
|
|
||||||
|
|
||||||
async getResellersList() {
|
|
||||||
this.resellerRepository.find({
|
|
||||||
relations: {
|
|
||||||
owner: true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/************************************************************ */
|
/************************************************************ */
|
||||||
|
|
||||||
private async createEmailHashLink(email: string) {
|
private async createEmailHashLink(email: string) {
|
||||||
@@ -426,22 +416,5 @@ export class UsersService {
|
|||||||
|
|
||||||
/************************************************************ */
|
/************************************************************ */
|
||||||
|
|
||||||
async createReseller(dto: CreateResellerDto) {
|
|
||||||
const { name, phone } = dto
|
|
||||||
|
|
||||||
const user = await this.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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import { IUserIpAndHeaders, UserDec, UserIpAndHeaders } from "../../common/decor
|
|||||||
import { ParamDto } from "../../common/DTO/param.dto";
|
import { ParamDto } from "../../common/DTO/param.dto";
|
||||||
import { RequestOtpDto } from "../auth/DTO/request-otp.dto";
|
import { RequestOtpDto } from "../auth/DTO/request-otp.dto";
|
||||||
import { VerifyOtpDto } from "../auth/DTO/verify-otp.dto";
|
import { VerifyOtpDto } from "../auth/DTO/verify-otp.dto";
|
||||||
import { CreateResellerDto } from "./DTO/create-reseller.dto";
|
|
||||||
|
|
||||||
@AuthGuards()
|
@AuthGuards()
|
||||||
@Controller("users")
|
@Controller("users")
|
||||||
@@ -230,19 +229,5 @@ export class UsersController {
|
|||||||
return this.adminsService.createRole(createDto);
|
return this.adminsService.createRole(createDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== Reseller =========
|
|
||||||
|
|
||||||
@ApiOperation({ summary: "create Reseller ==> admin route" })
|
|
||||||
@PermissionsDec(PermissionEnum.RESELLER)
|
|
||||||
@Post("reseller")
|
|
||||||
createReseller(@Body() dto: CreateResellerDto) {
|
|
||||||
return this.usersService.createReseller(dto)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ApiOperation({ summary: "get Resellers ==> admin route" })
|
|
||||||
@PermissionsDec(PermissionEnum.RESELLER)
|
|
||||||
@Get("reseller")
|
|
||||||
getResellers( ) {
|
|
||||||
return this.usersService.getResellersList()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,12 +28,11 @@ import { AdminsService } from "./providers/admins.service";
|
|||||||
import { CustomersService } from "./providers/customers.service";
|
import { CustomersService } from "./providers/customers.service";
|
||||||
import { RefreshTokensRepository } from "./repositories/refresh-token.repository";
|
import { RefreshTokensRepository } from "./repositories/refresh-token.repository";
|
||||||
import { ReferralsModule } from "../referrals/referrals.module";
|
import { ReferralsModule } from "../referrals/referrals.module";
|
||||||
import { ResellerRepository } from "./repositories/reseller.repository";
|
|
||||||
import { Reseller } from "./entities/reseller.entity";
|
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
TypeOrmModule.forFeature([User, Role, UserGroup, UserSetting, RealUser, LegalUser, Permission, RefreshToken,Reseller]),
|
TypeOrmModule.forFeature([User, Role, UserGroup, UserSetting, RealUser, LegalUser, Permission, RefreshToken]),
|
||||||
WalletsModule,
|
WalletsModule,
|
||||||
UtilsModule,
|
UtilsModule,
|
||||||
AddressModule,
|
AddressModule,
|
||||||
@@ -54,7 +53,7 @@ import { Reseller } from "./entities/reseller.entity";
|
|||||||
RealUserRepository,
|
RealUserRepository,
|
||||||
LegalUserRepository,
|
LegalUserRepository,
|
||||||
AddressService,
|
AddressService,
|
||||||
ResellerRepository
|
|
||||||
],
|
],
|
||||||
controllers: [UsersController],
|
controllers: [UsersController],
|
||||||
exports: [UsersService, UserRepository, CustomersService, AdminsService, RefreshTokensRepository],
|
exports: [UsersService, UserRepository, CustomersService, AdminsService, RefreshTokensRepository],
|
||||||
|
|||||||
Reference in New Issue
Block a user