xiongzhu 2 년 전
부모
커밋
d3b281a502
42개의 변경된 파일216개의 추가작업 그리고 67개의 파일을 삭제
  1. 5 1
      .env
  2. 5 1
      .env.production
  3. 15 15
      certs/platform_cert.pem
  4. 1 0
      package.json
  5. 18 2
      src/app.module.ts
  6. 2 2
      src/auth/jwt.strategy.ts
  7. 7 0
      src/chat-pdf/chat-pdf.module.ts
  8. 18 0
      src/chat-pdf/chat-pdf.service.spec.ts
  9. 4 0
      src/chat-pdf/chat-pdf.service.ts
  10. 2 2
      src/chat-role/chat-role.module.ts
  11. 1 1
      src/chat-role/chat-role.service.ts
  12. 1 1
      src/chat-role/dto/chat-role.dto.ts
  13. 1 1
      src/chat-role/entities/chat-role.entity.ts
  14. 2 2
      src/chat/chat.controller.ts
  15. 2 2
      src/chat/chat.service.ts
  16. 1 1
      src/comment/comment.controller.ts
  17. 3 3
      src/commission/commission.module.ts
  18. 3 3
      src/commission/commission.service.ts
  19. 1 1
      src/mask/mask.module.ts
  20. 1 1
      src/membership/membership.controller.ts
  21. 2 2
      src/membership/membership.service.ts
  22. 1 1
      src/moments/entities/moments.entity.ts
  23. 1 1
      src/moments/moments.controller.ts
  24. 2 2
      src/moments/moments.module.ts
  25. 1 1
      src/moments/moments.service.ts
  26. 1 1
      src/notify/notify.controller.ts
  27. 2 2
      src/notify/notify.module.ts
  28. 1 1
      src/notify/notify.service.ts
  29. 1 1
      src/sys-config/sys-config.admin.controller.ts
  30. 1 1
      src/sys-config/sys-config.controller.ts
  31. 1 1
      src/sys-config/sys-config.service.ts
  32. 2 2
      src/user-balance/user-balance.admin.controller.ts
  33. 1 1
      src/users/users.admin.controller.ts
  34. 1 1
      src/users/users.module.ts
  35. 1 1
      src/users/users.service.ts
  36. 1 1
      src/weixin/weixin.controller.ts
  37. 1 1
      src/weixin/weixin.service.spec.ts
  38. 3 3
      src/withdraw/withdraw.admin.controller.ts
  39. 1 1
      src/withdraw/withdraw.module.ts
  40. 1 1
      test/register/register.e2e-spec.ts
  41. 2 2
      test/users/users.e2e-spec.ts
  42. 95 0
      yarn.lock

+ 5 - 1
.env

@@ -66,4 +66,8 @@ WX_NOTIFY_URL=https://gpt.izouma.com/api/notify/weixin
 
 REDIS_URI=redis://:4dSM4yvhbS6@8@oE@47.97.42.229:6379/1
 
-PG_URI=postgres://postgres:D$&g3a9BCJH&$Nzh@47.97.42.229:5432/gpt_test
+PG_HOST=47.97.42.229
+PG_PORT=5432
+PG_USERNAME=postgres
+PG_PASSWORD=D$&g3a9BCJH&$Nzh
+PG_DATABASE=gpt_test

+ 5 - 1
.env.production

@@ -66,4 +66,8 @@ WX_NOTIFY_URL=https://gpt.izouma.com/api/notify/weixin
 
 REDIS_URI=redis://:4dSM4yvhbS6@8@oE@127.0.0.1:6379/0
 
-PG_URI=postgres://postgres:D$&g3a9BCJH&$Nzh@localhost:5432/gpt
+PG_HOST=localhost
+PG_PORT=5432
+PG_USERNAME=postgres
+PG_PASSWORD=D$&g3a9BCJH&$Nzh
+PG_DATABASE=gpt

+ 15 - 15
certs/platform_cert.pem

@@ -1,24 +1,24 @@
 -----BEGIN CERTIFICATE-----
-MIIEFDCCAvygAwIBAgIUOLcd3WMB5BSgOavY0U/mHGe7YuUwDQYJKoZIhvcNAQEL
+MIIEFDCCAvygAwIBAgIUGr284GcLTTRjNDaV6KcUfJS22F0wDQYJKoZIhvcNAQEL
 BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
 FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
