Skip to content

Commit

Permalink
fix(database): DeclaredSchema compiledFields extension field and cust…
Browse files Browse the repository at this point in the history
…om endpoint generation (#290)
  • Loading branch information
kon14 committed Aug 25, 2022
1 parent fa5f323 commit 6b7eb84
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 15 deletions.
10 changes: 8 additions & 2 deletions modules/database/src/adapters/DatabaseAdapter.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import ConduitGrpcSdk, {
ConduitModel,
ConduitModelOptions,
ConduitSchema,
GrpcError,
Expand All @@ -12,6 +13,7 @@ import { ConduitDatabaseSchema } from '../interfaces/ConduitDatabaseSchema';
type _ConduitSchema = Omit<ConduitSchema, 'schemaOptions'> & {
modelOptions: ConduitModelOptions;
extensions: DeclaredSchemaExtension[];
compiledFields: ConduitModel;
} & {
-readonly [k in keyof ConduitSchema]: ConduitSchema[k];
};
Expand Down Expand Up @@ -49,6 +51,7 @@ export abstract class DatabaseAdapter<T extends Schema> {
* Should accept a JSON schema and output a .ts interface for the adapter
* @param {ConduitSchema} schema
* @param {boolean} imported Whether schema is an introspected schema
* @param {boolean} cndPrefix Whether to prefix the schema's collection name with 'cnd_'
*/
async createSchemaFromAdapter(
schema: ConduitSchema,
Expand Down Expand Up @@ -176,10 +179,11 @@ export abstract class DatabaseAdapter<T extends Schema> {
JSON.stringify({
name: schema.name,
fields: schema.fields,
extensions: (schema as ConduitDatabaseSchema).extensions,
compiledFields: (schema as ConduitDatabaseSchema).compiledFields,
modelOptions: schema.schemaOptions,
ownerModule: schema.ownerModule,
collectionName: schema.collectionName,
extensions: (schema as ConduitDatabaseSchema).extensions,
}),
true,
);
Expand All @@ -188,10 +192,11 @@ export abstract class DatabaseAdapter<T extends Schema> {
JSON.stringify({
name: schema.name,
fields: schema.fields,
extensions: (schema as ConduitDatabaseSchema).extensions,
compiledFields: (schema as ConduitDatabaseSchema).compiledFields,
modelOptions: schema.schemaOptions,
ownerModule: schema.ownerModule,
collectionName: schema.collectionName,
extensions: (schema as ConduitDatabaseSchema).extensions,
}),
);
}
Expand All @@ -209,6 +214,7 @@ export abstract class DatabaseAdapter<T extends Schema> {
);
schema.ownerModule = model.ownerModule;
(schema as ConduitDatabaseSchema).extensions = model.extensions;
(schema as ConduitDatabaseSchema).compiledFields = model.compiledFields;
return schema;
})
.map((model: ConduitSchema) => {
Expand Down
4 changes: 3 additions & 1 deletion modules/database/src/adapters/mongoose-adapter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import ConduitGrpcSdk, {
GrpcError,
Indexable,
} from '@conduitplatform/grpc-sdk';
import { ConduitDatabaseSchema } from '../../interfaces/ConduitDatabaseSchema';
import { systemRequiredValidator } from '../utils/validateSchemas';
import { DatabaseAdapter } from '../DatabaseAdapter';
import { stitchSchema } from '../utils/extensions';
Expand Down Expand Up @@ -220,8 +221,9 @@ export class MongooseAdapter extends DatabaseAdapter<MongooseSchema> {
}

this.addSchemaPermissions(schema);
const original = JSON.parse(JSON.stringify(schema));
const original: ConduitDatabaseSchema = JSON.parse(JSON.stringify(schema));
stitchSchema(schema);
original.compiledFields = schema.fields;
const newSchema = schemaConverter(schema);

this.registeredSchemas.set(schema.name, schema);
Expand Down
12 changes: 6 additions & 6 deletions modules/database/src/adapters/sequelize-adapter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import ConduitGrpcSdk, {
GrpcError,
Indexable,
} from '@conduitplatform/grpc-sdk';
import { ConduitDatabaseSchema } from '../../interfaces/ConduitDatabaseSchema';
import { systemRequiredValidator } from '../utils/validateSchemas';
import { DatabaseAdapter } from '../DatabaseAdapter';
import { stitchSchema } from '../utils/extensions';
Expand Down Expand Up @@ -157,11 +158,9 @@ export class SequelizeAdapter extends DatabaseAdapter<SequelizeSchema> {
}

getCollectionName(schema: ConduitSchema) {
const collectionName =
schema.collectionName && schema.collectionName !== ''
? schema.collectionName
: schema.name;
return collectionName;
return schema.collectionName && schema.collectionName !== ''
? schema.collectionName
: schema.name;
}

protected async _createSchemaFromAdapter(
Expand All @@ -182,8 +181,9 @@ export class SequelizeAdapter extends DatabaseAdapter<SequelizeSchema> {
}

this.addSchemaPermissions(schema);
const original: ConduitSchema = JSON.parse(JSON.stringify(schema));
const original: ConduitDatabaseSchema = JSON.parse(JSON.stringify(schema));
stitchSchema(schema);
original.compiledFields = schema.fields;
const newSchema = schemaConverter(schema);

this.registeredSchemas.set(schema.name, schema);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ export class CustomEndpointsAdmin {
);
}
findSchema = await this.database.getSchema(selectedSchemaName);
findSchema.fields = findSchema.modelSchema;
findSchema.compiledFields = findSchema.modelSchema;
}

if (isNil(findSchema)) {
Expand Down Expand Up @@ -274,7 +274,7 @@ export class CustomEndpointsAdmin {
);
}
findSchema = await this.database.getSchema(selectedSchemaName);
findSchema.fields = findSchema.modelSchema;
findSchema.compiledFields = findSchema.modelSchema;
}

if (isNil(findSchema)) {
Expand Down
8 changes: 4 additions & 4 deletions modules/database/src/admin/customEndpoints/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ function _queryValidation(
return 'comparisonField cannot be empty and should contain type and value';
}

if (!Object.keys(findSchema.fields).includes(schemaField)) {
if (!Object.keys(findSchema.compiledFields).includes(schemaField)) {
return 'schemaField is not present in selected schema!';
}

Expand All @@ -100,7 +100,7 @@ function _queryValidation(
}

if (comparisonField.type === 'Schema') {
if (!Object.keys(findSchema.fields).includes(comparisonField.value)) {
if (!Object.keys(findSchema.compiledFields).includes(comparisonField.value)) {
return 'comparisonField value is not present in selected schema!';
}
} else if (comparisonField.type === 'Input') {
Expand Down Expand Up @@ -193,7 +193,7 @@ export function assignmentValidation(
return 'assignmentField cannot be empty and should contain type and value';
}

if (!Object.keys(findSchema.fields).includes(schemaField)) {
if (!Object.keys(findSchema.compiledFields).includes(schemaField)) {
return 'schemaField is not present in selected schema!';
}

Expand All @@ -207,7 +207,7 @@ export function assignmentValidation(
}

if (action === 3 || action === 4) {
if (!Array.isArray(findSchema.fields[schemaField].type)) {
if (!Array.isArray(findSchema.compiledFields[schemaField].type)) {
return 'append and remove actions are valid only for array schema fields';
}
}
Expand Down
1 change: 1 addition & 0 deletions modules/database/src/interfaces/ConduitDatabaseSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { MultiDocQuery, ParsedQuery, Schema, SchemaAdapter } from './SchemaAdapt
export class ConduitDatabaseSchema extends ConduitSchema {
private readonly model: SchemaAdapter<Schema>;
extensions: DeclaredSchemaExtension[];
compiledFields: ConduitModel;

constructor(
model: SchemaAdapter<Schema>,
Expand Down
4 changes: 4 additions & 0 deletions modules/database/src/models/DeclaredSchema.schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ export const DeclaredSchema = new ConduitSchema(
updatedAt: TYPE.Date,
},
],
compiledFields: {
type: TYPE.JSON,
required: true,
},
modelOptions: {
type: TYPE.JSON,
required: true,
Expand Down

0 comments on commit 6b7eb84

Please sign in to comment.