diff --git a/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts b/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts index 37b5a5e..503b486 100644 --- a/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts @@ -15,6 +15,26 @@ export abstract class BaseBatchUpdateStatusManager extends BaseManager { abstract get entityTarget(): any; setData(ids: string[], status: STATUS): void { + /** + * // TODO: Handle case confirm multiple tabs; + * Pola ids yang dikirim dirubah menjadi data_id___updated_at + * Untuk mendapatkan value id nya saja dan menghindari breaking change + * karena sudah digunakan sebelumnya lakukan split dari data ids yang dikirim + * Example: + * this.dataIds = ids.map((i)=> { + * return i.split('___')[0] + * }) + * + * Simpan data ids yang mempunyai update_at kedalam valiable baru + * Example: + * this.dataIdsWithDate = ids.map((i)=> { + * return { + * id: i.split('___')[0], + * updated_at: i.split('___')[1] + * } + * }) + */ + this.dataIds = ids; this.dataStatus = status; } @@ -32,8 +52,21 @@ export abstract class BaseBatchUpdateStatusManager extends BaseManager { let totalSuccess = 0; const messages = []; + /** + * // TODO: Handle case confirm multiple tabs; + * Lopping data diambil dari dataIdsWithDate + * exp: for (const item of this.dataIdsWithDate) + */ + for (const id of this.dataIds) { try { + /** + * // TODO: Handle case confirm multiple tabs; + * buat variable: + * const id = item.id + * const updated_at = item.updated_at + */ + const entity = await this.dataService.getOneByOptions({ where: { id: id, @@ -64,6 +97,14 @@ export abstract class BaseBatchUpdateStatusManager extends BaseManager { this.tableName, ).execute(); + /** + * // TODO: Handle case confirm multiple tabs; + * lakukan update data dengan where condition id dan updated_at + * EXPECTATION => status akan berubah jika updated_at yang dikirim dari FE sama dengen yang di database + * IF => updated_at beda tidak perlu melakukan update status dan tidak perlu memanggil eventBus tetapi tetap dihitung sebagai aksi yang berhasil + * IF => FE tidak menambahkan updated_at makan lakukan update dan publishEvent + */ + const result = await this.dataService.update( this.queryRunner, this.entityTarget, diff --git a/src/core/modules/domain/usecase/managers/base-update-status.manager.ts b/src/core/modules/domain/usecase/managers/base-update-status.manager.ts index 3e4e0a9..64516db 100644 --- a/src/core/modules/domain/usecase/managers/base-update-status.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-update-status.manager.ts @@ -14,6 +14,22 @@ export abstract class BaseUpdateStatusManager extends BaseManager { abstract get entityTarget(): any; setData(id: string, status: STATUS): void { + /** + * // TODO: Handle case confirm multiple tabs; + * Pola id yang dikirim dirubah menjadi data_id___updated_at + * Untuk mendapatkan value id nya saja dan menghindari breaking change + * karena sudah digunakan sebelumnya lakukan split dari data ids yang dikirim + * Example: + * this.dataId = id.split('___')[0] + * + * Simpan data id yang mempunyai update_at kedalam valiable baru + * Example: + * this.dataIdsWithDate = { + * id: id.split('___')[0], + * updated_at: id.split('___')[1] + * } + */ + this.dataId = id; this.dataStatus = status; } @@ -43,6 +59,16 @@ export abstract class BaseUpdateStatusManager extends BaseManager { this.tableName, ).execute(); + /** + * // TODO: Handle case confirm multiple tabs; + * IF => updated_at sama dengen data yang di database + * THEN => + * - Lakukan update data dengan where condition id dan updated_at + * - EXPECTATION = > status akan berubah jika updated_at yang dikirim dari FE sama dengen yang di database + * IF => updated_at beda maka retun curent data tanpa harus malakukan update status dan publish event + * IF => FE tidak menambahkan updated_at makan lakukan update dan publishEvent + */ + this.result = await this.dataService.update( this.queryRunner, this.entityTarget,