-Q0EwHhcNMjMwNDE4MDcwMDQwWhcNMjgwNDE2MDcwMDQwWjBuMRgwFgYDVQQDDA9U
+Q0EwHhcNMjMwNTA4MDcyMjI5WhcNMjgwNTA2MDcyMjI5WjBuMRgwFgYDVQQDDA9U
 ZW5wYXkuY29tIHNpZ24xEzARBgNVBAoMClRlbnBheS5jb20xHTAbBgNVBAsMFFRl
 bnBheS5jb20gQ0EgQ2VudGVyMQswCQYDVQQGDAJDTjERMA8GA1UEBwwIU2hlblpo
-ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDStHfUxUIb01xR5axp
-aQe4SdmMPAAgxB+8YGJndSUuIxb4pm0U8p2ssUE0qzIO9mZW4J8tPF+Wkr4vLzp0
-ayHKDSKdl+lgEmNx3WLsuzjPTurdWct8RsEbTP8oCT7mDaOSYva5NrZPjCIyj5nM
-zgfnPSounCjnzulEFgli/VyJQqiolZOt/qkRALIZFMN1NGs3PRlaVzGhRi3KJbVV
-EKXURHrPl2Efy2cvwV4E4iUjgFvRZ3kt3MPCCld6b8EM8pXVhUOxj5WICVNUc565
-ySpqQrbqqNitIwpx+pe/YtF2qoZg6DVdZy+tvexoAp7WWlJSlNbiCWBErKVeqprk
-j1ZdAgMBAAGjgbkwgbYwCQYDVR0TBAIwADALBgNVHQ8EBAMCA/gwgZsGA1UdHwSB
+ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBUwlhVE2+QwZkXwlW
+qtXmVVrD8UG+w6jJ8iJqm5fEnHpfah0D6EvPKS4rkcegkNivQphMEksQ570rIOih
+jIqi2eJRrkGxGybFCvbpSPd/yLtaqEoQMY0PZYTenEUZdONzW6Fj6PWZ4zwB5TAe
+aK10qqiihcW6uY8qJc1+UtWhrVMikX8tWbbC6iYlVwzbaamF+LUHPR3Z1PWUZ2mw
+sovZoEuoUv1jY2Qs0r160YSlkFGcFVE1DJrfulVavaxdXQbWlQ/Uc0eY9V6UDpaz
+s7py1ZatqDlud2IBNzI1cMQbCOtkLORIx8WblkP6y9TBYLt0pTZy+eEi2F7A0UBh
+oWEVAgMBAAGjgbkwgbYwCQYDVR0TBAIwADALBgNVHQ8EBAMCA/gwgZsGA1UdHwSB
 kzCBkDCBjaCBiqCBh4aBhGh0dHA6Ly9ldmNhLml0cnVzLmNvbS5jbi9wdWJsaWMv
 aXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQzOTc1NDk4NDZDMDFDM0U4
 RUJEMiZzZz1IQUNDNDcxQjY1NDIyRTEyQjI3QTlEMzNBODdBRDFDREY1OTI2RTE0
-MDM3MTANBgkqhkiG9w0BAQsFAAOCAQEAoSmerBMFyiplNhMgEX3pa9WcIqKFA+aG
-07TGqMT/GdAAakKnk43ukj+yfeIy2g0J6olxS8TR/HUq0zj+DhnHidDfu/m++PZ+
-OiPjEI5Lgu4m0VgJUCcAAQbbXt+YF7TUlptXZZK8VqAaHAqOg15Yu9ykrPbKPkC0
-vW2Mkz1N9zA9axBEVtaZHDylWghbAemsT6OTmU9gH2qONygYjVOVj0rue8gKqQih
-0He/X+EujrvSB7aLP56IvOCBeM18zGg0Wc+P7cWmbgSpheoR3v/3e3F92qV133YH
-b7kXwhk76WqjZaoALdyrsFRnpwj7YzNgnHwtJBrQImFfpPp5L5+kmg==
+MDM3MTANBgkqhkiG9w0BAQsFAAOCAQEAulG8O0pA5MP/84h4yUEzIdSEqXHBy+ce
+9+tydAVau9X7iR8lmbpH9NYD1jjYLD2a5rvtzR4pJ90e8MLb4lIDe8W+CMRSTQNj
+6WUZACHrb5n253zSwR0qM87xZ96DY6rWvrjkqK/tmCQRxF9kOHtgu0pILPAEmmZH
+ceEML9AA1Q1mv9R9qstRGe+TK6A7kMUgWJqAILpTUWHVQ3ITsGXiYbmf9oYhc9C8
+9VINEIheMjRLN2wYccIlGyHvWVlZYy/P+xBlptN/LfymkQbDaqxqiMzRxf0Pm8h1
+GQttI7Cq1f/oW7jrPBaZfX1Y+JzBusbzfmF/sDjSNEN9pDNYDgiBpg==
 -----END CERTIFICATE-----

