Skip to content

Commit

Permalink
feat(schema): add version, schema and domain endpints
Browse files Browse the repository at this point in the history
#202
  • Loading branch information
FlavioLionelRita committed Nov 21, 2023
1 parent 6f29f59 commit a973fe6
Show file tree
Hide file tree
Showing 9 changed files with 372 additions and 20 deletions.
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
"cSpell.words": [
"autoincrement",
"commitlint",
"datasource",
"datasources",
"dawidd",
"Flavio",
"flaviorita",
Expand Down
35 changes: 18 additions & 17 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,26 +33,27 @@
"h3lp": "1.2.3"
},
"devDependencies": {
"@babel/eslint-parser": "^7.19.1",
"@types/jest": "^29.4.0",
"@babel/eslint-parser": "^7.23.3",
"@types/jest": "^29.5.2",
"@types/node": "^20.9.2",
"@typescript-eslint/eslint-plugin": "^6.12.0",
"@typescript-eslint/parser": "^6.12.0",
"@types/mysql": "^2.15.21",
"@types/node": "^18.11.18",
"@typescript-eslint/eslint-plugin": "^5.49.0",
"@typescript-eslint/parser": "^5.49.0",
"eslint": "^8.54.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^16.3.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.1.1",
"grunt": "^1.5.3",
"grunt-contrib-clean": "^2.0.1",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-uglify": "^5.0.1",
"grunt-exec": "^3.0.0",
"jest": "^29.4.1",
"concurrently": "^8.2.2",
"dotenv": "^16.0.3",
"eslint": "^8.32.0",
"eslint-config-standard": "^17.0.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^15.6.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.1.1",
"grunt": "^1.5.3",
"grunt-contrib-clean": "^2.0.1",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-uglify": "^5.0.1",
"grunt-exec": "^3.0.0",
"load-grunt-tasks": "^5.1.0",
"ts-jest": "^29.0.5",
"ts-node": "^10.9.1",
Expand Down
1 change: 1 addition & 0 deletions src/lib/application/GeneralService.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Health, Ping } from '../domain'

