diff --git a/dictation_server/src/common/test/utility.ts b/dictation_server/src/common/test/utility.ts index d784663..2d531a4 100644 --- a/dictation_server/src/common/test/utility.ts +++ b/dictation_server/src/common/test/utility.ts @@ -454,7 +454,6 @@ export const createJobNumber = async ( }); }; - // job_numberテーブルのレコードを更新する export const updateJobNumber = async ( datasource: DataSource, diff --git a/dictation_server/src/constants/index.ts b/dictation_server/src/constants/index.ts index 6478a26..c91dd23 100644 --- a/dictation_server/src/constants/index.ts +++ b/dictation_server/src/constants/index.ts @@ -339,3 +339,16 @@ export const STORAGE_SIZE_PER_LICENSE = 5; * @const {number} */ export const STORAGE_WARNING_THRESHOLD_PERCENT = 80; + +/** + * JobNumberの初期値 + * @const {string} + */ +export const INITIAL_JOB_NUMBER = '00000000'; + + +/** + * JobNumberの最大値 + * @const {string} + */ +export const MAX_JOB_NUMBER = '99999999'; diff --git a/dictation_server/src/features/accounts/accounts.service.spec.ts b/dictation_server/src/features/accounts/accounts.service.spec.ts index dcad6ac..1dc617b 100644 --- a/dictation_server/src/features/accounts/accounts.service.spec.ts +++ b/dictation_server/src/features/accounts/accounts.service.spec.ts @@ -49,6 +49,7 @@ import { AccountsService } from './accounts.service'; import { Context, makeContext } from '../../common/log'; import { ADB2C_SIGN_IN_TYPE, + INITIAL_JOB_NUMBER, LICENSE_ALLOCATED_STATUS, LICENSE_ISSUE_STATUS, LICENSE_TYPE, @@ -223,6 +224,16 @@ describe('createAccount', () => { expect(user?.account_id).toBe(accountId); expect(user?.role).toBe(role); + // jobNumberの初期値が正しく設定されているか確認 + const jobNumber = await getJobNumber(source, accountId); + expect(jobNumber?.job_number).toBe(INITIAL_JOB_NUMBER); + + // sortCriteriaが正しく設定されているか確認 + const sortCriteria = await getSortCriteria(source, user?.id ?? 0); + expect(sortCriteria?.user_id).toBe(user?.id); + expect(sortCriteria?.direction).toBe('ASC'); + expect(sortCriteria?.parameter).toBe('JOB_NUMBER'); + // 想定通りのメールが送られているか確認 expect(_subject).toBe('User Registration Notification [U-102]'); expect( @@ -878,7 +889,26 @@ describe('createPartnerAccount', () => { }, }); - overrideSendgridService(service, {}); + let _subject = ''; + let _url: string | undefined = ''; + overrideSendgridService(service, { + sendMail: async ( + context: Context, + to: string[], + cc: string[], + from: string, + subject: string, + text: string, + html: string, + ) => { + const urlPattern = /https?:\/\/[^\s]+/g; + const urls = text.match(urlPattern); + const url = urls?.pop(); + + _subject = subject; + _url = url; + }, + }); overrideBlobstorageService(service, { createContainer: async () => { @@ -918,6 +948,19 @@ describe('createPartnerAccount', () => { expect(createdAccount?.tier).toBe(2); expect(createdAccount?.primary_admin_user_id).toBe(createdUser?.id); expect(createdAccount?.secondary_admin_user_id).toBe(null); + const sortCriteria = await getSortCriteria(source, createdUser?.id ?? 0); + expect(sortCriteria).not.toBeNull(); + expect(sortCriteria?.user_id).toBe(createdUser?.id); + expect(sortCriteria?.direction).toBe('ASC'); + expect(sortCriteria?.parameter).toBe('JOB_NUMBER'); + const jobNumber = await getJobNumber(source, accountId); + expect(jobNumber?.job_number).toBe(INITIAL_JOB_NUMBER); + + // 想定通りのメールが送られているか確認 + expect(_subject).toBe('User Registration Notification [U-114]'); + expect( + _url?.startsWith('http://localhost:8081/mail-confirm/user?verify='), + ).toBeTruthy(); } }); @@ -1308,6 +1351,10 @@ describe('createPartnerAccount', () => { expect(users.length).toBe(2); expect(users[0].external_id).toBe(parentExternalId); expect(users[1].external_id).toBe(partnerExternalId); + const sortCriteria = await getSortCriteriaList(source); + expect(sortCriteria.length).toBe(2); + const jobNumber = await getJobNumber(source, accounts[1].id); + expect(jobNumber?.job_number).toBe(INITIAL_JOB_NUMBER); // ADB2Cユーザー削除メソッドが呼ばれているか確認 expect(b2cService.deleteUser).toBeCalledWith(partnerExternalId, context); } @@ -1487,6 +1534,10 @@ describe('createPartnerAccount', () => { expect(users.length).toBe(2); expect(users[0].external_id).toBe(parentExternalId); expect(users[1].external_id).toBe(partnerExternalId); + const sortCriteria = await getSortCriteriaList(source); + expect(sortCriteria.length).toBe(2); + const jobNumber = await getJobNumber(source, accounts[1].id); + expect(jobNumber?.job_number).toBe(INITIAL_JOB_NUMBER); // ADB2Cユーザー削除メソッドが呼ばれているか確認 expect(b2cService.deleteUser).toBeCalledWith(partnerExternalId, context); // コンテナ削除メソッドが呼ばれているか確認 diff --git a/dictation_server/src/repositories/accounts/accounts.repository.service.ts b/dictation_server/src/repositories/accounts/accounts.repository.service.ts index ecd571f..06ea6ef 100644 --- a/dictation_server/src/repositories/accounts/accounts.repository.service.ts +++ b/dictation_server/src/repositories/accounts/accounts.repository.service.ts @@ -26,6 +26,7 @@ import { getTaskListSortableAttribute, } from '../../common/types/sort/util'; import { + INITIAL_JOB_NUMBER, LICENSE_ALLOCATED_STATUS, LICENSE_EXPIRATION_THRESHOLD_DAYS, LICENSE_ISSUE_STATUS, @@ -210,6 +211,20 @@ export class AccountsRepositoryService { throw new Error(`invalid update. result.affected=${result.affected}`); } + // job_numberの初期値を設定 + const jobNumberRepo = entityManager.getRepository(JobNumber); + const initialJobNumber = jobNumberRepo.create({ + account_id: persistedAccount.id, + job_number: INITIAL_JOB_NUMBER, + }); + await insertEntity( + JobNumber, + jobNumberRepo, + initialJobNumber, + this.isCommentOut, + context, + ); + // ユーザーのタスクソート条件を作成 const sortCriteria = new SortCriteria(); { @@ -245,6 +260,14 @@ export class AccountsRepositoryService { const accountsRepo = entityManager.getRepository(Account); const usersRepo = entityManager.getRepository(User); const sortCriteriaRepo = entityManager.getRepository(SortCriteria); + const jobNumberRepo = entityManager.getRepository(JobNumber); + // JobNumberを削除 + await deleteEntity( + jobNumberRepo, + { account_id: accountId }, + this.isCommentOut, + context, + ); // ソート条件を削除 await deleteEntity( sortCriteriaRepo, diff --git a/dictation_server/src/repositories/tasks/tasks.repository.service.ts b/dictation_server/src/repositories/tasks/tasks.repository.service.ts index 1e30896..aef734f 100644 --- a/dictation_server/src/repositories/tasks/tasks.repository.service.ts +++ b/dictation_server/src/repositories/tasks/tasks.repository.service.ts @@ -12,6 +12,7 @@ import { import { Task } from './entity/task.entity'; import { ADMIN_ROLES, + MAX_JOB_NUMBER, NODE_ENV_TEST, TASK_STATUS, USER_ROLES, @@ -921,7 +922,7 @@ export class TasksRepositoryService { } let newJobNumber: string = ''; - if (currentJobNumberData.job_number === '99999999') { + if (currentJobNumberData.job_number === MAX_JOB_NUMBER) { // 末尾なら00000001に戻る newJobNumber = '00000001'; } else {