+ 1 - 0
package.json

@@ -68,6 +68,7 @@
     "passport-http-bearer": "^1.0.1",
     "passport-jwt": "^4.0.1",
     "pem": "^1.14.7",
+    "pg": "^8.11.0",
     "quick-lru": "^5.0.0",
     "randomstring": "^1.2.3",
     "reflect-metadata": "^0.1.13",

+ 18 - 2
src/app.module.ts

@@ -24,6 +24,7 @@ import { ChatRoleModule } from './chat-role/chat-role.module'
 import { LabelModule } from './label/label.module'
 import { MomentsModule } from './moments/moments.module'
 import { CommentModule } from './comment/comment.module'
+import { ChatPdfModule } from './chat-pdf/chat-pdf.module';
 @Module({
     imports: [
         DevtoolsModule.register({
@@ -68,6 +69,20 @@ import { CommentModule } from './comment/comment.module'
                 }
             })
         }),
+        TypeOrmModule.forRootAsync({
+            imports: [ConfigModule],
+            inject: [ConfigService],
+            useFactory: (config: ConfigService) => ({
+                name: 'db1',
+                type: 'postgres',
+                host: config.get<string>('PG_HOST'),
+                port: config.get<number>('PG_PORT'),
+                username: config.get<string>('PG_USERNAME'),
+                password: config.get<string>('PG_PASSWORD'),
+                database: config.get<string>('PG_DATABASE'),
+                synchronize: true
+            })
+        }),
         AliyunModule,
         SmsModule,
         UsersModule,
@@ -85,7 +100,8 @@ import { CommentModule } from './comment/comment.module'
         ChatRoleModule,
         LabelModule,
         MomentsModule,
-        CommentModule
+        CommentModule,
+        ChatPdfModule
     ],
     controllers: [],
     providers: [
@@ -95,4 +111,4 @@ import { CommentModule } from './comment/comment.module'
         }
     ]
 })
-export class AppModule { }
+export class AppModule {}

+ 2 - 2
src/auth/jwt.strategy.ts

@@ -4,8 +4,8 @@ import { Inject, Injectable, Logger, UnauthorizedException } from '@nestjs/commo
 import jwtconfig from './jwt.config'
 import { ConfigType } from '@nestjs/config'
 import { Redis } from 'ioredis'
