1 import { HttpStatusCode } from '@shared/core-utils'
2 import { makeDeleteRequest, makeGetRequest, makePostBodyRequest, makePutBodyRequest, unwrapBody, unwrapText } from '../requests/requests'
3 import { ServerInfo } from '../server/servers'
5 export interface OverrideCommandOptions {
7 expectedStatus?: number
10 interface CommonCommandOptions extends OverrideCommandOptions {
12 defaultExpectedStatus: number
15 interface GetCommandOptions extends CommonCommandOptions {
16 query?: { [ id: string ]: any }
21 abstract class AbstractCommand {
23 private expectedStatus: HttpStatusCode
26 protected server: ServerInfo
31 setServer (server: ServerInfo) {
35 setExpectedStatus (status: HttpStatusCode) {
36 this.expectedStatus = status
39 protected getRequestBody <T> (options: GetCommandOptions) {
40 return unwrapBody<T>(this.getRequest(options))
43 protected getRequestText (options: GetCommandOptions) {
44 return unwrapText(this.getRequest(options))
47 protected deleteRequest (options: CommonCommandOptions) {
48 return makeDeleteRequest(this.buildCommonRequestOptions(options))
51 protected putBodyRequest (options: CommonCommandOptions & {
52 fields?: { [ fieldName: string ]: any }
54 const { fields } = options
56 return makePutBodyRequest({
57 ...this.buildCommonRequestOptions(options),
63 protected postBodyRequest (options: CommonCommandOptions & {
64 fields?: { [ fieldName: string ]: any }
66 const { fields } = options
68 return makePostBodyRequest({
69 ...this.buildCommonRequestOptions(options),
75 private buildCommonRequestOptions (options: CommonCommandOptions) {
76 const { token, expectedStatus, defaultExpectedStatus, path } = options
81 token: token ?? this.server.accessToken,
82 statusCodeExpected: expectedStatus ?? this.expectedStatus ?? defaultExpectedStatus
86 private getRequest (options: GetCommandOptions) {
87 const { query, contentType, accept } = options
89 return makeGetRequest({
90 ...this.buildCommonRequestOptions(options),