xiongzhu 2 лет назад
Родитель
Сommit
cd207cd0ca

+ 17 - 4
src/membership/membership.admin.controller.ts

@@ -1,10 +1,13 @@
 import { Public } from '../auth/public.decorator'
 import { MembershipService } from './membership.service'
-import { Body, Controller, Get, Post, Req } from '@nestjs/common'
+import { Body, Controller, Delete, Get, Param, Post, Put, Req } from '@nestjs/common'
 import { MemberPlanDto } from './dto/memberPlan.dto'
 import { HasRoles } from '../auth/roles.decorator'
 import { Role } from '../model/role.enum'
 import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'
+import { PageRequest } from '../common/dto/page-request'
+import { MemberPlan } from './entities/memberPlan.entity'
+import { Membership } from './entities/membership.entity'
 
 @ApiTags('membership.admin')
 @Controller('/admin/membership')
@@ -13,8 +16,18 @@ import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'
 export class MembershipAdminController {
     constructor(private readonly membershipService: MembershipService) {}
 
-    @Post('/save')
-    async save(@Body() memberPlanDto: MemberPlanDto) {
-        return await this.membershipService.save(memberPlanDto)
+    @Post('/members')
+    public async listMembers(@Body() page: PageRequest<Membership>) {
+        return await this.membershipService.findAllMembers(page)
+    }
+
+    @Put('/plans')
+    async savePlan(@Body() memberPlanDto: MemberPlanDto) {
+        return await this.membershipService.savePlan(memberPlanDto)
+    }
+
+    @Delete('/plans/:id')
+    async deletePlan(@Param('id') id: number) {
+        return await this.membershipService.deletePlanById(id)
     }
 }

+ 16 - 1
src/membership/membership.service.ts

@@ -10,6 +10,9 @@ import { WeixinService } from 'src/weixin/weixin.service'
 import { Attach, AttachType } from '../weixin/dto/attach.dto'
 import { CommissionService } from '../commission/commission.service'
 import { BigNumber } from 'bignumber.js'
+import { PageRequest } from '../common/dto/page-request'
+import { Pagination, paginate } from 'nestjs-typeorm-paginate'
+
 @Injectable()
 export class MembershipService {
     constructor(
@@ -20,6 +23,10 @@ export class MembershipService {
         private readonly commissionService: CommissionService
     ) {}
 
+    async findAllMembers(req: PageRequest<Membership>): Promise<Pagination<Membership>> {
+        return await paginate<Membership>(this.memberShipRepository, req.page, req.search)
+    }
+
     async trial(userId: number) {
         let membership = await this.memberShipRepository.findOneBy({
             userId: userId
@@ -81,10 +88,18 @@ export class MembershipService {
         return await this.memberPlanRepository.find()
     }
 
-    async save(memberPlanDto: MemberPlanDto) {
+    async savePlan(memberPlanDto: MemberPlanDto) {
         return await this.memberPlanRepository.save(memberPlanDto)
     }
 
+    async deletePlanById(id: number) {
+        const plan = await this.memberPlanRepository.findOneBy({ id })
+        if (!plan) {
+            throw new NotFoundException(`Plan #${id} not found`)
+        }
+        await this.memberPlanRepository.remove(plan)
+    }
+
     async createOrder(userId: number, planId: number) {
         const plan = await this.memberPlanRepository.findOneBy({
             id: planId

+ 5 - 3
src/users/users.admin.controller.ts

@@ -19,6 +19,8 @@ import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'
 import { HasRoles } from '../auth/roles.decorator'
 import { Role } from '../model/role.enum'
 import { IPaginationOptions } from 'nestjs-typeorm-paginate'
+import { PageRequest } from 'src/common/dto/page-request'
+import { Users } from './entities/users.entity'
 
 @ApiTags('users.admin')
 @Controller('/admin/users')
@@ -27,9 +29,9 @@ import { IPaginationOptions } from 'nestjs-typeorm-paginate'
 export class UsersAdminController {
     constructor(private readonly usersService: UsersService) {}
 
-    @Get()
-    public async findAllUser(@Body() options: IPaginationOptions) {
-        return await this.usersService.findAll(options)
+    @Post()
+    public async list(@Body() page: PageRequest<Users>) {
+        return await this.usersService.findAll(page)
     }
 
     @Get('/get')

+ 5 - 0
src/users/users.controller.ts

@@ -46,6 +46,11 @@ export class UsersController {
         }
     }
 
+    @Post('/updatePassword')
+    public async updatePassword(@Body() { password }, @Req() req) {
+        await this.usersService.updatePassword(req.user.id, password)
+    }
+
     @Get('/invites')
     public async invites(@Req() req) {
         return this.usersService.getInvites(req.user.id)

+ 14 - 2
src/users/users.service.ts

@@ -20,6 +20,7 @@ import * as randomstring from 'randomstring'
 import { MembershipService } from '../membership/membership.service'
 import { paginate, Pagination, IPaginationOptions } from 'nestjs-typeorm-paginate'
 import { Role } from 'src/model/role.enum'
+import { PageRequest } from '../common/dto/page-request'
 
 @Injectable()
 export class UsersService {
@@ -31,8 +32,8 @@ export class UsersService {
         private readonly membershipService: MembershipService
     ) {}
 
-    async findAll(options: IPaginationOptions): Promise<Pagination<Users>> {
-        return await paginate<Users>(this.userRepository, options)
+    async findAll(req: PageRequest<Users>): Promise<Pagination<Users>> {
+        return await paginate<Users>(this.userRepository, req.page, req.search)
     }
 
     public async findByEmail(email: string): Promise<Users> {
@@ -126,6 +127,17 @@ export class UsersService {
         }
     }
 
+    public async updatePassword(id: number, password: string): Promise<Users> {
+        try {
+            const user = await this.userRepository.findOneBy({ id })
+            user.password = await this.hashingService.hash(password)
+
+            return await this.userRepository.save(user)
+        } catch (err) {
+            throw new HttpException(err, HttpStatus.BAD_REQUEST)
+        }
+    }
+
     public async updateProfileUser(id: string, userProfileDto: UserProfileDto): Promise<Users> {
         try {
             const user = await this.userRepository.findOneBy({ id: +id })