Kaynağa Gözat

refactor(rcs-number): 实现号码存在性检查和号码屏蔽功能

- 添加 rcsNumberRepository依赖,用于查询已存在的号码- 在获取号码时增加存在性检查,如果号码已存在则屏蔽并抛出异常
- 实现 blockNumber 方法,用于屏蔽已使用的号码
- 优化代码结构,提高可维护性和可扩展性
wui 6 ay önce
ebeveyn
işleme
8d8a989201
1 değiştirilmiş dosya ile 30 ekleme ve 4 silme
  1. 30 4
      src/rcs-number/impl/smspva.service.ts

+ 30 - 4
src/rcs-number/impl/smspva.service.ts

@@ -1,7 +1,9 @@
 import { GetNumberResponse, GetNumberService } from './get-number-service'
 import { RcsNumberSource } from '../entities/rcs-number.entity'
 import axios from 'axios'
-import { InternalServerErrorException, Logger } from '@nestjs/common'
+import { InternalServerErrorException, Logger, ServiceUnavailableException } from '@nestjs/common'
+import { Repository } from 'typeorm'
+import { RcsNumber } from '../entities/rcs-number.entity'
 
 const API_KEY01 = 'uNW56fGr0zstfs87Xn0e1l2gCYVnb1'
 const API_KEY02 = 'rTTL8pZtKkQ60zjU82bvbMEP7G6XGU'
@@ -21,13 +23,14 @@ const countryMap = {
 
 export class smspva extends GetNumberService {
     source: RcsNumberSource
-
     apikey: string
+    rcsNumberRepository: Repository<RcsNumber>
 
-    constructor(key: string, source: RcsNumberSource) {
+    constructor(key: string, source: RcsNumberSource, rcsNumberRepository: Repository<RcsNumber>) {
         super()
         this.apikey = key
         this.source = source
+        this.rcsNumberRepository = rcsNumberRepository
     }
 
     async getNumber(country: string, num?: number): Promise<GetNumberResponse> {
@@ -45,6 +48,15 @@ export class smspva extends GetNumberService {
             throw new InternalServerErrorException(res.data.error.description)
         }
 
+        // 曾经调用过的号码
+        const existingNumber = await this.rcsNumberRepository.findOneBy({
+            number: res.data.data.phoneNumber
+        })
+        if (existingNumber) {
+            await this.blockNumber(res.data.data.orderId)
+            throw new ServiceUnavailableException(`该号码已存在,无效号码: ${res.data.data.phoneNumber}`)
+        }
+
         return {
             number: res.data.data.phoneNumber,
             orderId: res.data.data.orderId,
@@ -83,7 +95,21 @@ export class smspva extends GetNumberService {
         }
     }
 
-    async blockNumber(number: string) {}
+    async blockNumber(orderId: string) {
+        try {
+            await axiosInstance.put(
+                `blocknumber/${orderId}`,
+                {},
+                {
+                    headers: {
+                        apikey: this.apikey
+                    }
+                }
+            )
+        } catch (error) {
+            Logger.error(`block number ${orderId} failed`, error)
+        }
+    }
 
     async cacheNumber(country: string, size: number) {
         return null