Добавил механизм работы с апи
This commit is contained in:
parent
5b0960da0c
commit
43339e6a92
@ -12,6 +12,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/chrome": "^0.0.133",
|
"@types/chrome": "^0.0.133",
|
||||||
"@types/clipboard": "^2.0.1",
|
"@types/clipboard": "^2.0.1",
|
||||||
|
"axios": "^0.26.1",
|
||||||
"clipboard": "^2.0.6",
|
"clipboard": "^2.0.6",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
"register-service-worker": "^1.7.1",
|
"register-service-worker": "^1.7.1",
|
||||||
|
92
popup/src/api/HttpClient.ts
Normal file
92
popup/src/api/HttpClient.ts
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-empty-interface */
|
||||||
|
import { SchemaInterface } from './SchemaInterface'
|
||||||
|
import axios, { AxiosRequestConfig, AxiosResponse, Method } from 'axios'
|
||||||
|
import stubResolver from '@/stubs/StubResolver'
|
||||||
|
|
||||||
|
export abstract class Handler {
|
||||||
|
abstract handle: any
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RequestInterface {
|
||||||
|
method: Method;
|
||||||
|
url: string;
|
||||||
|
data: Record<string, any> | null;
|
||||||
|
headers: Record<string, any> | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface RequestHandleFunction {
|
||||||
|
(request: RequestInterface): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export abstract class RequestHandler extends Handler {
|
||||||
|
abstract handle: RequestHandleFunction
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ResponseInterface extends AxiosResponse {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ResponseHandleFunction {
|
||||||
|
(response: ResponseInterface): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export abstract class ResponseHandler extends Handler {
|
||||||
|
abstract handle: ResponseHandleFunction
|
||||||
|
}
|
||||||
|
|
||||||
|
export class HttpClient {
|
||||||
|
private baseUrl: string
|
||||||
|
private handlers: Handler[] = []
|
||||||
|
|
||||||
|
constructor (baseUrl: string) {
|
||||||
|
this.baseUrl = baseUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
send (schema: SchemaInterface, data: any | null = null): Promise<AxiosResponse> {
|
||||||
|
const requestData = {
|
||||||
|
method: schema.method as Method,
|
||||||
|
url: schema.url,
|
||||||
|
data: data,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json;charset=utf-8'
|
||||||
|
}
|
||||||
|
} as RequestInterface
|
||||||
|
|
||||||
|
/**
|
||||||
|
* todo перевести на промисы +
|
||||||
|
*/
|
||||||
|
this.handlers
|
||||||
|
.filter((handler: Handler) => {
|
||||||
|
return handler instanceof RequestHandler
|
||||||
|
})
|
||||||
|
.map((handler: Handler) => {
|
||||||
|
handler.handle(requestData)
|
||||||
|
return handler
|
||||||
|
})
|
||||||
|
|
||||||
|
const stub = stubResolver.handle(schema.code)
|
||||||
|
const response = stub || axios(requestData as AxiosRequestConfig)
|
||||||
|
|
||||||
|
return response
|
||||||
|
.then((response: any) => {
|
||||||
|
/**
|
||||||
|
* todo перевести на промисы +
|
||||||
|
*/
|
||||||
|
this.handlers
|
||||||
|
.filter((handler: Handler) => {
|
||||||
|
return handler instanceof ResponseHandler
|
||||||
|
})
|
||||||
|
.map((handler: Handler) => {
|
||||||
|
handler.handle(response)
|
||||||
|
return handler
|
||||||
|
})
|
||||||
|
|
||||||
|
return response
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
addHandler (handler: Handler) {
|
||||||
|
this.handlers.push(handler)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
11
popup/src/api/Main/HttpClient.ts
Normal file
11
popup/src/api/Main/HttpClient.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { HttpClient as BaseClient } from '../../api/HttpClient'
|
||||||
|
import MocksSchema, { MockConfigurationsRequest } from '../../api/Main/Schemas/MocksSchema'
|
||||||
|
import { SchemaInterface } from '@/api/SchemaInterface'
|
||||||
|
|
||||||
|
export class HttpClient extends BaseClient {
|
||||||
|
mockConfigurations (data: MockConfigurationsRequest): any {
|
||||||
|
return this.send(MocksSchema as SchemaInterface, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new HttpClient('http://laen.sipachev.ru')
|
9
popup/src/api/Main/Schemas/MocksSchema.ts
Normal file
9
popup/src/api/Main/Schemas/MocksSchema.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
export class MockConfigurationsRequest {
|
||||||
|
personalId!: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
code: 'api_plugin_get_configurations',
|
||||||
|
method: 'POST',
|
||||||
|
url: '/plugin/mock-configurations'
|
||||||
|
}
|
6
popup/src/api/SchemaInterface.ts
Normal file
6
popup/src/api/SchemaInterface.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export interface SchemaInterface {
|
||||||
|
code: string;
|
||||||
|
method: string;
|
||||||
|
url: string;
|
||||||
|
stub: any;
|
||||||
|
}
|
3
popup/src/stubs/FlowEnum.ts
Normal file
3
popup/src/stubs/FlowEnum.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export enum FlowEnum {
|
||||||
|
base
|
||||||
|
}
|
11
popup/src/stubs/Stub2Flow.ts
Normal file
11
popup/src/stubs/Stub2Flow.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { FlowEnum } from '@/stubs/FlowEnum'
|
||||||
|
import MocksSchema from '@/api/Main/Schemas/MocksSchema'
|
||||||
|
import MocksSchemaSuccess from '@/stubs/stubs/Main/MocksSchema/MocksSchemaSuccess'
|
||||||
|
|
||||||
|
const map: Record<string, any> = {}
|
||||||
|
|
||||||
|
// Регистрируем базовые успешные заглуши
|
||||||
|
map[FlowEnum.base] = {}
|
||||||
|
map[FlowEnum.base][MocksSchema.code] = MocksSchemaSuccess
|
||||||
|
|
||||||
|
export default map
|
24
popup/src/stubs/StubResolver.ts
Normal file
24
popup/src/stubs/StubResolver.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { flow, useStub } from '@/stubs/config'
|
||||||
|
import map from '@/stubs/Stub2Flow'
|
||||||
|
|
||||||
|
export class StubResolver {
|
||||||
|
handle (routeCode: string): Promise<any> | null {
|
||||||
|
if (!useStub) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
const hasFlow = flow in map || false
|
||||||
|
if (!hasFlow) {
|
||||||
|
throw new Error('Flow not found!!! Change flow in @/stubs/config.ts')
|
||||||
|
}
|
||||||
|
const availableStubs = map[flow]
|
||||||
|
const hasRoute = routeCode in availableStubs || false
|
||||||
|
if (!hasRoute) {
|
||||||
|
throw new Error('Route`s stub not found!!! Add stub or change flow to check application')
|
||||||
|
}
|
||||||
|
|
||||||
|
return availableStubs[routeCode]
|
||||||
|
// return new Promise(() => {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new StubResolver()
|
4
popup/src/stubs/config.ts
Normal file
4
popup/src/stubs/config.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import { FlowEnum } from '@/stubs/FlowEnum'
|
||||||
|
|
||||||
|
export const useStub = true
|
||||||
|
export const flow = FlowEnum.base
|
12
popup/src/stubs/stubs/Main/MocksSchema/MocksSchemaSuccess.ts
Normal file
12
popup/src/stubs/stubs/Main/MocksSchema/MocksSchemaSuccess.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { AxiosResponse } from 'axios'
|
||||||
|
|
||||||
|
export default new Promise((resolve) => {
|
||||||
|
const response = {
|
||||||
|
data: {},
|
||||||
|
status: 200,
|
||||||
|
statusText: 'OK',
|
||||||
|
headers: {},
|
||||||
|
config: {}
|
||||||
|
} as AxiosResponse
|
||||||
|
resolve(response)
|
||||||
|
})
|
@ -2322,6 +2322,13 @@ aws4@^1.8.0:
|
|||||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
|
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
|
||||||
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
|
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
|
||||||
|
|
||||||
|
axios@^0.26.1:
|
||||||
|
version "0.26.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
|
||||||
|
integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==
|
||||||
|
dependencies:
|
||||||
|
follow-redirects "^1.14.8"
|
||||||
|
|
||||||
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
|
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
|
||||||
version "6.26.0"
|
version "6.26.0"
|
||||||
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
|
||||||
@ -5088,6 +5095,11 @@ follow-redirects@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.2.tgz#dd73c8effc12728ba5cf4259d760ea5fb83e3147"
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.2.tgz#dd73c8effc12728ba5cf4259d760ea5fb83e3147"
|
||||||
integrity sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==
|
integrity sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==
|
||||||
|
|
||||||
|
follow-redirects@^1.14.8:
|
||||||
|
version "1.14.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
|
||||||
|
integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
|
||||||
|
|
||||||
for-each@^0.3.3:
|
for-each@^0.3.3:
|
||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
|
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
|
||||||
|
Loading…
Reference in New Issue
Block a user