فهرست منبع

query node - storage provider metadata III

ondratra 3 سال پیش
والد
کامیت
d824a2d12a

+ 7 - 0
query-node/generated/graphql-server/generated/binding.ts

@@ -230,6 +230,8 @@ export type StorageProviderOrderByInput =   'createdAt_ASC' |
   'updatedAt_DESC' |
   'deletedAt_ASC' |
   'deletedAt_DESC' |
+  'isActive_ASC' |
+  'isActive_DESC' |
   'type_ASC' |
   'type_DESC' |
   'metadata_ASC' |
@@ -1126,11 +1128,13 @@ export interface MembershipWhereUniqueInput {
 }
 
 export interface StorageProviderCreateInput {
+  isActive: Boolean
   type: StorageProviderType
   metadata?: String | null
 }
 
 export interface StorageProviderUpdateInput {
+  isActive?: Boolean | null
   type?: StorageProviderType | null
   metadata?: String | null
 }
@@ -1160,6 +1164,8 @@ export interface StorageProviderWhereInput {
   deletedAt_gte?: DateTime | null
   deletedById_eq?: ID_Input | null
   deletedById_in?: ID_Output[] | ID_Output | null
+  isActive_eq?: Boolean | null
+  isActive_in?: Boolean[] | Boolean | null
   type_eq?: StorageProviderType | null
   type_in?: StorageProviderType[] | StorageProviderType | null
   metadata_eq?: String | null
@@ -1846,6 +1852,7 @@ export interface StorageProvider extends BaseGraphQLObject {
   deletedAt?: DateTime | null
   deletedById?: String | null
   version: Int
+  isActive: Boolean
   type: StorageProviderType
   metadata?: String | null
   dataObjects: Array<DataObject>

+ 15 - 0
query-node/generated/graphql-server/generated/classes.ts

@@ -1332,6 +1332,9 @@ export enum StorageProviderOrderByEnum {
   deletedAt_ASC = "deletedAt_ASC",
   deletedAt_DESC = "deletedAt_DESC",
 
+  isActive_ASC = "isActive_ASC",
+  isActive_DESC = "isActive_DESC",
+
   type_ASC = "type_ASC",
   type_DESC = "type_DESC",
 
@@ -1417,6 +1420,12 @@ export class StorageProviderWhereInput {
   @TypeGraphQLField(() => [ID], { nullable: true })
   deletedById_in?: string[];
 
+  @TypeGraphQLField(() => Boolean, { nullable: true })
+  isActive_eq?: Boolean;
+
+  @TypeGraphQLField(() => [Boolean], { nullable: true })
+  isActive_in?: Boolean[];
+
   @TypeGraphQLField(() => StorageProviderType, { nullable: true })
   type_eq?: StorageProviderType;
 
@@ -1447,6 +1456,9 @@ export class StorageProviderWhereUniqueInput {
 
 @TypeGraphQLInputType()
 export class StorageProviderCreateInput {
+  @TypeGraphQLField()
+  isActive!: boolean;
+
   @TypeGraphQLField(() => StorageProviderType)
   type!: StorageProviderType;
 
@@ -1456,6 +1468,9 @@ export class StorageProviderCreateInput {
 
 @TypeGraphQLInputType()
 export class StorageProviderUpdateInput {
+  @TypeGraphQLField({ nullable: true })
+  isActive?: boolean;
+
   @TypeGraphQLField(() => StorageProviderType, { nullable: true })
   type?: StorageProviderType;
 

+ 7 - 0
query-node/generated/graphql-server/generated/schema.graphql

@@ -1446,6 +1446,7 @@ type StorageProvider implements BaseGraphQLObject {
   deletedAt: DateTime
   deletedById: String
   version: Int!
+  isActive: Boolean!
   type: StorageProviderType!
 
   """Custom metadata set by provider"""
@@ -1460,6 +1461,7 @@ type StorageProviderConnection {
 }
 
 input StorageProviderCreateInput {
+  isActive: Boolean!
   type: StorageProviderType!
   metadata: String
 }
@@ -1476,6 +1478,8 @@ enum StorageProviderOrderByInput {
   updatedAt_DESC
   deletedAt_ASC
   deletedAt_DESC
+  isActive_ASC
+  isActive_DESC
   type_ASC
   type_DESC
   metadata_ASC
@@ -1488,6 +1492,7 @@ enum StorageProviderType {
 }
 
 input StorageProviderUpdateInput {
+  isActive: Boolean
   type: StorageProviderType
   metadata: String
 }
@@ -1517,6 +1522,8 @@ input StorageProviderWhereInput {
   deletedAt_gte: DateTime
   deletedById_eq: ID
   deletedById_in: [ID!]
+  isActive_eq: Boolean
+  isActive_in: [Boolean!]
   type_eq: StorageProviderType
   type_in: [StorageProviderType!]
   metadata_eq: String

+ 5 - 2
query-node/generated/graphql-server/src/modules/storage-provider/storage-provider.model.ts

@@ -1,4 +1,4 @@
-import { BaseModel, Model, OneToMany, EnumField, StringField } from 'warthog';
+import { BaseModel, BooleanField, Model, OneToMany, EnumField, StringField } from 'warthog';
 
 import { DataObject } from '../data-object/data-object.model';
 
@@ -7,6 +7,9 @@ export { StorageProviderType };
 
 @Model({ api: {} })
 export class StorageProvider extends BaseModel {
+  @BooleanField({})
+  isActive!: boolean;
+
   @EnumField('StorageProviderType', StorageProviderType, {})
   type!: StorageProviderType;
 
@@ -16,7 +19,7 @@ export class StorageProvider extends BaseModel {
   })
   metadata?: string;
 
-  @OneToMany(() => DataObject, (param: DataObject) => param.liaison)
+  @OneToMany(() => DataObject, (param: DataObject) => param.liaison, { cascade: ["insert", "update"] })
   dataObjects?: DataObject[];
 
   constructor(init?: Partial<StorageProvider>) {

+ 26 - 7
query-node/mappings/src/workingGroup.ts

@@ -101,12 +101,23 @@ export async function workingGroup_OpeningFilled(
   const storageProviderIds = [...applicationIdToWorkerIdMap.values()]
 
   for (const storageProviderId of storageProviderIds) {
-    const storageProvider = new StorageProvider({
+    // load storage provider
+    const storageProvider = await db.get(StorageProvider, { where: { id: storageProviderId.toString() } as FindConditions<StorageProvider> })
+
+    // reactivate storage provider if it already exists
+    if (storageProvider) {
+      await reactivateStorageProvider(db, storageProvider)
+      continue
+    }
+
+    // create new storage provider
+    const newStorageProvider = new StorageProvider({
       id: storageProviderId.toString(),
       type: storageProviderType,
+      isActive: true,
     })
 
-    await db.save<StorageProvider>(storageProvider)
+    await db.save<StorageProvider>(newStorageProvider)
   }
 
   // emit log event
@@ -122,7 +133,7 @@ export async function workingGroup_WorkerStorageUpdated(db: DatabaseManager, sto
     return inconsistentState('Non-existing storage provider update requested', storageProviderId)
   }
 
-  storageProvider.metadata = newMetadata.toString()
+  storageProvider.metadata = newMetadata.toUtf8()
 
   await db.save<StorageProvider>(storageProvider)
 
@@ -132,7 +143,7 @@ export async function workingGroup_WorkerStorageUpdated(db: DatabaseManager, sto
 
 export async function workingGroup_TerminatedWorker(db: DatabaseManager, storageProviderId: WorkerId): Promise<void> {
   // do removal logic
-  await removeStorageProvider(db, storageProviderId)
+  await deactivateStorageProvider(db, storageProviderId)
 
   // emit log event
   logger.info("Storage provider has beed removed (worker terminated)", {id: storageProviderId})
@@ -140,7 +151,7 @@ export async function workingGroup_TerminatedWorker(db: DatabaseManager, storage
 
 export async function workingGroup_WorkerExited(db: DatabaseManager, storageProviderId: WorkerId): Promise<void> {
   // do removal logic
-  await removeStorageProvider(db, storageProviderId)
+  await deactivateStorageProvider(db, storageProviderId)
 
   // emit log event
   logger.info("Storage provider has beed removed (worker exited)", {id: storageProviderId})
@@ -148,7 +159,13 @@ export async function workingGroup_WorkerExited(db: DatabaseManager, storageProv
 
 /////////////////// Helpers ////////////////////////////////////////////////////
 
-async function removeStorageProvider(db: DatabaseManager, storageProviderId: WorkerId) {
+async function reactivateStorageProvider(db: DatabaseManager, storageProvider: StorageProvider) {
+  storageProvider.isActive = true
+
+  await db.save<StorageProvider>(storageProvider)
+}
+
+async function deactivateStorageProvider(db: DatabaseManager, storageProviderId: WorkerId) {
   // load storage provider
   const storageProvider = await db.get(StorageProvider, { where: { id: storageProviderId.toString() } as FindConditions<StorageProvider> })
 
@@ -157,5 +174,7 @@ async function removeStorageProvider(db: DatabaseManager, storageProviderId: Wor
     return inconsistentState('Non-existing storage provider deletion requested', storageProviderId)
   }
 
-  await db.remove<StorageProvider>(storageProvider)
+  storageProvider.isActive = false
+
+  await db.save<StorageProvider>(storageProvider)
 }

+ 2 - 0
query-node/schema.graphql

@@ -396,6 +396,8 @@ type StorageProvider @entity {
   "Runtime entity identifier (EntityId)"
   id: ID!
 
+  isActive: Boolean!
+
   type: StorageProviderType!
 
   "Custom metadata set by provider"