@solidxai/core 0.1.10-beta.23 → 0.1.10-beta.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +9 -1
- package/dist/dtos/create-model-metadata.dto.d.ts +2 -2
- package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-model-metadata.dto.js +6 -11
- package/dist/dtos/create-model-metadata.dto.js.map +1 -1
- package/dist/entities/legacy-common-with-id.entity.d.ts +2 -2
- package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common-with-id.entity.js +6 -6
- package/dist/entities/legacy-common-with-id.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.d.ts +1 -1
- package/dist/entities/legacy-common.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common.entity.js +14 -14
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/entities/model-metadata.entity.d.ts +2 -2
- package/dist/entities/model-metadata.entity.d.ts.map +1 -1
- package/dist/entities/model-metadata.entity.js +5 -8
- package/dist/entities/model-metadata.entity.js.map +1 -1
- package/dist/enums/legacy-table-type.enum.d.ts +6 -0
- package/dist/enums/legacy-table-type.enum.d.ts.map +1 -0
- package/dist/enums/legacy-table-type.enum.js +10 -0
- package/dist/enums/legacy-table-type.enum.js.map +1 -0
- package/dist/helpers/model-metadata-helper.service.d.ts +2 -1
- package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +4 -3
- package/dist/helpers/model-metadata-helper.service.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +8 -2
- package/dist/seeders/system-fields-seeder.service.js +1 -1
- package/dist/seeders/system-fields-seeder.service.js.map +1 -1
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +8 -1
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.js +14 -12
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +9 -9
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +2 -2
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +3 -4
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +18 -0
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +10 -0
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
- package/dist/subscribers/model-metadata.subscriber.js +1 -3
- package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
- package/package.json +1 -1
- package/src/dtos/create-model-metadata.dto.ts +5 -9
- package/src/entities/legacy-common-with-id.entity.ts +2 -2
- package/src/entities/legacy-common.entity.ts +1 -1
- package/src/entities/model-metadata.entity.ts +3 -5
- package/src/enums/legacy-table-type.enum.ts +5 -0
- package/src/helpers/model-metadata-helper.service.ts +4 -3
- package/src/index.ts +1 -0
- package/src/seeders/seed-data/solid-core-metadata.json +8 -2
- package/src/seeders/system-fields-seeder.service.ts +1 -1
- package/src/services/crud-helper.service.ts +7 -1
- package/src/services/crud.service.ts +15 -15
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +11 -11
- package/src/services/model-metadata.service.ts +6 -8
- package/src/services/settings/default-settings-provider.service.ts +10 -0
- package/src/subscribers/model-metadata.subscriber.ts +1 -3
- package/CURRENT_PROMPT +0 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BadRequestException, InternalServerErrorException, NotFoundException } from "@nestjs/common";
|
|
1
|
+
import { BadRequestException, ConflictException, HttpException, InternalServerErrorException, NotFoundException } from "@nestjs/common";
|
|
2
2
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
3
3
|
import { isArray } from "class-validator";
|
|
4
4
|
import { CommonEntity } from "../entities/common.entity";
|
|
@@ -911,7 +911,7 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
|
|
|
911
911
|
});
|
|
912
912
|
|
|
913
913
|
if (!softDeletedRows) {
|
|
914
|
-
throw new
|
|
914
|
+
throw new NotFoundException(ERROR_MESSAGES.NO_SOFT_DELETED_RECORD_FOUND);
|
|
915
915
|
}
|
|
916
916
|
|
|
917
917
|
await this.repo.update(id, {
|
|
@@ -921,13 +921,13 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
|
|
|
921
921
|
|
|
922
922
|
return { message: SUCCESS_MESSAGES.RECORD_RECOVERED, data: softDeletedRows };
|
|
923
923
|
} catch (error: any) {
|
|
924
|
-
if (error instanceof QueryFailedError) {
|
|
925
|
-
|
|
926
|
-
throw new Error(ERROR_MESSAGES.CONFLICTING_RECORD_ON_UNARCHIVE);
|
|
927
|
-
}
|
|
924
|
+
if (error instanceof QueryFailedError && (error as any).code === '23505') {
|
|
925
|
+
throw new ConflictException(ERROR_MESSAGES.CONFLICTING_RECORD_ON_UNARCHIVE);
|
|
928
926
|
}
|
|
929
|
-
|
|
930
|
-
|
|
927
|
+
if (error instanceof HttpException) {
|
|
928
|
+
throw error;
|
|
929
|
+
}
|
|
930
|
+
throw new InternalServerErrorException(error?.message ?? String(error));
|
|
931
931
|
}
|
|
932
932
|
}
|
|
933
933
|
|
|
@@ -956,7 +956,7 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
|
|
|
956
956
|
});
|
|
957
957
|
|
|
958
958
|
if (softDeletedRows.length === 0) {
|
|
959
|
-
throw new
|
|
959
|
+
throw new NotFoundException(ERROR_MESSAGES.NO_SOFT_DELETED_RECORDS_FOUND);
|
|
960
960
|
}
|
|
961
961
|
|
|
962
962
|
// Recover the specific records by setting deletedAt to null
|
|
@@ -967,13 +967,13 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
|
|
|
967
967
|
|
|
968
968
|
return { message: SUCCESS_MESSAGES.SELECTED_RECORDS_RECOVERED, recoveredIds: ids };
|
|
969
969
|
} catch (error: any) {
|
|
970
|
-
if (error instanceof QueryFailedError) {
|
|
971
|
-
|
|
972
|
-
throw new Error(ERROR_MESSAGES.CONFLICTING_RECORD_ON_UNARCHIVE);
|
|
973
|
-
}
|
|
970
|
+
if (error instanceof QueryFailedError && (error as any).code === "23505") {
|
|
971
|
+
throw new ConflictException(ERROR_MESSAGES.CONFLICTING_RECORD_ON_UNARCHIVE);
|
|
974
972
|
}
|
|
975
|
-
|
|
976
|
-
|
|
973
|
+
if (error instanceof HttpException) {
|
|
974
|
+
throw error;
|
|
975
|
+
}
|
|
976
|
+
throw new InternalServerErrorException(error?.message ?? String(error));
|
|
977
977
|
}
|
|
978
978
|
}
|
|
979
979
|
|
|
@@ -2,8 +2,8 @@ import { Injectable, Logger } from "@nestjs/common";
|
|
|
2
2
|
import { ConfigService } from "@nestjs/config";
|
|
3
3
|
import { CommonEntity } from "src/entities/common.entity";
|
|
4
4
|
import { FieldMetadata } from "src/entities/field-metadata.entity";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { LegacyCommonEntityWithExistingId } from "src/entities/legacy-common.entity";
|
|
6
|
+
import { LegacyCommonEntityWithGeneratedId } from "src/entities/legacy-common-with-id.entity";
|
|
7
7
|
import { Media } from "src/entities/media.entity";
|
|
8
8
|
import { MediaStorageProvider } from "src/interfaces";
|
|
9
9
|
import { DiskFileService, S3FileService } from "src/services/file";
|
|
@@ -27,10 +27,10 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
27
27
|
|
|
28
28
|
async retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
|
|
29
29
|
const isSupportedEntity = entity instanceof CommonEntity
|
|
30
|
-
|| entity instanceof
|
|
31
|
-
|| entity instanceof
|
|
30
|
+
|| entity instanceof LegacyCommonEntityWithExistingId
|
|
31
|
+
|| entity instanceof LegacyCommonEntityWithGeneratedId;
|
|
32
32
|
if (!isSupportedEntity) {
|
|
33
|
-
throw new Error("Entity must be an instance of CommonEntity,
|
|
33
|
+
throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntityWithExistingId or LegacyCommonEntityWithGeneratedId"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
34
34
|
}
|
|
35
35
|
// @ts-ignore
|
|
36
36
|
const media = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
|
|
@@ -60,10 +60,10 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
60
60
|
|
|
61
61
|
async store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
|
|
62
62
|
const isSupportedEntity = entity instanceof CommonEntity
|
|
63
|
-
|| entity instanceof
|
|
64
|
-
|| entity instanceof
|
|
63
|
+
|| entity instanceof LegacyCommonEntityWithExistingId
|
|
64
|
+
|| entity instanceof LegacyCommonEntityWithGeneratedId;
|
|
65
65
|
if (!isSupportedEntity) {
|
|
66
|
-
throw new Error("Entity must be an instance of CommonEntity,
|
|
66
|
+
throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntityWithExistingId or LegacyCommonEntityWithGeneratedId"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
67
67
|
}
|
|
68
68
|
const result: Media[] = [];
|
|
69
69
|
const storageProvider = mediaFieldMetadata.mediaStorageProvider;
|
|
@@ -102,10 +102,10 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
102
102
|
|
|
103
103
|
async delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void> {
|
|
104
104
|
const isSupportedEntity = entity instanceof CommonEntity
|
|
105
|
-
|| entity instanceof
|
|
106
|
-
|| entity instanceof
|
|
105
|
+
|| entity instanceof LegacyCommonEntityWithExistingId
|
|
106
|
+
|| entity instanceof LegacyCommonEntityWithGeneratedId;
|
|
107
107
|
if (!isSupportedEntity) {
|
|
108
|
-
throw new Error("Entity must be an instance of CommonEntity,
|
|
108
|
+
throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntityWithExistingId or LegacyCommonEntityWithGeneratedId"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
109
109
|
}
|
|
110
110
|
const storageProvider = mediaFieldMetadata.mediaStorageProvider;
|
|
111
111
|
const region = this.getEffectiveRegion(storageProvider.region);
|
|
@@ -2,17 +2,16 @@ import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundEx
|
|
|
2
2
|
import { InjectDataSource } from '@nestjs/typeorm';
|
|
3
3
|
import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
|
|
4
4
|
import * as path from 'path';
|
|
5
|
-
import { DataSource, EntityManager,
|
|
5
|
+
import { DataSource, EntityManager, Repository, SelectQueryBuilder } from 'typeorm';
|
|
6
6
|
import { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';
|
|
7
7
|
import { ModelMetadata } from '../entities/model-metadata.entity';
|
|
8
8
|
import { ModuleMetadata } from '../entities/module-metadata.entity';
|
|
9
9
|
|
|
10
10
|
import { kebabCase } from 'lodash';
|
|
11
|
-
import { classify } from '../helpers/string.helper';
|
|
12
11
|
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
13
12
|
import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
|
|
14
13
|
import { SolidFieldType } from 'src/dtos/create-field-metadata.dto';
|
|
15
|
-
import {
|
|
14
|
+
import { NavigationDto } from 'src/dtos/navigation.dto';
|
|
16
15
|
import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
|
|
17
16
|
import { FieldMetadataRepository } from 'src/repository/field-metadata.repository';
|
|
18
17
|
import { ModelMetadataRepository } from 'src/repository/model-metadata.repository';
|
|
@@ -22,20 +21,20 @@ import { ActionMetadata } from '../entities/action-metadata.entity';
|
|
|
22
21
|
import { FieldMetadata } from '../entities/field-metadata.entity';
|
|
23
22
|
import { MenuItemMetadata } from '../entities/menu-item-metadata.entity';
|
|
24
23
|
import { ViewMetadata } from '../entities/view-metadata.entity';
|
|
24
|
+
import { CommandService } from '../helpers/command.service';
|
|
25
25
|
import {
|
|
26
26
|
REFRESH_MODEL_COMMAND,
|
|
27
27
|
REMOVE_FIELDS_COMMAND,
|
|
28
28
|
SchematicService
|
|
29
29
|
} from '../helpers/schematic.service';
|
|
30
|
-
import {
|
|
30
|
+
import { classify } from '../helpers/string.helper';
|
|
31
31
|
import { CodeGenerationOptions } from '../interfaces';
|
|
32
32
|
import { CrudHelperService } from './crud-helper.service';
|
|
33
|
+
import { CRUDService } from './crud.service';
|
|
33
34
|
import { FieldMetadataService } from './field-metadata.service';
|
|
34
35
|
import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
|
|
35
36
|
import { RoleMetadataService } from './role-metadata.service';
|
|
36
|
-
import { NavigationDto } from 'src/dtos/navigation.dto';
|
|
37
37
|
import { SolidIntrospectService } from './solid-introspect.service';
|
|
38
|
-
import { CRUDService } from './crud.service';
|
|
39
38
|
import { SolidTsMorphService } from './solid-ts-morph.service';
|
|
40
39
|
|
|
41
40
|
@Injectable()
|
|
@@ -288,8 +287,7 @@ export class ModelMetadataService {
|
|
|
288
287
|
tableName: model.tableName,
|
|
289
288
|
userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,
|
|
290
289
|
isChild: model?.isChild,
|
|
291
|
-
|
|
292
|
-
isLegacyTableWithId: model?.isLegacyTableWithId,
|
|
290
|
+
legacyTableType: model?.legacyTableType,
|
|
293
291
|
parentModelUserKey: model?.parentModel?.singularName,
|
|
294
292
|
enableAuditTracking: model?.enableAuditTracking,
|
|
295
293
|
enableSoftDelete: model?.enableSoftDelete,
|
|
@@ -363,6 +363,16 @@ const getSolidCoreSettings = (isProd: boolean) =>
|
|
|
363
363
|
group: "system-settings",
|
|
364
364
|
sortOrder: 30,
|
|
365
365
|
controlType: "shortText",
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
moduleName: "solid-core",
|
|
369
|
+
key: "frontendAdminBaseUrl",
|
|
370
|
+
value: process.env.FRONTEND_BASE_URL,
|
|
371
|
+
level: SettingLevel.SystemAdminReadonly,
|
|
372
|
+
label: "Frontend Admin Base URL",
|
|
373
|
+
group: "system-settings",
|
|
374
|
+
sortOrder: 35,
|
|
375
|
+
controlType: "shortText",
|
|
366
376
|
},
|
|
367
377
|
{
|
|
368
378
|
moduleName: "solid-core",
|
|
@@ -35,9 +35,7 @@ export class ModelMetadataSubscriber implements EntitySubscriberInterface<ModelM
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
private systemFieldMetadataToBeAdded(event: InsertEvent<ModelMetadata>) {
|
|
38
|
-
const
|
|
39
|
-
const isLegacyTableWithId = event.entity.isLegacyTableWithId;
|
|
40
|
-
const systemFieldsDefaultMetadata = this.modelHelperService.getSystemFieldsMetadata(isLegacyTable, isLegacyTableWithId);
|
|
38
|
+
const systemFieldsDefaultMetadata = this.modelHelperService.getSystemFieldsMetadata(event.entity.legacyTableType);
|
|
41
39
|
// map and add the model as event.entity for the above metadata
|
|
42
40
|
const systemFieldsMetadata = systemFieldsDefaultMetadata.map(field => ({
|
|
43
41
|
...field,
|
package/CURRENT_PROMPT
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
Have a look at the generate command in the control plane project. It generates code i.e boilerplate for modules and models. For the generation of api code is delegate to the solid cli in the api project.
|
|
2
|
-
|
|
3
|
-
The modelMetadataService generateCode and moduleMetadataService generateCode are what are called eventually. These are called from both the refresh-model and refresh-module commands and the controllers for module-metadata and model-metadata.
|
|
4
|
-
|
|
5
|
-
Change the code in schematic service to use the solidctl generate command instead of using the schematic command directly. This will ensure that the code generation is consistent and follows the same patterns as the rest of the project.
|
|
6
|
-
|