refactor: native feature management (#2350)

This commit is contained in:
Mo
2023-07-12 12:56:08 -05:00
committed by GitHub
parent 49f7581cd8
commit 078ef3772c
223 changed files with 3996 additions and 3438 deletions

View File

@@ -4,4 +4,6 @@ export enum SubscriptionApiOperations {
ListingInvites,
AcceptingInvite,
ConfirmAppleIAP,
GetSubscription,
GetAvailableSubscriptions,
}

View File

@@ -8,11 +8,17 @@ import { SubscriptionInviteAcceptResponseBody } from '../../Response/Subscriptio
import { SubscriptionInviteCancelResponseBody } from '../../Response/Subscription/SubscriptionInviteCancelResponseBody'
import { SubscriptionInviteListResponseBody } from '../../Response/Subscription/SubscriptionInviteListResponseBody'
import { SubscriptionInviteResponseBody } from '../../Response/Subscription/SubscriptionInviteResponseBody'
import { HttpResponse, ApiEndpointParam } from '@standardnotes/responses'
import {
HttpResponse,
ApiEndpointParam,
GetSubscriptionResponse,
GetAvailableSubscriptionsResponse,
} from '@standardnotes/responses'
import { SubscriptionApiServiceInterface } from './SubscriptionApiServiceInterface'
import { SubscriptionApiOperations } from './SubscriptionApiOperations'
import { AppleIAPConfirmRequestParams } from '../../Request'
import { GetUserSubscriptionRequestParams } from '../../Request/Subscription/GetUserSubscriptionRequestParams'
export class SubscriptionApiService implements SubscriptionApiServiceInterface {
private operationsInProgress: Map<SubscriptionApiOperations, boolean>
@@ -118,4 +124,36 @@ export class SubscriptionApiService implements SubscriptionApiServiceInterface {
this.operationsInProgress.set(SubscriptionApiOperations.ConfirmAppleIAP, false)
}
}
async getUserSubscription(params: GetUserSubscriptionRequestParams): Promise<HttpResponse<GetSubscriptionResponse>> {
if (this.operationsInProgress.get(SubscriptionApiOperations.GetSubscription)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
this.operationsInProgress.set(SubscriptionApiOperations.GetSubscription, true)
try {
const response = await this.subscriptionServer.getUserSubscription(params)
return response
} finally {
this.operationsInProgress.set(SubscriptionApiOperations.GetSubscription, false)
}
}
async getAvailableSubscriptions(): Promise<HttpResponse<GetAvailableSubscriptionsResponse>> {
if (this.operationsInProgress.get(SubscriptionApiOperations.GetAvailableSubscriptions)) {
throw new ApiCallError(ErrorMessage.GenericInProgress)
}
this.operationsInProgress.set(SubscriptionApiOperations.GetAvailableSubscriptions, true)
try {
const response = await this.subscriptionServer.getAvailableSubscriptions()
return response
} finally {
this.operationsInProgress.set(SubscriptionApiOperations.GetAvailableSubscriptions, false)
}
}
}

View File

@@ -4,7 +4,8 @@ import { SubscriptionInviteAcceptResponseBody } from '../../Response/Subscriptio
import { SubscriptionInviteCancelResponseBody } from '../../Response/Subscription/SubscriptionInviteCancelResponseBody'
import { SubscriptionInviteListResponseBody } from '../../Response/Subscription/SubscriptionInviteListResponseBody'
import { SubscriptionInviteResponseBody } from '../../Response/Subscription/SubscriptionInviteResponseBody'
import { HttpResponse } from '@standardnotes/responses'
import { GetAvailableSubscriptionsResponse, GetSubscriptionResponse, HttpResponse } from '@standardnotes/responses'
import { GetUserSubscriptionRequestParams } from '../../Request/Subscription/GetUserSubscriptionRequestParams'
export interface SubscriptionApiServiceInterface {
invite(inviteeEmail: string): Promise<HttpResponse<SubscriptionInviteResponseBody>>
@@ -12,4 +13,6 @@ export interface SubscriptionApiServiceInterface {
cancelInvite(inviteUuid: string): Promise<HttpResponse<SubscriptionInviteCancelResponseBody>>
acceptInvite(inviteUuid: string): Promise<HttpResponse<SubscriptionInviteAcceptResponseBody>>
confirmAppleIAP(params: AppleIAPConfirmRequestParams): Promise<HttpResponse<AppleIAPConfirmResponseBody>>
getUserSubscription(params: GetUserSubscriptionRequestParams): Promise<HttpResponse<GetSubscriptionResponse>>
getAvailableSubscriptions(): Promise<HttpResponse<GetAvailableSubscriptionsResponse>>
}

View File

@@ -0,0 +1,3 @@
export type GetUserSubscriptionRequestParams = {
userUuid: string
}

View File

@@ -6,13 +6,23 @@ const SharingPaths = {
listInvites: '/v1/subscription-invites',
}
const UserSubscriptionPaths = {
subscription: (userUuid: string) => `/v1/users/${userUuid}/subscription`,
}
const ApplePaths = {
confirmAppleIAP: '/v1/subscriptions/apple_iap_confirm',
}
const UnauthenticatedSubscriptionsPaths = {
availableSubscriptions: '/v2/subscriptions',
}
export const Paths = {
v1: {
...SharingPaths,
...ApplePaths,
...UserSubscriptionPaths,
...UnauthenticatedSubscriptionsPaths,
},
}

View File

@@ -11,10 +11,11 @@ import { SubscriptionInviteCancelResponseBody } from '../../Response/Subscriptio
import { SubscriptionInviteDeclineResponseBody } from '../../Response/Subscription/SubscriptionInviteDeclineResponseBody'
import { SubscriptionInviteListResponseBody } from '../../Response/Subscription/SubscriptionInviteListResponseBody'
import { SubscriptionInviteResponseBody } from '../../Response/Subscription/SubscriptionInviteResponseBody'
import { HttpResponse } from '@standardnotes/responses'
import { GetAvailableSubscriptionsResponse, GetSubscriptionResponse, HttpResponse } from '@standardnotes/responses'
import { Paths } from './Paths'
import { SubscriptionServerInterface } from './SubscriptionServerInterface'
import { GetUserSubscriptionRequestParams } from '../../Request/Subscription/GetUserSubscriptionRequestParams'
export class SubscriptionServer implements SubscriptionServerInterface {
constructor(private httpService: HttpServiceInterface) {}
@@ -50,4 +51,12 @@ export class SubscriptionServer implements SubscriptionServerInterface {
async confirmAppleIAP(params: AppleIAPConfirmRequestParams): Promise<HttpResponse<AppleIAPConfirmResponseBody>> {
return this.httpService.post(Paths.v1.confirmAppleIAP, params)
}
async getUserSubscription(params: GetUserSubscriptionRequestParams): Promise<HttpResponse<GetSubscriptionResponse>> {
return this.httpService.get(Paths.v1.subscription(params.userUuid), params)
}
async getAvailableSubscriptions(): Promise<HttpResponse<GetAvailableSubscriptionsResponse>> {
return this.httpService.get(Paths.v1.availableSubscriptions)
}
}

View File

@@ -11,7 +11,8 @@ import { SubscriptionInviteCancelResponseBody } from '../../Response/Subscriptio
import { SubscriptionInviteDeclineResponseBody } from '../../Response/Subscription/SubscriptionInviteDeclineResponseBody'
import { SubscriptionInviteListResponseBody } from '../../Response/Subscription/SubscriptionInviteListResponseBody'
import { SubscriptionInviteResponseBody } from '../../Response/Subscription/SubscriptionInviteResponseBody'
import { HttpResponse } from '@standardnotes/responses'
import { GetAvailableSubscriptionsResponse, GetSubscriptionResponse, HttpResponse } from '@standardnotes/responses'
import { GetUserSubscriptionRequestParams } from '../../Request/Subscription/GetUserSubscriptionRequestParams'
export interface SubscriptionServerInterface {
invite(params: SubscriptionInviteRequestParams): Promise<HttpResponse<SubscriptionInviteResponseBody>>
@@ -25,5 +26,9 @@ export interface SubscriptionServerInterface {
params: SubscriptionInviteCancelRequestParams,
): Promise<HttpResponse<SubscriptionInviteCancelResponseBody>>
listInvites(params: SubscriptionInviteListRequestParams): Promise<HttpResponse<SubscriptionInviteListResponseBody>>
confirmAppleIAP(params: AppleIAPConfirmRequestParams): Promise<HttpResponse<AppleIAPConfirmResponseBody>>
getUserSubscription(params: GetUserSubscriptionRequestParams): Promise<HttpResponse<GetSubscriptionResponse>>
getAvailableSubscriptions(): Promise<HttpResponse<GetAvailableSubscriptionsResponse>>
}