-import { UsersService } from 'src/users/users.service'
-import { Role } from 'src/model/role.enum'
+import { UsersService } from '../users/users.service'
+import { Role } from '../model/role.enum'
 
 @Injectable()
 export class JwtStrategy extends PassportStrategy(Strategy) {

+ 7 - 0
src/chat-pdf/chat-pdf.module.ts

@@ -0,0 +1,7 @@
+import { Module } from '@nestjs/common';
+import { ChatPdfService } from './chat-pdf.service';
+
+@Module({
+  providers: [ChatPdfService]
+})
+export class ChatPdfModule {}

+ 18 - 0
src/chat-pdf/chat-pdf.service.spec.ts

@@ -0,0 +1,18 @@
+import { Test, TestingModule } from '@nestjs/testing';
+import { ChatPdfService } from './chat-pdf.service';
+
+describe('ChatPdfService', () => {
+  let service: ChatPdfService;
+
+  beforeEach(async () => {
+    const module: TestingModule = await Test.createTestingModule({
+      providers: [ChatPdfService],
+    }).compile();
+
+    service = module.get<ChatPdfService>(ChatPdfService);
+  });
+
+  it('should be defined', () => {
+    expect(service).toBeDefined();
+  });
+});

+ 4 - 0
src/chat-pdf/chat-pdf.service.ts

@@ -0,0 +1,4 @@
+import { Injectable } from '@nestjs/common';
+
+@Injectable()
+export class ChatPdfService {}

+ 2 - 2
src/chat-role/chat-role.module.ts

@@ -3,8 +3,8 @@ import { TypeOrmModule } from '@nestjs/typeorm'
 import { ChatRole } from './entities/chat-role.entity'
 import { ChatRoleService } from './chat-role.service'
 import { ChatRoleController } from './chat-role.controller'
-import { LabelModule } from 'src/label/label.module'
-import { LabelService } from 'src/label/label.service'
+import { LabelModule } from '../label/label.module'
+import { LabelService } from '../label/label.service'
 
 @Module({
     imports: [TypeOrmModule.forFeature([ChatRole]), LabelModule],

+ 1 - 1
src/chat-role/chat-role.service.ts

@@ -9,7 +9,7 @@ import { ChatRole } from './entities/chat-role.entity'
 import { ChatRoleDto } from './dto/chat-role.dto'
 import { paginate, Pagination } from 'nestjs-typeorm-paginate'
 import { PageRequest } from '../common/dto/page-request'
-import { LabelService } from 'src/label/label.service'
+import { LabelService } from '../label/label.service'
 
 @Injectable()
 export class ChatRoleService {

+ 1 - 1
src/chat-role/dto/chat-role.dto.ts

@@ -1,5 +1,5 @@
 import { IsArray, IsNumber, IsString } from 'class-validator'
-import { Label } from 'src/label/entities/label.entity'
+import { Label } from '../../label/entities/label.entity'
 
 export class ChatRoleDto {
     @IsString()

+ 1 - 1
src/chat-role/entities/chat-role.entity.ts

@@ -1,7 +1,7 @@
 import { Exclude } from 'class-transformer'
 import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'
 import { ChatRoleDto } from '../dto/chat-role.dto'
-import { Label } from 'src/label/entities/label.entity'
+import { Label } from '../../label/entities/label.entity'
 
 @Entity()
 export class ChatRole {

+ 2 - 2
src/chat/chat.controller.ts

@@ -3,8 +3,8 @@ import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'
 import { ChatService } from './chat.service'
 import { Observable } from 'rxjs'
 import { Public } from '../auth/public.decorator'
-import { HasRoles } from 'src/auth/roles.decorator'
-import { Role } from 'src/model/role.enum'
+import { HasRoles } from '../auth/roles.decorator'
+import { Role } from '../model/role.enum'
 
 @ApiTags('chat')
 @Controller('chat')

+ 2 - 2
src/chat/chat.service.ts

@@ -11,10 +11,10 @@ import { format } from 'date-fns'
 import { MembershipService } from '../membership/membership.service'
 import { MemberType } from '../membership/entities/membership.entity'
 import { get_encoding } from '@dqbd/tiktoken'
-import { fetchSSE } from 'src/chatapi/fetch-sse'
+import { fetchSSE } from '../chatapi/fetch-sse'
 import { HttpService } from '@nestjs/axios'
 import * as types from '../chatapi/types'
-import { SysConfigService } from 'src/sys-config/sys-config.service'
+import { SysConfigService } from '../sys-config/sys-config.service'
 
 @Injectable()
 export class ChatService {

+ 1 - 1
src/comment/comment.controller.ts

@@ -11,7 +11,7 @@ import {
 import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'
 import { CommentService } from './comment.service'
 import { Comment } from './entities/comment.entity'
-import { PageRequest } from 'src/common/dto/page-request'
+import { PageRequest } from '../common/dto/page-request'
 import { CommentDto } from './dto/comment.dto'
 
 @ApiTags('comment')

+ 3 - 3
src/commission/commission.module.ts

@@ -4,9 +4,9 @@ import { CommissionController } from './commission.controller'
 import { TypeOrmModule } from '@nestjs/typeorm'
 import { CommissionConfig } from './entities/commission-config.entity'
 import { CommissionRecord } from './entities/commission-record.entity'
-import { Users } from 'src/users/entities/users.entity'
-import { UserBalanceModule } from 'src/user-balance/user-balance.module'
-import { MembershipModule } from 'src/membership/membership.module'
+import { Users } from '../users/entities/users.entity'
+import { UserBalanceModule } from '../user-balance/user-balance.module'
+import { MembershipModule } from '../membership/membership.module'
 
 @Module({
     imports: [

+ 3 - 3
src/commission/commission.service.ts

@@ -6,11 +6,11 @@ import { Repository } from 'typeorm'
 import { CommissionRecord } from './entities/commission-record.entity'
 import { Users } from '../users/entities/users.entity'
 import { UserBalanceService } from '../user-balance/user-balance.service'
-import { BalanceType as BalanceType } from 'src/user-balance/entities/balance-record.entity'
+import { BalanceType as BalanceType } from '../user-balance/entities/balance-record.entity'
 import { BigNumber } from 'bignumber.js'
 import { CommissionRecordDto } from './dto/commission-record.dto'
-import { hideSensitiveData } from 'src/utils/common'
-import { MembershipService } from 'src/membership/membership.service'
+import { hideSensitiveData } from '../utils/common'
+import { MembershipService } from '../membership/membership.service'
 
 @Injectable()
 export class CommissionService {

+ 1 - 1
src/mask/mask.module.ts

@@ -6,7 +6,7 @@ import { MaskAdminController } from './mask.admin.controller'
 import { BcryptService } from '../shared/hashing/bcrypt.service'
 import { HashingService } from '../shared/hashing/hashing.service'
 import { SmsModule } from '../sms/sms.module'
-import { MembershipModule } from 'src/membership/membership.module'
+import { MembershipModule } from '../membership/membership.module'
 
 @Module({
     imports: [SmsModule, TypeOrmModule.forFeature([Mask]), MembershipModule],

+ 1 - 1
src/membership/membership.controller.ts

@@ -13,7 +13,7 @@ import {
     Req
 } from '@nestjs/common'
 import { RenewDto } from './dto/renew.dto'
-import { WeixinService } from 'src/weixin/weixin.service'
+import { WeixinService } from '../weixin/weixin.service'
 
 @ApiTags('membership')
 @Controller('/membership')

+ 2 - 2
src/membership/membership.service.ts

@@ -6,13 +6,13 @@ import { MemberPlan } from './entities/memberPlan.entity'
 import { addDays } from 'date-fns'
 import { MemberPlanDto } from './dto/memberPlan.dto'
 import { MemberOrder, MemberOrderStatus, PayMethod } from './entities/member-order.entity'
-import { WeixinService } from 'src/weixin/weixin.service'
+import { WeixinService } from '../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'
-import { SysConfigService } from 'src/sys-config/sys-config.service'
+import { SysConfigService } from '../sys-config/sys-config.service'
 
 @Injectable()
 export class MembershipService {

+ 1 - 1
src/moments/entities/moments.entity.ts

@@ -1,5 +1,5 @@
 import { Exclude } from 'class-transformer'
-import { ChatRole } from 'src/chat-role/entities/chat-role.entity'
+import { ChatRole } from '../../chat-role/entities/chat-role.entity'
 import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'
 
 @Entity()

+ 1 - 1
src/moments/moments.controller.ts

@@ -1,7 +1,7 @@
 import { BadRequestException, Body, Controller, Get, Param, Post } from "@nestjs/common";
 import { ApiBearerAuth, ApiTags } from "@nestjs/swagger";
 import { MomentsService } from "./moments.service";
-import { PageRequest } from "src/common/dto/page-request";
+import { PageRequest } from "../common/dto/page-request";
 import { Moments } from "./entities/moments.entity";
 
 @ApiTags('moments')

+ 2 - 2
src/moments/moments.module.ts

@@ -3,8 +3,8 @@ import { TypeOrmModule } from '@nestjs/typeorm'
 import { Moments } from './entities/moments.entity'
 import { MomentsController } from './moments.controller'
 import { MomentsService } from './moments.service'
-import { ChatRoleModule } from 'src/chat-role/chat-role.module'
-import { ChatRoleService } from 'src/chat-role/chat-role.service'
+import { ChatRoleModule } from '../chat-role/chat-role.module'
+import { ChatRoleService } from '../chat-role/chat-role.service'
 
 @Module({
     imports: [TypeOrmModule.forFeature([Moments]), ChatRoleModule],

+ 1 - 1
src/moments/moments.service.ts

@@ -13,7 +13,7 @@ import { Moments } from './entities/moments.entity'
 
 import { paginate, Pagination } from 'nestjs-typeorm-paginate'
 import { PageRequest } from '../common/dto/page-request'
-import { ChatRoleService } from 'src/chat-role/chat-role.service'
+import { ChatRoleService } from '../chat-role/chat-role.service'
 import { ro } from 'date-fns/locale'
 
 @Injectable()

+ 1 - 1
src/notify/notify.controller.ts

@@ -1,6 +1,6 @@
 import { Body, Controller, Headers, HttpCode, Post } from '@nestjs/common'
 import { NotifyService } from './notify.service'
-import { Public } from 'src/auth/public.decorator'
+import { Public } from '../auth/public.decorator'
 import { ApiTags } from '@nestjs/swagger'
 
 @ApiTags('notify')

+ 2 - 2
src/notify/notify.module.ts

@@ -1,8 +1,8 @@
 import { Module } from '@nestjs/common'
 import { NotifyService } from './notify.service'
 import { NotifyController } from './notify.controller'
-import { WeixinModule } from 'src/weixin/weixin.module'
-import { MembershipModule } from 'src/membership/membership.module'
+import { WeixinModule } from '../weixin/weixin.module'
+import { MembershipModule } from '../membership/membership.module'
 
 @Module({
     imports: [WeixinModule, MembershipModule],

+ 1 - 1
src/notify/notify.service.ts

@@ -2,7 +2,7 @@ import { MembershipService } from './../membership/membership.service'
 import { Injectable } from '@nestjs/common'
 import { Attach, AttachType } from '../weixin/dto/attach.dto'
 import { WeixinService } from '../weixin/weixin.service'
-import { PayMethod } from 'src/membership/entities/member-order.entity'
+import { PayMethod } from '../membership/entities/member-order.entity'
 
 @Injectable()
 export class NotifyService {

+ 1 - 1
src/sys-config/sys-config.admin.controller.ts

@@ -2,7 +2,7 @@ import { Body, Controller, Get, Param, Post, Put } from '@nestjs/common'
 import { ApiTags } from '@nestjs/swagger'
 import { Public } from '../auth/public.decorator'
 import { SysConfigService } from './sys-config.service'
-import { PageRequest } from 'src/common/dto/page-request'
+import { PageRequest } from '../common/dto/page-request'
 import { SysConfig } from './entities/sys-config.entity'
 
 @ApiTags('sys-config.admin')

+ 1 - 1
src/sys-config/sys-config.controller.ts

@@ -3,7 +3,7 @@ import { ApiTags } from '@nestjs/swagger'
 import { Public } from '../auth/public.decorator'
 import { SysConfigService } from './sys-config.service'
 import { SysConfig } from './entities/sys-config.entity'
-import { PageRequest } from 'src/common/dto/page-request'
+import { PageRequest } from '../common/dto/page-request'
 
 @ApiTags('sys-config')
 @Controller('/sys-config')

+ 1 - 1
src/sys-config/sys-config.service.ts

@@ -2,7 +2,7 @@ import { Injectable, InternalServerErrorException, NotFoundException } from '@ne
 import { InjectRepository } from '@nestjs/typeorm'
 import { Repository } from 'typeorm'
 import { SysConfig } from './entities/sys-config.entity'
-import { PageRequest } from 'src/common/dto/page-request'
+import { PageRequest } from '../common/dto/page-request'
 import { Pagination, paginate } from 'nestjs-typeorm-paginate'
 
 @Injectable()

+ 2 - 2
src/user-balance/user-balance.admin.controller.ts

@@ -1,8 +1,8 @@
 import { Controller } from '@nestjs/common'
 import { UserBalanceService } from './user-balance.service'
 import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'
-import { HasRoles } from 'src/auth/roles.decorator'
-import { Role } from 'src/model/role.enum'
+import { HasRoles } from '../auth/roles.decorator'
+import { Role } from '../model/role.enum'
 
 @ApiTags('userBalance.admin')
 @ApiBearerAuth()

+ 1 - 1
src/users/users.admin.controller.ts

@@ -19,7 +19,7 @@ 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 { PageRequest } from '../common/dto/page-request'
 import { Users } from './entities/users.entity'
 import { UserCreateDto } from './dto/user-create.dto'
 

+ 1 - 1
src/users/users.module.ts

@@ -7,7 +7,7 @@ import { BcryptService } from '../shared/hashing/bcrypt.service'
 import { HashingService } from '../shared/hashing/hashing.service'
 import { SmsModule } from '../sms/sms.module'
 import { UsersAdminController } from './users.admin.controller'
-import { MembershipModule } from 'src/membership/membership.module'
+import { MembershipModule } from '../membership/membership.module'
 
 @Module({
     imports: [SmsModule, TypeOrmModule.forFeature([Users]), MembershipModule],

+ 1 - 1
src/users/users.service.ts

@@ -19,7 +19,7 @@ import { SmsService } from '../sms/sms.service'
 import * as randomstring from 'randomstring'
 import { MembershipService } from '../membership/membership.service'
 import { paginate, Pagination } from 'nestjs-typeorm-paginate'
-import { Role } from 'src/model/role.enum'
+import { Role } from '../model/role.enum'
 import { PageRequest } from '../common/dto/page-request'
 
 @Injectable()

+ 1 - 1
src/weixin/weixin.controller.ts

@@ -1,6 +1,6 @@
 import { Body, Controller, Get, Post, Query } from '@nestjs/common'
 import { WeixinService } from './weixin.service'
-import { Public } from 'src/auth/public.decorator'
+import { Public } from '../auth/public.decorator'
 import { ApiQuery, ApiTags } from '@nestjs/swagger'
 
 @ApiTags('weixin')

+ 1 - 1
src/weixin/weixin.service.spec.ts

@@ -23,7 +23,7 @@ describe('WeixinService', () => {
     describe('getRedirectUrl', () => {
         it('getRedirectUrl', async () => {
             expect(weixinService).toBeDefined()
-            console.log(weixinService.getRedirectUrl(''))
+            console.log(weixinService.getRedirectUrl('https://www.baidu.com'))
         })
     })
 })

+ 3 - 3
src/withdraw/withdraw.admin.controller.ts

@@ -3,9 +3,9 @@ import { Body, Controller, Post, Req } from '@nestjs/common'
 import { WithdrawApplyDto } from './dto/withdraw-apply.dto'
 import { WithdrawService } from './withdraw.service'
 import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'
-import { HasRoles } from 'src/auth/roles.decorator'
-import { Role } from 'src/model/role.enum'
-import { PageRequest } from 'src/common/dto/page-request'
+import { HasRoles } from '../auth/roles.decorator'
+import { Role } from '../model/role.enum'
+import { PageRequest } from '../common/dto/page-request'
 import { Withdraw } from './entities/withdraw.entity'
 
 @ApiTags('withdraw.admin')

+ 1 - 1
src/withdraw/withdraw.module.ts

@@ -4,7 +4,7 @@ import { WithdrawController } from './withdraw.controller'
 import { TypeOrmModule } from '@nestjs/typeorm'
 import { Withdraw } from './entities/withdraw.entity'
 import { WithdrawAdminController } from './withdraw.admin.controller'
-import { UserBalanceModule } from 'src/user-balance/user-balance.module'
+import { UserBalanceModule } from '../user-balance/user-balance.module'
 
 @Module({
     imports: [TypeOrmModule.forFeature([Withdraw]), UserBalanceModule],

+ 1 - 1
test/register/register.e2e-spec.ts

@@ -7,7 +7,7 @@ import {
   HttpStatus,
   ValidationPipe,
 } from '@nestjs/common';
-import { UserCreateDto } from 'src/users/dto/user-create.dto';
+import { UserCreateDto } from '../users/dto/user-create.dto';
 import { HashingService } from '../../src/shared/hashing/hashing.service';
 
 const user = {

+ 2 - 2
test/users/users.e2e-spec.ts

@@ -3,7 +3,7 @@ import * as request from 'supertest';
 import { AppModule } from './../../src/app.module';
 import { MailerService } from '../../src/shared/mailer/mailer.service';
 import { HttpStatus, ValidationPipe } from '@nestjs/common';
-import { AccessTokenGuard } from '../../src/iam/login/guards/access-token/access-token.guard';
+import { JwtAuthGuard } from '../../src/auth/jwt-auth.guard';
 
 const users = [
   {
@@ -33,7 +33,7 @@ describe('App (e2e)', () => {
       .useValue({
         sendMail: jest.fn(() => true),
       })
-      .overrideGuard(AccessTokenGuard)
+      .overrideGuard(JwtAuthGuard)
       .useValue({ canActivate: () => true })
       .compile();
 

+ 95 - 0
yarn.lock

@@ -2235,6 +2235,11 @@ buffer-from@^1.0.0:
   resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
   integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
 
+buffer-writer@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
+  integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
+
 buffer@^5.5.0:
   version "5.7.1"
   resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz"
@@ -5492,6 +5497,11 @@ pac-resolver@^5.0.0:
     ip "^1.1.5"
     netmask "^2.0.2"
 
+packet-reader@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
+  integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
+
 parent-module@^1.0.0:
   version "1.0.1"
   resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
@@ -5630,6 +5640,64 @@ performance-now@^2.1.0:
   resolved "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
   integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
 
+pg-cloudflare@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/pg-cloudflare/-/pg-cloudflare-1.1.0.tgz#833d70870d610d14bf9df7afb40e1cba310c17a0"
+  integrity sha512-tGM8/s6frwuAIyRcJ6nWcIvd3+3NmUKIs6OjviIm1HPPFEt5MzQDOTBQyhPWg/m0kCl95M6gA1JaIXtS8KovOA==
+
+pg-connection-string@^2.6.0:
+  version "2.6.0"
+  resolved "https://registry.npmmirror.com/pg-connection-string/-/pg-connection-string-2.6.0.tgz#12a36cc4627df19c25cc1b9b736cc39ee1f73ae8"
+  integrity sha512-x14ibktcwlHKoHxx9X3uTVW9zIGR41ZB6QNhHb21OPNdCCO3NaRnpJuwKIQSR4u+Yqjx4HCvy7Hh7VSy1U4dGg==
+
+pg-int8@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
+  integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
+
+pg-pool@^3.6.0:
+  version "3.6.0"
+  resolved "https://registry.npmmirror.com/pg-pool/-/pg-pool-3.6.0.tgz#3190df3e4747a0d23e5e9e8045bcd99bda0a712e"
+  integrity sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ==
+
+pg-protocol@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.npmmirror.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833"
+  integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==
+
+pg-types@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
+  integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
+  dependencies:
+    pg-int8 "1.0.1"
+    postgres-array "~2.0.0"
+    postgres-bytea "~1.0.0"
+    postgres-date "~1.0.4"
+    postgres-interval "^1.1.0"
+
+pg@^8.11.0:
+  version "8.11.0"
+  resolved "https://registry.npmmirror.com/pg/-/pg-8.11.0.tgz#a37e534e94b57a7ed811e926f23a7c56385f55d9"
+  integrity sha512-meLUVPn2TWgJyLmy7el3fQQVwft4gU5NGyvV0XbD41iU9Jbg8lCH4zexhIkihDzVHJStlt6r088G6/fWeNjhXA==
+  dependencies:
+    buffer-writer "2.0.0"
+    packet-reader "1.0.0"
+    pg-connection-string "^2.6.0"
+    pg-pool "^3.6.0"
+    pg-protocol "^1.6.0"
+    pg-types "^2.1.0"
+    pgpass "1.x"
+  optionalDependencies:
+    pg-cloudflare "^1.1.0"
+
+pgpass@1.x:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d"
+  integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==
+  dependencies:
+    split2 "^4.1.0"
+
 picocolors@^1.0.0:
   version "1.0.0"
   resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
@@ -5662,6 +5730,28 @@ pluralize@8.0.0:
   resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz"
   integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==
 
+postgres-array@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
+  integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
+
+postgres-bytea@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
+  integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==
+
+postgres-date@~1.0.4:
+  version "1.0.7"
+  resolved "https://registry.npmmirror.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
+  integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
+
+postgres-interval@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
+  integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
+  dependencies:
+    xtend "^4.0.0"
+
 prelude-ls@^1.2.1:
   version "1.2.1"
   resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
@@ -6297,6 +6387,11 @@ sparse-bitfield@^3.0.3:
   dependencies:
     memory-pager "^1.0.2"
 
+split2@^4.1.0:
+  version "4.2.0"
+  resolved "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
+  integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
+
 sprintf-js@~1.0.2:
   version "1.0.3"
   resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"