export interface GeneralService {
version ():Promise<{version:string}>
ping ():Promise<Ping>
health ():Promise<Health>
metrics ():Promise<any>
Expand Down
6 changes: 5 additions & 1 deletion src/lib/application/SchemaService.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { Entity, EntityMapping, Enum, Mapping, Stage } from '../domain'
import { Entity, EntityMapping, Enum, Mapping, Stage, Schema, SchemaDomain } from '../domain'
export interface SchemaService {
version ():Promise<{version:string}>
schema (): Promise<Schema>
domain (): Promise<SchemaDomain>
dataSources ():Promise<{name:string, dialect:string}[]>
entities (): Promise<Entity[]>
entity (entity:string): Promise<Entity|undefined>
Expand All @@ -10,4 +13,5 @@ export interface SchemaService {
entityMapping (mapping:string, entity:string): Promise<EntityMapping|undefined>
stages (): Promise<Stage[]>
stage (stage:string): Promise<Stage|undefined>
views (): Promise<string[]>
}
36 changes: 36 additions & 0 deletions src/lib/domain/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -960,3 +960,39 @@ export interface Stage {
*/
'dataSources': Array<RuleDataSource>;
}

export interface SchemaDomain {
/**
*
* @type {string}
* @memberof SchemaDomain
*/
'version': string;
/**
*
* @type {Array<Entity>}
* @memberof SchemaDomain
*/
'entities': Array<Entity>
/**
*
* @type {Array<Enum>}
* @memberof SchemaDomain
*/
'enums': Array<Enum>
}

export interface Schema {
/**
*
* @type {string}
* @memberof Schema
*/
'version': string;
/**
*
* @type {SchemaDomain}
* @memberof Schema
*/
'domain': Array<SchemaDomain>
}
5 changes: 5 additions & 0 deletions src/lib/infrastructure/adapters/GeneralApiService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ export class GeneralApiService implements GeneralService {
// eslint-disable-next-line no-useless-constructor
constructor (private readonly generalApi:GeneralApi) {}

public async version ():Promise<{version:string}> {
const result:AxiosResponse<any, any> = await this.generalApi.ping()
return result.data
}

public async ping ():Promise<Ping> {
const result:AxiosResponse<any, any> = await this.generalApi.ping()
return result.data
Expand Down
22 changes: 21 additions & 1 deletion src/lib/infrastructure/adapters/SchemaApiService.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
import { SchemaService } from 'lib/application'
import { Entity, EntityMapping, Enum, Mapping, Stage } from '../../domain'
import { Entity, EntityMapping, Enum, Mapping, Schema, SchemaDomain, Stage } from '../../domain'
import { SchemaApi } from '../api'
import { AxiosResponse } from 'axios'

export class SchemaApiService implements SchemaService {
// eslint-disable-next-line no-useless-constructor
constructor (private readonly schemaApi:SchemaApi) {}

public async version (): Promise<{version:string}> {
const result:AxiosResponse<{version:string}, any> = await this.schemaApi.version()
return result.data
}

public async schema (): Promise<Schema> {
const result:AxiosResponse<Schema, any> = await this.schemaApi.schema()
return result.data
}

public async domain (): Promise<SchemaDomain> {
const result:AxiosResponse<SchemaDomain, any> = await this.schemaApi.domain()
return result.data
}

public async dataSources ():Promise<{name:string, dialect:string}[]> {
const result:AxiosResponse<{name:string, dialect:string}[], any> = await this.schemaApi.dataSources()
return result.data
Expand Down Expand Up @@ -56,4 +71,9 @@ export class SchemaApiService implements SchemaService {
const result:AxiosResponse<Stage, any> = await this.schemaApi.stage(stage)
return result.data
}

public async views (): Promise<string[]> {
const result:AxiosResponse<string[], any> = await this.schemaApi.views()
return result.data
}
}
55 changes: 55 additions & 0 deletions src/lib/infrastructure/api/generalApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,34 @@ import { Configuration, Health, Ping } from '../../domain'
*/
export const GeneralApiAxiosParamCreator = function (configuration: Configuration) {
return {
/**
*
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
version: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = '/version'
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL)
let baseOptions
if (configuration) {
baseOptions = configuration.baseOptions
}

const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options }
const localVarHeaderParameter = {} as any
const localVarQueryParameter = {} as any

setSearchParams(localVarUrlObj, localVarQueryParameter)
const headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}
localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers }

return {
url: toPathString(localVarUrlObj),
options: localVarRequestOptions
}
},

/**
*
* @param {*} [options] Override http request option.
Expand Down Expand Up @@ -100,6 +128,15 @@ export const GeneralApiAxiosParamCreator = function (configuration: Configuratio
export const GeneralApiFp = function (configuration: Configuration) {
const localVarAxiosParamCreator = GeneralApiAxiosParamCreator(configuration)
return {
/**
*
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async version (options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Health>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.version(options)
return createRequestFunction(localVarAxiosArgs, globalAxios, configuration)
},
/**
*
* @param {*} [options] Override http request option.
Expand Down Expand Up @@ -137,6 +174,14 @@ export const GeneralApiFp = function (configuration: Configuration) {
export const GeneralApiFactory = function (configuration: Configuration, basePath?: string, axios?: AxiosInstance) {
const localVarFp = GeneralApiFp(configuration)
return {
/**
*
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
version (options?: any): AxiosPromise<Health> {
return localVarFp.version(options).then((request) => request(axios, configuration.basePath))
},
/**
*
* @param {*} [options] Override http request option.
Expand Down Expand Up @@ -171,6 +216,16 @@ export const GeneralApiFactory = function (configuration: Configuration, basePat
* @extends {BaseAPI}
*/
export class GeneralApi extends BaseAPI {
/**
*
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof GeneralApi
*/
public version (options?: AxiosRequestConfig) {
return GeneralApiFp(this.configuration).version(options).then((request) => request(this.axios, this.configuration.basePath))
}

/**
*
* @param {*} [options] Override http request option.
Expand Down

0 comments on commit a973fe6

Please sign in to comment.