-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #258 from maany/feature-255-feature_subscriptions
add feature: Get Subscriptions
- Loading branch information
Showing
29 changed files
with
666 additions
and
44 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import { BaseDTO } from "@/lib/sdk/dto"; | ||
import { Subscription } from "../entity/rucio"; | ||
|
||
/** | ||
* Data Transfer Object for GET Subscription Endpoint | ||
*/ | ||
export interface SubscriptionDTO extends BaseDTO, Subscription { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import { BaseAuthenticatedInputPort, BaseOutputPort } from "@/lib/sdk/primary-ports"; | ||
import { GetSubscriptionError, GetSubscriptionRequest, GetSubscriptionResponse } from "../../usecase-models/get-subscription-usecase-models"; | ||
|
||
/** | ||
* @interface GetSubscriptionInputPort representing the GetSubscription usecase. | ||
*/ | ||
export interface GetSubscriptionInputPort extends BaseAuthenticatedInputPort<GetSubscriptionRequest> {} | ||
|
||
/** | ||
* @interface GetSubscriptionOutputPort representing the GetSubscription presenter. | ||
*/ | ||
export interface GetSubscriptionOutputPort extends BaseOutputPort<GetSubscriptionResponse, GetSubscriptionError> {} |
11 changes: 11 additions & 0 deletions
11
src/lib/core/port/secondary/subscription-gateway-output-port.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import { SubscriptionDTO } from "../../dto/subscription-dto"; | ||
|
||
export default interface SubscriptionGatewayOutputPort { | ||
/** | ||
* Makes a GET request to the Rucio Server to retrieve a subscription | ||
* @param rucioAuthToken A valid rucio auth token | ||
* @param account The rucio account name | ||
* @param name The rucio subscription name | ||
*/ | ||
get(rucioAuthToken: string, account: string, name: string): Promise<SubscriptionDTO> | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
import { BaseUseCase } from "@/lib/sdk/usecase"; | ||
import { AuthenticatedRequestModel } from "@/lib/sdk/usecase-models"; | ||
import { injectable } from "inversify"; | ||
import { SubscriptionDTO } from "../dto/subscription-dto"; | ||
import type { GetSubscriptionInputPort, GetSubscriptionOutputPort } from "../port/primary/get-subscription-ports"; | ||
import type SubscriptionGatewayOutputPort from "../port/secondary/subscription-gateway-output-port"; | ||
import { GetSubscriptionError, GetSubscriptionRequest, GetSubscriptionResponse } from "../usecase-models/get-subscription-usecase-models"; | ||
|
||
|
||
@injectable() | ||
class GetSubscriptionUseCase extends BaseUseCase<AuthenticatedRequestModel<GetSubscriptionRequest>, GetSubscriptionResponse, GetSubscriptionError, SubscriptionDTO> implements GetSubscriptionInputPort { | ||
constructor( | ||
protected readonly presenter: GetSubscriptionOutputPort, | ||
private readonly gateway: SubscriptionGatewayOutputPort, | ||
){ | ||
super(presenter) | ||
} | ||
validateRequestModel(requestModel: AuthenticatedRequestModel<GetSubscriptionRequest>): GetSubscriptionError | undefined { | ||
if(requestModel.account === '' || requestModel.account === undefined) { | ||
return { | ||
error: 'INVALID_REQUEST', | ||
message: 'Account is required', | ||
} as GetSubscriptionError | ||
} | ||
|
||
if(requestModel.sessionAccount !== requestModel.account) { | ||
return { | ||
error: 'INVALID_ACCOUNT', | ||
message: 'Account specified in the request is not same as the account present in the session', | ||
} as GetSubscriptionError | ||
} | ||
|
||
if(requestModel.name === '' || requestModel.name === undefined) { | ||
return { | ||
error: 'INVALID_REQUEST', | ||
message: 'Name is required', | ||
} as GetSubscriptionError | ||
} | ||
if(requestModel.rucioAuthToken === '' || requestModel.rucioAuthToken === undefined) { | ||
return { | ||
error: 'INVALID_AUTH', | ||
message: 'Auth token is required', | ||
} as GetSubscriptionError | ||
} | ||
return undefined; | ||
} | ||
|
||
async makeGatewayRequest(requestModel: AuthenticatedRequestModel<GetSubscriptionRequest>): Promise<SubscriptionDTO> { | ||
const dto: SubscriptionDTO = await this.gateway.get(requestModel.rucioAuthToken, requestModel.account, requestModel.name); | ||
return dto; | ||
} | ||
|
||
handleGatewayError(error: SubscriptionDTO): GetSubscriptionError { | ||
return { | ||
status: 'error', | ||
error: error.message, | ||
message: `Gateway responded with ${error.error?.errorCode}, ${error.error?.errorMessage}` | ||
} as GetSubscriptionError | ||
} | ||
|
||
processDTO(dto: SubscriptionDTO): { data: GetSubscriptionResponse | GetSubscriptionError; status: "success" | "error"; } { | ||
// copy all fields from dto to response model except success | ||
const responseModel: GetSubscriptionResponse = { | ||
...dto, | ||
status: 'success', | ||
} | ||
|
||
return { | ||
status: 'success', | ||
data: responseModel, | ||
} | ||
} | ||
} | ||
|
||
export default GetSubscriptionUseCase; |
19 changes: 19 additions & 0 deletions
19
src/lib/core/usecase-models/get-subscription-usecase-models.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import { BaseErrorResponseModel, BaseResponseModel } from "@/lib/sdk/usecase-models"; | ||
import { Subscription } from "../entity/rucio"; | ||
|
||
export interface GetSubscriptionRequest { | ||
account: string; | ||
sessionAccount: string; | ||
name: string; | ||
} | ||
|
||
export interface GetSubscriptionResponse extends Subscription, BaseResponseModel {} | ||
|
||
/** | ||
* Error Response Model for GET Subscription UseCase | ||
* @property error - Error Message | ||
* INVALID_ACCOUNT: The account specified in the request is not same as the account present in the session | ||
*/ | ||
export interface GetSubscriptionError extends BaseErrorResponseModel { | ||
error: 'SUBSCRIPTION_NOT_FOUND' | 'UNKNOWN_ERROR' | 'INVALID_REQUEST' | 'INVALID_AUTH' | 'INVALID_ACCOUNT'; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.