From 036ae20ac3c89757ebbb54f2dc2b07394f9c11e7 Mon Sep 17 00:00:00 2001 From: Alvar San Martin Date: Tue, 5 May 2026 13:12:31 +0200 Subject: [PATCH] Subscripciones de ALAI --- docs/sim-api/Alai/Preactivate.bru | 6 +- .../sim-consumidor-alai/domain/AlaiAPI.ts | 73 +++++++++++++++++++ .../infrastructure/AlaiRepository.ts | 58 +++++++++++++++ 3 files changed, 136 insertions(+), 1 deletion(-) diff --git a/docs/sim-api/Alai/Preactivate.bru b/docs/sim-api/Alai/Preactivate.bru index 9a07b43..fa0e454 100644 --- a/docs/sim-api/Alai/Preactivate.bru +++ b/docs/sim-api/Alai/Preactivate.bru @@ -5,11 +5,15 @@ meta { } get { - url: {{baseAlai}}/preactivate + url: {{baseAlai}}/preactivate?iccid=8934909001400027654 body: none auth: inherit } +params:query { + iccid: 8934909001400027654 +} + settings { encodeUrl: true timeout: 0 diff --git a/packages/sim-consumidor-alai/domain/AlaiAPI.ts b/packages/sim-consumidor-alai/domain/AlaiAPI.ts index 25d1b20..750cc4c 100644 --- a/packages/sim-consumidor-alai/domain/AlaiAPI.ts +++ b/packages/sim-consumidor-alai/domain/AlaiAPI.ts @@ -51,6 +51,79 @@ export namespace AlaiAPI { name: string } + export type UpdateSubscriptionDTO = { + location: string + } + + export type Subscription = { + id: string, + name: string, + domain: string, + status: string, + networkStatus: string, + type: string, + portabilityStatus: string, + billingType: string, + creationDate: string, // ISODATE + firstActivationDate: string, // ISODATE + terminationDate: string, // ISODATE + balance: number, + balanceExpirationDate: string, // ISODATE + lastTrafficDate: string, // ISODATE + externalName: string, + language: string, + ntwID: string, + publicIdentity: string, + externalID: string, + priceplan: { + id: string, + name: string, + pricePlanName: string + }, + salesData: { + salesChannel: string, + salesPerson: string, + }, + address: { + country: string, + state: string, + county: string, + city: string, + street: string, + postalCode: string, + number: string, + description: string, + neighborhood: string, + typeSettlement: string, + normalized: boolean, + externalID: string, + externalType: string, + spainSpecial: { + externalRefList: + { + refId: string, + refType: string + }[], + streetType: number, + ineCityCode: string, + ineSingularEntityCode: string, + floor: string, + door: string, + apartmentNumber: string, + staircaseNumber: string, + streetNrLast: string, + streetNrLastSuffix: string, + subUnitNumber: string, + buildingName: string, + homeID: string + }, + iranSpecial: unknown, + mexicoSpecial: unknown, + brazilSpecial: unknown, + }, + + } + export type CreateOrderResponseDTO = { id: string, name: string, diff --git a/packages/sim-consumidor-alai/infrastructure/AlaiRepository.ts b/packages/sim-consumidor-alai/infrastructure/AlaiRepository.ts index ae5523f..a5410c1 100644 --- a/packages/sim-consumidor-alai/infrastructure/AlaiRepository.ts +++ b/packages/sim-consumidor-alai/infrastructure/AlaiRepository.ts @@ -106,10 +106,68 @@ export class AlaiRepository { return res } + /** + * IMPORTANTE: + * - En el campo subscription viene el id para los cambios de estado, no se hacen + * sobre la sim, sino sobre la subscription + */ public async getSimByICCID(iccid: string) { const endpoint = `/v1/sim/${iccid}` const promReq = this.httpClient.get(endpoint, undefined) const res = await this.manageRequest(promReq) return res } + + public async pauseSubscription(subscriptionId: string) { + const endpoint = `/v1/subscription/${subscriptionId}` + // En teoria ahora se usa ["action", "BLOCK"] pero no he probado + const params = new URLSearchParams([ + ["action", "CHANGE_STATUS"] + ]) + const data = { + status: "BLOCKEDCORE" + } + const promReq = this.httpClient.patch(endpoint, data) + const res = await this.manageRequest(promReq) + return res + } + + public async unPauseSubscription(subscriptionId: string) { + const endpoint = `/v1/subscription/${subscriptionId}` + // En teoria ahora se usa ["action", "UNBLOCK"] pero no he probado + const params = new URLSearchParams([ + ["action", "CHANGE_STATUS"] + ]) + const data = { + status: "ACTIVE" + } + const promReq = this.httpClient.patch(endpoint, data) + const res = await this.manageRequest(promReq) + return res + } + + public async terminateSubscription(subscriptionId: string) { + const endpoint = `/v1/subscription/${subscriptionId}` + // Esta llamada si es de acuerdo a la docu + const params = new URLSearchParams([ + ["action", "TERMINATE"] + ]) + const promReq = this.httpClient.patch(endpoint, undefined) + const res = await this.manageRequest(promReq) + return res + } + + public async changeExternalId(subscriptionId: string, externalId: string) { + const endpoint = `/v1/subscription/${subscriptionId}` + // Esta llamada si es de acuerdo a la docu + const params = new URLSearchParams([ + ["action", "MODIFY"] + ]) + const data = { + externalID: externalId + } + const promReq = this.httpClient.patch(endpoint, data) + const res = await this.manageRequest(promReq) + return res + } }