diff --git a/dictation_server/src/api/odms/openapi.json b/dictation_server/src/api/odms/openapi.json index 0c49633..ce07f3b 100644 --- a/dictation_server/src/api/odms/openapi.json +++ b/dictation_server/src/api/odms/openapi.json @@ -3819,6 +3819,8 @@ "country": { "type": "string" }, "parentAccountId": { "type": "number" }, "delegationPermission": { "type": "boolean" }, + "autoFileDelete": { "type": "boolean" }, + "fileRetentionDays": { "type": "number" }, "primaryAdminUserId": { "type": "number" }, "secondryAdminUserId": { "type": "number" }, "parentAccountName": { "type": "string" } @@ -3828,7 +3830,9 @@ "companyName", "tier", "country", - "delegationPermission" + "delegationPermission", + "autoFileDelete", + "fileRetentionDays" ] }, "GetMyAccountResponse": { diff --git a/dictation_server/src/common/test/utility.ts b/dictation_server/src/common/test/utility.ts index 60a6a41..6fb99ab 100644 --- a/dictation_server/src/common/test/utility.ts +++ b/dictation_server/src/common/test/utility.ts @@ -2,7 +2,11 @@ import { v4 as uuidv4 } from 'uuid'; import { DataSource } from 'typeorm'; import { User, UserArchive } from '../../repositories/users/entity/user.entity'; import { Account } from '../../repositories/accounts/entity/account.entity'; -import { ADMIN_ROLES, USER_ROLES } from '../../constants'; +import { + ADMIN_ROLES, + FILE_RETENTION_DAYS_DEFAULT, + USER_ROLES, +} from '../../constants'; import { License } from '../../repositories/licenses/entity/license.entity'; type InitialTestDBState = { @@ -162,6 +166,9 @@ export const makeTestAccount = async ( parent_account_id: d?.parent_account_id ?? undefined, country: d?.country ?? 'US', delegation_permission: d?.delegation_permission ?? false, + auto_file_delete: d?.auto_file_delete ?? false, + file_retention_days: + d?.file_retention_days ?? FILE_RETENTION_DAYS_DEFAULT, locked: d?.locked ?? false, company_name: d?.company_name ?? 'test inc.', verified: d?.verified ?? true, @@ -252,6 +259,8 @@ export const makeTestSimpleAccount = async ( parent_account_id: d?.parent_account_id ?? undefined, country: d?.country ?? 'US', delegation_permission: d?.delegation_permission ?? false, + auto_file_delete: d?.auto_file_delete ?? false, + file_retention_days: d?.file_retention_days ?? FILE_RETENTION_DAYS_DEFAULT, locked: d?.locked ?? false, company_name: d?.company_name ?? 'test inc.', verified: d?.verified ?? true, diff --git a/dictation_server/src/constants/index.ts b/dictation_server/src/constants/index.ts index 6657210..979f864 100644 --- a/dictation_server/src/constants/index.ts +++ b/dictation_server/src/constants/index.ts @@ -321,3 +321,9 @@ export const USER_LICENSE_STATUS = { ALLOCATED: 'allocated', EXPIRED: 'expired', } as const; + +/** + * ファイル保持日数の初期値 + * @const {number} + */ +export const FILE_RETENTION_DAYS_DEFAULT = 30; diff --git a/dictation_server/src/features/accounts/accounts.service.spec.ts b/dictation_server/src/features/accounts/accounts.service.spec.ts index 4bfd687..75555a9 100644 --- a/dictation_server/src/features/accounts/accounts.service.spec.ts +++ b/dictation_server/src/features/accounts/accounts.service.spec.ts @@ -166,6 +166,8 @@ describe('createAccount', () => { expect(account?.country).toBe(country); expect(account?.parent_account_id).toBe(dealerAccountId); expect(account?.tier).toBe(TIERS.TIER5); + expect(account?.auto_file_delete).toBe(false); + expect(account?.file_retention_days).toBe(30); expect(account?.primary_admin_user_id).toBe(user?.id); expect(account?.secondary_admin_user_id).toBe(null); expect(user?.accepted_eula_version).toBe(acceptedEulaVersion); diff --git a/dictation_server/src/features/accounts/accounts.service.ts b/dictation_server/src/features/accounts/accounts.service.ts index 50273e6..92b6c77 100644 --- a/dictation_server/src/features/accounts/accounts.service.ts +++ b/dictation_server/src/features/accounts/accounts.service.ts @@ -452,6 +452,8 @@ export class AccountsService { country: accountInfo.country, parentAccountId: accountInfo.parent_account_id ?? undefined, delegationPermission: accountInfo.delegation_permission, + autoFileDelete: accountInfo.auto_file_delete, + fileRetentionDays: accountInfo.file_retention_days, primaryAdminUserId: accountInfo.primary_admin_user_id ?? undefined, secondryAdminUserId: accountInfo.secondary_admin_user_id ?? undefined, parentAccountName: parentInfo ? parentInfo.company_name : undefined, diff --git a/dictation_server/src/features/accounts/types/types.ts b/dictation_server/src/features/accounts/types/types.ts index 2600295..08217f8 100644 --- a/dictation_server/src/features/accounts/types/types.ts +++ b/dictation_server/src/features/accounts/types/types.ts @@ -422,6 +422,12 @@ export class Account { @ApiProperty() delegationPermission: boolean; + @ApiProperty() + autoFileDelete: boolean; + + @ApiProperty() + fileRetentionDays: number; + @ApiProperty({ required: false }) primaryAdminUserId?: number; diff --git a/dictation_server/src/features/files/test/files.service.mock.ts b/dictation_server/src/features/files/test/files.service.mock.ts index 8e9ca51..1505888 100644 --- a/dictation_server/src/features/files/test/files.service.mock.ts +++ b/dictation_server/src/features/files/test/files.service.mock.ts @@ -8,6 +8,7 @@ import { Task } from '../../../repositories/tasks/entity/task.entity'; import { TemplateFilesRepositoryService } from '../../../repositories/template_files/template_files.repository.service'; import { NotificationhubService } from '../../../gateways/notificationhub/notificationhub.service'; import { UserGroupsRepositoryService } from '../../../repositories/user_groups/user_groups.repository.service'; +import { FILE_RETENTION_DAYS_DEFAULT } from '../../../constants'; export type BlobstorageServiceMockValue = { createContainer: void | Error; @@ -160,6 +161,8 @@ export const makeDefaultUsersRepositoryMockValue = tier: 5, country: '', delegation_permission: true, + auto_file_delete: false, + file_retention_days: FILE_RETENTION_DAYS_DEFAULT, locked: false, company_name: '', verified: true, diff --git a/dictation_server/src/repositories/accounts/accounts.repository.service.ts b/dictation_server/src/repositories/accounts/accounts.repository.service.ts index 2832672..8252ec1 100644 --- a/dictation_server/src/repositories/accounts/accounts.repository.service.ts +++ b/dictation_server/src/repositories/accounts/accounts.repository.service.ts @@ -169,7 +169,6 @@ export class AccountsRepositoryService { this.isCommentOut, context, ); - // 作成されたAccountのIDを使用してユーザーを作成 const user = new User(); { diff --git a/dictation_server/src/repositories/accounts/entity/account.entity.ts b/dictation_server/src/repositories/accounts/entity/account.entity.ts index 3c40a03..255c9c1 100644 --- a/dictation_server/src/repositories/accounts/entity/account.entity.ts +++ b/dictation_server/src/repositories/accounts/entity/account.entity.ts @@ -1,4 +1,5 @@ import { bigintTransformer } from '../../../common/entity'; +import { FILE_RETENTION_DAYS_DEFAULT } from '../../../constants'; import { User } from '../../../repositories/users/entity/user.entity'; import { Entity, @@ -44,6 +45,12 @@ export class Account { @Column({ nullable: true, type: 'bigint', transformer: bigintTransformer }) active_worktype_id: number | null; + @Column({ default: false }) + auto_file_delete: boolean; + + @Column({ default: FILE_RETENTION_DAYS_DEFAULT }) + file_retention_days: number; + @Column({ nullable: true, type: 'datetime' }) deleted_at: Date | null;