diff --git a/dictation_server/src/common/test/modules.ts b/dictation_server/src/common/test/modules.ts index 8d50139..149c8de 100644 --- a/dictation_server/src/common/test/modules.ts +++ b/dictation_server/src/common/test/modules.ts @@ -40,6 +40,7 @@ import { TermsModule } from '../../features/terms/terms.module'; import { CacheModule } from '@nestjs/common'; import { RedisModule } from '../../gateways/redis/redis.module'; import { RedisService } from '../../gateways/redis/redis.service'; +import { JobNumberRepositoryModule } from '../../repositories/job_number/job_number.repository.module'; export const makeTestingModule = async ( datasource: DataSource, @@ -79,6 +80,7 @@ export const makeTestingModule = async ( SortCriteriaRepositoryModule, WorktypesRepositoryModule, TermsRepositoryModule, + JobNumberRepositoryModule, RedisModule, CacheModule.register({ isGlobal: true, ttl: 86400 }), ], diff --git a/dictation_server/src/common/test/utility.ts b/dictation_server/src/common/test/utility.ts index 6046a4f..d784663 100644 --- a/dictation_server/src/common/test/utility.ts +++ b/dictation_server/src/common/test/utility.ts @@ -11,6 +11,7 @@ import { License } from '../../repositories/licenses/entity/license.entity'; import { AccountArchive } from '../../repositories/accounts/entity/account_archive.entity'; import { Task } from '../../repositories/tasks/entity/task.entity'; import { JobNumber } from '../../repositories/job_number/entity/job_number.entity'; +import { SortCriteria } from '../../repositories/sort_criteria/entity/sort_criteria.entity'; type InitialTestDBState = { tier1Accounts: { account: Account; users: User[] }[]; @@ -239,6 +240,11 @@ export const makeTestAccount = async ( if (!account || !admin) { throw new Error('Unexpected null'); } + // sort_criteriaテーブルにデータを追加 + await createSortCriteria(datasource, userId, 'JOB_NUMBER', 'ASC'); + + // job_numberテーブルにデータを追加 + await createJobNumber(datasource, accountId, '00000000'); return { account: account, @@ -325,6 +331,8 @@ export const makeTestUser = async ( if (!user) { throw new Error('Unexpected null'); } + // sort_criteriaテーブルにデータを追加 + await createSortCriteria(datasource, user.id, 'FILE_LENGTH', 'ASC'); return user; }; @@ -434,6 +442,33 @@ export const getTasks = async ( return tasks; }; +// job_numberテーブルにレコードを作成する +export const createJobNumber = async ( + datasource: DataSource, + accountId: number, + jobNumber: string, +): Promise => { + await datasource.getRepository(JobNumber).insert({ + account_id: accountId, + job_number: jobNumber, + }); +}; + + +// job_numberテーブルのレコードを更新する +export const updateJobNumber = async ( + datasource: DataSource, + accountId: number, + jobNumber: string, +): Promise => { + await datasource.getRepository(JobNumber).update( + { account_id: accountId }, + { + job_number: jobNumber, + }, + ); +}; + // job_numberを取得する export const getJobNumber = async ( datasource: DataSource, @@ -446,3 +481,46 @@ export const getJobNumber = async ( }); return jobNumber; }; + +// sort_criteriaを作成する +export const createSortCriteria = async ( + datasource: DataSource, + userId: number, + parameter: string, + direction: string, +): Promise => { + await datasource.getRepository(SortCriteria).insert({ + user_id: userId, + parameter: parameter, + direction: direction, + }); +}; + +// 指定したユーザーのsort_criteriaを更新する +export const updateSortCriteria = async ( + datasource: DataSource, + userId: number, + parameter: string, + direction: string, +): Promise => { + await datasource.getRepository(SortCriteria).update( + { user_id: userId }, + { + parameter: parameter, + direction: direction, + }, + ); +}; + +// 指定したユーザーのsort_criteriaを取得する +export const getSortCriteria = async ( + datasource: DataSource, + userId: number, +): Promise => { + const sortCriteria = await datasource.getRepository(SortCriteria).findOne({ + where: { + user_id: userId, + }, + }); + return sortCriteria; +}; diff --git a/dictation_server/src/features/accounts/accounts.service.spec.ts b/dictation_server/src/features/accounts/accounts.service.spec.ts index 99ed015..dcad6ac 100644 --- a/dictation_server/src/features/accounts/accounts.service.spec.ts +++ b/dictation_server/src/features/accounts/accounts.service.spec.ts @@ -21,7 +21,7 @@ import { createWorktype, getLicenseOrders, getOptionItems, - getSortCriteria, + getSortCriteriaList, getTypistGroup, getTypistGroupMember, getTypistGroupMembers, @@ -42,6 +42,8 @@ import { getUserArchive, getAccountArchive, getTasks, + getSortCriteria, + getJobNumber, } from '../../common/test/utility'; import { AccountsService } from './accounts.service'; import { Context, makeContext } from '../../common/log'; @@ -92,10 +94,7 @@ import { } from '../workflows/test/utility'; import { UsersService } from '../users/users.service'; import { truncateAllTable } from '../../common/test/init'; -import { - createTask, - getCheckoutPermissions, -} from '../tasks/test/utility'; +import { createTask, getCheckoutPermissions } from '../tasks/test/utility'; import { createCheckoutPermissions } from '../tasks/test/utility'; import { TestLogger } from '../../common/test/logger'; import { Account } from '../../repositories/accounts/entity/account.entity'; @@ -418,7 +417,7 @@ describe('createAccount', () => { expect(accounts.length).toBe(0); const users = await getUsers(source); expect(users.length).toBe(0); - const sortCriteria = await getSortCriteria(source); + const sortCriteria = await getSortCriteriaList(source); expect(sortCriteria.length).toBe(0); // ADB2Cユーザー削除メソッドが呼ばれているか確認 expect(b2cService.deleteUser).toBeCalledWith( @@ -486,7 +485,7 @@ describe('createAccount', () => { expect(accounts.length).toBe(0); const users = await getUsers(source); expect(users.length).toBe(0); - const sortCriteria = await getSortCriteria(source); + const sortCriteria = await getSortCriteriaList(source); expect(sortCriteria.length).toBe(0); // ADB2Cユーザー削除メソッドが呼ばれているか確認 expect(b2cService.deleteUser).toBeCalledWith( @@ -557,7 +556,7 @@ describe('createAccount', () => { expect(accounts.length).toBe(0); const users = await getUsers(source); expect(users.length).toBe(0); - const sortCriteria = await getSortCriteria(source); + const sortCriteria = await getSortCriteriaList(source); expect(sortCriteria.length).toBe(0); // ADB2Cユーザー削除メソッドが呼ばれているか確認 expect(b2cService.deleteUser).toBeCalledWith( @@ -630,7 +629,7 @@ describe('createAccount', () => { expect(accounts.length).toBe(1); const users = await getUsers(source); expect(users.length).toBe(1); - const sortCriteria = await getSortCriteria(source); + const sortCriteria = await getSortCriteriaList(source); expect(sortCriteria.length).toBe(1); // ADB2Cユーザー削除メソッドが呼ばれているか確認 expect(b2cService.deleteUser).toBeCalledWith( @@ -715,7 +714,7 @@ describe('createAccount', () => { expect(accounts.length).toBe(0); const users = await getUsers(source); expect(users.length).toBe(0); - const sortCriteria = await getSortCriteria(source); + const sortCriteria = await getSortCriteriaList(source); expect(sortCriteria.length).toBe(0); // ADB2Cユーザー削除メソッドが呼ばれているか確認 expect(b2cService.deleteUser).toBeCalledWith( @@ -803,7 +802,7 @@ describe('createAccount', () => { expect(accounts.length).toBe(1); const users = await getUsers(source); expect(users.length).toBe(1); - const sortCriteria = await getSortCriteria(source); + const sortCriteria = await getSortCriteriaList(source); expect(sortCriteria.length).toBe(1); // ADB2Cユーザー削除メソッドが呼ばれているか確認 expect(b2cService.deleteUser).toBeCalledWith( @@ -7227,6 +7226,27 @@ describe('deleteAccountAndData', () => { ); expect(LicenseAllocationHistoryRecordA.length).toBe(0); + // 第五階層のアカウントAの管理者ユーザーが持つsortCriteriaが削除されていること + const sortCriteriaAccuntAAdmin = await getSortCriteria( + source, + tier5AccountsA.admin.id, + ); + expect(sortCriteriaAccuntAAdmin).toBe(null); + + // 第五階層のアカウントAの一般ユーザーが持つsortCriteriaが削除されていること + const sortCriteriaAccuntAUser = await getSortCriteria( + source, + userA?.id ?? 0, + ); + expect(sortCriteriaAccuntAUser).toBe(null); + + // 第五階層のアカウントAのJobNumberが削除されていること + const jobNumberAccuntA = await getJobNumber( + source, + tier5AccountsA.account.id, + ); + expect(jobNumberAccuntA).toBe(null); + // 第五階層のアカウントBは削除されていないこと const accountRecordB = await getAccount(source, tier5AccountsB.account.id); expect(accountRecordB?.id).not.toBeNull(); @@ -7266,6 +7286,31 @@ describe('deleteAccountAndData', () => { await getLicenseAllocationHistoryArchive(source); expect(LicenseAllocationHistoryArchive.length).toBe(1); + // 第五階層のアカウントBの管理者ユーザーが持つsortCriteriaが削除されていないこと + const sortCriteriaAccuntBAdmin = await getSortCriteria( + source, + tier5AccountsB.admin.id, + ); + expect(sortCriteriaAccuntBAdmin?.user_id).toBe(tier5AccountsB.admin.id); + expect(sortCriteriaAccuntBAdmin?.direction).toBe('ASC'); + expect(sortCriteriaAccuntBAdmin?.parameter).toBe('JOB_NUMBER'); + // 第五階層のアカウントBの一般ユーザーが持つsortCriteriaが削除されていないこと + const sortCriteriaAccuntBUser = await getSortCriteria( + source, + userB?.id ?? 0, + ); + expect(sortCriteriaAccuntBUser?.user_id).toBe(userB?.id ?? 0); + expect(sortCriteriaAccuntBUser?.direction).toBe('ASC'); + expect(sortCriteriaAccuntBUser?.parameter).toBe('FILE_LENGTH'); + + // 第五階層のアカウントBのJobNumberが削除されていないこと + const jobNumberAccuntB = await getJobNumber( + source, + tier5AccountsB.account.id, + ); + expect(jobNumberAccuntB?.account_id).toBe(tier5AccountsB.account.id); + expect(jobNumberAccuntB?.job_number).toBe('00000000'); + expect(_subject).toBe('Account Deleted Notification [U-111]'); expect(_url).toBe('http://localhost:8081/'); }); @@ -8524,6 +8569,21 @@ describe('deletePartnerAccount', () => { tier4Account.id, ); expect(templateFileRecord.length).toBe(1); + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber?.job_number).toBe('00000000'); + expect(tier4AccountJobNumber?.account_id).toBe(tier4Account.id); + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountAdminSortCriteria?.parameter).toBe('JOB_NUMBER'); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountTypistSortCriteria?.parameter).toBe('FILE_LENGTH'); } // パートナーアカウント情報の削除 @@ -8539,6 +8599,25 @@ describe('deletePartnerAccount', () => { expect(account4Record).toBe(null); const userRecordA = await getUser(source, tier4Admin?.id ?? 0); expect(userRecordA).toBe(null); + // パートナーアカウントのユーザーが削除されていること + const userRecord = await getUsers(source); + expect( + userRecord.filter((x) => x.account_id === tier4Account.id).length, + ).toBe(0); + // パートナーアカウントのJobNumberが削除されていること + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber).toBe(null); + // パートナーアカウントのソート条件が削除されていること + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria).toBe(null); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria).toBe(null); // パートナーアカウントのライセンスが削除されていること const licenseRecord = await source.manager.find(License, { @@ -8716,6 +8795,21 @@ describe('deletePartnerAccount', () => { tier4Account.id, ); expect(templateFileRecord.length).toBe(1); + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber?.job_number).toBe('00000000'); + expect(tier4AccountJobNumber?.account_id).toBe(tier4Account.id); + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountAdminSortCriteria?.parameter).toBe('JOB_NUMBER'); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountTypistSortCriteria?.parameter).toBe('FILE_LENGTH'); } try { @@ -8865,6 +8959,21 @@ describe('deletePartnerAccount', () => { tier4Account.id, ); expect(templateFileRecord.length).toBe(1); + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber?.job_number).toBe('00000000'); + expect(tier4AccountJobNumber?.account_id).toBe(tier4Account.id); + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountAdminSortCriteria?.parameter).toBe('JOB_NUMBER'); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountTypistSortCriteria?.parameter).toBe('FILE_LENGTH'); } try { @@ -9028,6 +9137,21 @@ describe('deletePartnerAccount', () => { tier4Account.id, ); expect(templateFileRecord.length).toBe(1); + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber?.job_number).toBe('00000000'); + expect(tier4AccountJobNumber?.account_id).toBe(tier4Account.id); + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountAdminSortCriteria?.parameter).toBe('JOB_NUMBER'); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountTypistSortCriteria?.parameter).toBe('FILE_LENGTH'); } // パートナーアカウント情報の削除 @@ -9047,6 +9171,25 @@ describe('deletePartnerAccount', () => { expect(account4Record).toBe(null); const userRecordA = await getUser(source, tier4Admin?.id ?? 0); expect(userRecordA).toBe(null); + // パートナーアカウントのユーザーが削除されていること + const userRecord = await getUsers(source); + expect( + userRecord.filter((x) => x.account_id === tier4Account.id).length, + ).toBe(0); + // パートナーアカウントのJobNumberが削除されていること + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber).toBe(null); + // パートナーアカウントのソート条件が削除されていること + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria).toBe(null); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria).toBe(null); // パートナーアカウントのライセンスが削除されていること const licenseRecord = await source.manager.find(License, { @@ -9234,6 +9377,21 @@ describe('deletePartnerAccount', () => { tier4Account.id, ); expect(templateFileRecord.length).toBe(1); + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber?.job_number).toBe('00000000'); + expect(tier4AccountJobNumber?.account_id).toBe(tier4Account.id); + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountAdminSortCriteria?.parameter).toBe('JOB_NUMBER'); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountTypistSortCriteria?.parameter).toBe('FILE_LENGTH'); } // パートナーアカウント情報の削除 @@ -9253,6 +9411,25 @@ describe('deletePartnerAccount', () => { expect(account4Record).toBe(null); const userRecordA = await getUser(source, tier4Admin?.id ?? 0); expect(userRecordA).toBe(null); + // パートナーアカウントのユーザーが削除されていること + const userRecord = await getUsers(source); + expect( + userRecord.filter((x) => x.account_id === tier4Account.id).length, + ).toBe(0); + // パートナーアカウントのJobNumberが削除されていること + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber).toBe(null); + // パートナーアカウントのソート条件が削除されていること + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria).toBe(null); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria).toBe(null); // パートナーアカウントのライセンスが削除されていること const licenseRecord = await source.manager.find(License, { @@ -9426,6 +9603,21 @@ describe('deletePartnerAccount', () => { tier4Account.id, ); expect(templateFileRecord.length).toBe(1); + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber?.job_number).toBe('00000000'); + expect(tier4AccountJobNumber?.account_id).toBe(tier4Account.id); + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountAdminSortCriteria?.parameter).toBe('JOB_NUMBER'); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria?.direction).toBe('ASC'); + expect(tier4AccountTypistSortCriteria?.parameter).toBe('FILE_LENGTH'); } // パートナーアカウント情報の削除 @@ -9441,6 +9633,25 @@ describe('deletePartnerAccount', () => { expect(account4Record).toBe(null); const userRecordA = await getUser(source, tier4Admin?.id ?? 0); expect(userRecordA).toBe(null); + // パートナーアカウントのユーザーが削除されていること + const userRecord = await getUsers(source); + expect( + userRecord.filter((x) => x.account_id === tier4Account.id).length, + ).toBe(0); + // パートナーアカウントのJobNumberが削除されていること + const tier4AccountJobNumber = await getJobNumber(source, tier4Account.id); + expect(tier4AccountJobNumber).toBe(null); + // パートナーアカウントのソート条件が削除されていること + const tier4AccountAdminSortCriteria = await getSortCriteria( + source, + tier4Admin?.id ?? 0, + ); + expect(tier4AccountAdminSortCriteria).toBe(null); + const tier4AccountTypistSortCriteria = await getSortCriteria( + source, + typist.id, + ); + expect(tier4AccountTypistSortCriteria).toBe(null); // パートナーアカウントのライセンスが削除されていること const licenseRecord = await source.manager.find(License, { diff --git a/dictation_server/src/features/accounts/accounts.service.ts b/dictation_server/src/features/accounts/accounts.service.ts index 75b53e9..6547f1c 100644 --- a/dictation_server/src/features/accounts/accounts.service.ts +++ b/dictation_server/src/features/accounts/accounts.service.ts @@ -2359,7 +2359,7 @@ export class AccountsService { country = targetAccount.country; } catch (e) { // アカウントの削除に失敗した場合はエラーを返す - this.logger.log(`[${context.getTrackingId()}] ${e}`); + this.logger.log(`[${context.getTrackingId()}] error=${e}`); this.logger.log( `[OUT] [${context.getTrackingId()}] ${this.deleteAccountAndData.name}`, ); @@ -2382,7 +2382,7 @@ export class AccountsService { ); } catch (e) { // ADB2Cユーザーの削除失敗時は、MANUAL_RECOVERY_REQUIREDを出して処理続行 - this.logger.log(`[${context.getTrackingId()}] ${e}`); + this.logger.log(`[${context.getTrackingId()}] error=${e}`); this.logger.log( `${MANUAL_RECOVERY_REQUIRED} [${context.getTrackingId()}] Failed to delete ADB2C users: ${accountId}, users_id: ${dbUsers.map( (x) => x.external_id, @@ -2398,7 +2398,7 @@ export class AccountsService { ); } catch (e) { // blobstorageコンテナを削除で失敗した場合は、MANUAL_RECOVERY_REQUIRED出して正常終了 - this.logger.log(`[${context.getTrackingId()}] ${e}`); + this.logger.log(`[${context.getTrackingId()}] error=${e}`); this.logger.log( `${MANUAL_RECOVERY_REQUIRED}[${context.getTrackingId()}] Failed to delete blob container: ${accountId}, country: ${country}`, ); diff --git a/dictation_server/src/features/accounts/test/utility.ts b/dictation_server/src/features/accounts/test/utility.ts index 046c2d2..473a258 100644 --- a/dictation_server/src/features/accounts/test/utility.ts +++ b/dictation_server/src/features/accounts/test/utility.ts @@ -17,7 +17,7 @@ import { AudioFile } from '../../../repositories/audio_files/entity/audio_file.e * @param dataSource データソース * @returns 該当ソート条件一覧 */ -export const getSortCriteria = async (dataSource: DataSource) => { +export const getSortCriteriaList = async (dataSource: DataSource) => { return await dataSource.getRepository(SortCriteria).find(); }; diff --git a/dictation_server/src/features/auth/test/utility.ts b/dictation_server/src/features/auth/test/utility.ts index fbbc0e4..fc78418 100644 --- a/dictation_server/src/features/auth/test/utility.ts +++ b/dictation_server/src/features/auth/test/utility.ts @@ -2,6 +2,7 @@ import { DataSource } from 'typeorm'; import { Term } from '../../../repositories/terms/entity/term.entity'; import { Account } from '../../../repositories/accounts/entity/account.entity'; import { User } from '../../../repositories/users/entity/user.entity'; +import { JobNumber } from '../../../repositories/job_number/entity/job_number.entity'; export const createTermInfo = async ( datasource: DataSource, @@ -34,5 +35,6 @@ export const deleteAccount = async ( id: number, ): Promise => { await dataSource.getRepository(User).delete({ account_id: id }); + await dataSource.getRepository(JobNumber).delete({ account_id: id }); await dataSource.getRepository(Account).delete({ id: id }); }; diff --git a/dictation_server/src/features/files/files.service.spec.ts b/dictation_server/src/features/files/files.service.spec.ts index 01d2b1e..813b155 100644 --- a/dictation_server/src/features/files/files.service.spec.ts +++ b/dictation_server/src/features/files/files.service.spec.ts @@ -3,7 +3,6 @@ import { makeErrorResponse } from '../../common/error/makeErrorResponse'; import { makeBlobstorageServiceMockValue } from './test/files.service.mock'; import { DataSource } from 'typeorm'; import { - createJobNumber, createLicense, createTask, createUserGroupAndMember, @@ -14,12 +13,14 @@ import { import { FilesService } from './files.service'; import { makeContext } from '../../common/log'; import { + createJobNumber, getJobNumber, getTasks, makeHierarchicalAccounts, makeTestAccount, makeTestSimpleAccount, makeTestUser, + updateJobNumber, } from '../../common/test/utility'; import { makeTestingModule } from '../../common/test/modules'; import { @@ -858,8 +859,8 @@ describe('タスク作成から自動ルーティング(DB使用)', () => { ); } - // 最新のジョブナンバーでjob_numberテーブルを作成 - await createJobNumber(source, accountId, '00000003'); + // 最新のジョブナンバーでjob_numberテーブルを更新 + await updateJobNumber(source, accountId, '00000003'); const service = module.get(FilesService); const spy = jest @@ -944,8 +945,8 @@ describe('タスク作成から自動ルーティング(DB使用)', () => { ); } - // 最新のジョブナンバーでjob_numberテーブルを作成 - await createJobNumber(source, accountId, '00000003'); + // 最新のジョブナンバーでjob_numberテーブルを更新 + await updateJobNumber(source, accountId, '00000003'); const service = module.get(FilesService); // メール送信関数が呼ばれたかどうかで判定を行う。実際のメール送信は行わない。 @@ -1033,8 +1034,8 @@ describe('タスク作成から自動ルーティング(DB使用)', () => { ); } - // 最新のジョブナンバーでjob_numberテーブルを作成 - await createJobNumber(source, accountId, '00000004'); + // 最新のジョブナンバーでjob_numberテーブルを更新 + await updateJobNumber(source, accountId, '00000004'); const service = module.get(FilesService); // メール送信関数が呼ばれたかどうかで判定を行う。実際のメール送信は行わない。 @@ -1127,8 +1128,8 @@ describe('タスク作成から自動ルーティング(DB使用)', () => { ); } - // 最新のジョブナンバーでjob_numberテーブルを作成 - await createJobNumber(source, accountId, '00000004'); + // 最新のジョブナンバーでjob_numberテーブルを更新 + await updateJobNumber(source, accountId, '00000004'); const service = module.get(FilesService); // メール送信関数が呼ばれたかどうかで判定を行う。実際のメール送信は行わない。 @@ -2335,8 +2336,6 @@ describe('タスク作成から自動ルーティング(DB使用)', () => { expect(jobNumber?.job_number).toEqual('99999999'); } - - const module = await makeTestingModuleWithBlobAndNotification( source, blobParam, diff --git a/dictation_server/src/features/files/test/utility.ts b/dictation_server/src/features/files/test/utility.ts index 9239a1f..5b96e99 100644 --- a/dictation_server/src/features/files/test/utility.ts +++ b/dictation_server/src/features/files/test/utility.ts @@ -110,18 +110,6 @@ export const createTask = async ( return { audioFileId: audioFile.id, taskId: task.id }; }; -// job_numberテーブルにレコードを作成する -export const createJobNumber = async ( - datasource: DataSource, - accountId: number, - jobNumber: string, -): Promise => { - await datasource.getRepository(JobNumber).insert({ - account_id: accountId, - job_number: jobNumber, - }); -}; - export const getTaskFromJobNumber = async ( datasource: DataSource, jobNumber: string, diff --git a/dictation_server/src/features/tasks/tasks.service.spec.ts b/dictation_server/src/features/tasks/tasks.service.spec.ts index 5fe8662..04af977 100644 --- a/dictation_server/src/features/tasks/tasks.service.spec.ts +++ b/dictation_server/src/features/tasks/tasks.service.spec.ts @@ -24,9 +24,11 @@ import { import { Adb2cTooManyRequestsError } from '../../gateways/adb2c/adb2c.service'; import { makeContext } from '../../common/log'; import { + createSortCriteria, makeTestAccount, makeTestSimpleAccount, makeTestUser, + updateSortCriteria, } from '../../common/test/utility'; import { ADMIN_ROLES, @@ -36,7 +38,6 @@ import { USER_ROLES, } from '../../constants'; import { makeTestingModule } from '../../common/test/modules'; -import { createSortCriteria } from '../users/test/utility'; import { createWorktype } from '../accounts/test/utility'; import { createWorkflow, @@ -3863,7 +3864,7 @@ describe('getNextTask', () => { role: USER_ROLES.TYPIST, }); - await createSortCriteria(source, typistUserId, 'JOB_NUMBER', 'ASC'); + await updateSortCriteria(source, typistUserId, 'JOB_NUMBER', 'ASC'); const { taskId: taskId1 } = await createTask( source, @@ -4007,7 +4008,7 @@ describe('getNextTask', () => { role: USER_ROLES.TYPIST, }); - await createSortCriteria(source, typistUserId, 'JOB_NUMBER', 'ASC'); + await updateSortCriteria(source, typistUserId, 'JOB_NUMBER', 'ASC'); const { taskId: taskId1, audioFileId: audioFileId1 } = await createTask( source, diff --git a/dictation_server/src/features/tasks/test/utility.ts b/dictation_server/src/features/tasks/test/utility.ts index 676f1ad..b0c9637 100644 --- a/dictation_server/src/features/tasks/test/utility.ts +++ b/dictation_server/src/features/tasks/test/utility.ts @@ -263,7 +263,6 @@ export const getTask = async ( return task; }; - export const getCheckoutPermissions = async ( datasource: DataSource, task_id: number, diff --git a/dictation_server/src/features/templates/templates.service.spec.ts b/dictation_server/src/features/templates/templates.service.spec.ts index 442dc87..aca4887 100644 --- a/dictation_server/src/features/templates/templates.service.spec.ts +++ b/dictation_server/src/features/templates/templates.service.spec.ts @@ -6,7 +6,11 @@ import { getTemplateFiles, updateTaskTemplateFile, } from './test/utility'; -import { getTasks, makeTestAccount, makeTestUser } from '../../common/test/utility'; +import { + getTasks, + makeTestAccount, + makeTestUser, +} from '../../common/test/utility'; import { makeContext } from '../../common/log'; import { TemplateFilesRepositoryService } from '../../repositories/template_files/template_files.repository.service'; import { HttpException, HttpStatus } from '@nestjs/common'; diff --git a/dictation_server/src/features/users/test/utility.ts b/dictation_server/src/features/users/test/utility.ts index 849aa34..99a6413 100644 --- a/dictation_server/src/features/users/test/utility.ts +++ b/dictation_server/src/features/users/test/utility.ts @@ -165,16 +165,3 @@ export const makeTestingModuleWithAdb2c = async ( console.log(e); } }; - -export const createSortCriteria = async ( - datasource: DataSource, - userId: number, - parameter: string, - direction: string, -): Promise => { - await datasource.getRepository(SortCriteria).insert({ - user_id: userId, - parameter: parameter, - direction: direction, - }); -}; diff --git a/dictation_server/src/repositories/accounts/accounts.repository.service.ts b/dictation_server/src/repositories/accounts/accounts.repository.service.ts index b5cbe5d..ecd571f 100644 --- a/dictation_server/src/repositories/accounts/accounts.repository.service.ts +++ b/dictation_server/src/repositories/accounts/accounts.repository.service.ts @@ -67,6 +67,7 @@ import { PartnerLicenseInfoForRepository, } from '../../features/accounts/types/types'; import { AccountArchive } from './entity/account_archive.entity'; +import { JobNumber } from '../job_number/entity/job_number.entity'; @Injectable() export class AccountsRepositoryService { @@ -1245,6 +1246,15 @@ export class AccountsRepositoryService { context, ); + // jobNumberのテーブルのレコードを削除する + const jobNumberRepo = entityManager.getRepository(JobNumber); + await deleteEntity( + jobNumberRepo, + { account_id: accountId }, + this.isCommentOut, + context, + ); + // アカウントを削除 await deleteEntity( accountRepo, @@ -1624,6 +1634,15 @@ export class AccountsRepositoryService { context, ); + // JobNumberのテーブルのレコードを削除する + const jobNumberRepo = entityManager.getRepository(JobNumber); + await deleteEntity( + jobNumberRepo, + { account_id: targetAccountId }, + this.isCommentOut, + context, + ); + // アカウントを削除 await deleteEntity( accountRepo,