From a5fd3dd7fce135cc3d418c5badf735533311807a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=84=EB=A5=B4=ED=8E=98?= Date: Fri, 16 Feb 2024 13:53:51 +0900 Subject: [PATCH] fix: removal object fetching --- packages/backend/src/core/SignupService.ts | 2 ++ .../entities/AutoRemovalConditionEntityService.ts | 1 - .../backend/src/core/entities/UserEntityService.ts | 14 +++++++++++--- .../backend/src/models/AutoRemovalCondition.ts | 2 +- .../models/json-schema/auto-removal-condition.ts | 6 ------ packages/backend/src/models/json-schema/user.ts | 10 ++-------- .../api/endpoints/i/update-removal-condition.ts | 2 +- packages/frontend/src/pages/settings/privacy.vue | 9 +++++++-- 8 files changed, 24 insertions(+), 22 deletions(-) diff --git a/packages/backend/src/core/SignupService.ts b/packages/backend/src/core/SignupService.ts index 1ad07c271..06bf57306 100644 --- a/packages/backend/src/core/SignupService.ts +++ b/packages/backend/src/core/SignupService.ts @@ -151,7 +151,9 @@ export class SignupService { usernameLower: username.toLowerCase(), host: this.utilityService.toPunyNullable(host), token: secret, + autoRemoval: false, autoRemovalConditionId: condition.id, + autoRemovalCondition: condition, isRoot: isTheFirstUser, })); diff --git a/packages/backend/src/core/entities/AutoRemovalConditionEntityService.ts b/packages/backend/src/core/entities/AutoRemovalConditionEntityService.ts index 87daed5fb..45e8b43e8 100644 --- a/packages/backend/src/core/entities/AutoRemovalConditionEntityService.ts +++ b/packages/backend/src/core/entities/AutoRemovalConditionEntityService.ts @@ -24,7 +24,6 @@ export class AutoRemovalConditionEntityService { const condition = typeof src === 'object' ? src : await this.autoRemovalConditionRepository.findOneByOrFail({ id: src }); return { - id: condition.id, deleteAfter: condition.deleteAfter, noPiningNotes: condition.noPiningNotes, noSpecifiedNotes: condition.noSpecifiedNotes, diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts index b45370e99..c6698da03 100644 --- a/packages/backend/src/core/entities/UserEntityService.ts +++ b/packages/backend/src/core/entities/UserEntityService.ts @@ -24,6 +24,7 @@ import { passwordSchema, } from '@/models/User.js'; import type { + AutoRemovalConditionRepository, BlockingsRepository, FollowingsRepository, FollowRequestsRepository, @@ -134,6 +135,9 @@ export class UserEntityService implements OnModuleInit { @Inject(DI.userMemosRepository) private userMemosRepository: UserMemoRepository, + + @Inject(DI.autoRemovalConditionRepository) + private autoRemovalConditionRepository: AutoRemovalConditionRepository, ) { } @@ -424,7 +428,7 @@ export class UserEntityService implements OnModuleInit { const profile = isDetailed ? (opts.userProfile ?? await this.userProfilesRepository.findOneByOrFail({ userId: user.id })) : null; - + const autoRemovalCondition = await this.autoRemovalConditionRepository.findOneBy({ id: user.autoRemovalConditionId }); let relation: UserRelation | null = null; if (meId && !isMe && isDetailed) { if (opts.userRelations) { @@ -612,8 +616,12 @@ export class UserEntityService implements OnModuleInit { notificationRecieveConfig: profile?.notificationRecieveConfig, emailNotificationTypes: profile?.emailNotificationTypes, achievements: profile?.achievements, - autoRemoval: user.autoRemoval, - autoRemovalCondition: user.autoRemovalCondition, + autoRemovalCondition: { + active: user.autoRemoval, + deleteAfter: autoRemovalCondition?.deleteAfter, + noPiningNotes: autoRemovalCondition?.noPiningNotes, + noSpecifiedNotes: autoRemovalCondition?.noSpecifiedNotes, + }, loggedInDays: profile?.loggedInDates.length, policies: policies, } : {}), diff --git a/packages/backend/src/models/AutoRemovalCondition.ts b/packages/backend/src/models/AutoRemovalCondition.ts index e01d019ac..d29c90d36 100644 --- a/packages/backend/src/models/AutoRemovalCondition.ts +++ b/packages/backend/src/models/AutoRemovalCondition.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -import { Entity, Column, PrimaryColumn, Index } from 'typeorm'; +import { Entity, Column, PrimaryColumn } from 'typeorm'; import { id } from './util/id.js'; @Entity('auto_removal_condition') diff --git a/packages/backend/src/models/json-schema/auto-removal-condition.ts b/packages/backend/src/models/json-schema/auto-removal-condition.ts index 3db62e226..701dce0ad 100644 --- a/packages/backend/src/models/json-schema/auto-removal-condition.ts +++ b/packages/backend/src/models/json-schema/auto-removal-condition.ts @@ -6,12 +6,6 @@ export const packedAutoRemovalConditionSchema = { type: 'object', properties: { - id: { - type: 'string', - optional: false, nullable: false, - format: 'id', - example: 'xxxxxxxxxx', - }, deleteAfter: { type: 'number', optional: true, nullable: false, diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts index 0fb9a97f2..18d0c85ce 100644 --- a/packages/backend/src/models/json-schema/user.ts +++ b/packages/backend/src/models/json-schema/user.ts @@ -641,19 +641,13 @@ export const packedMeDetailedOnlySchema = { }, }, }, - autoRemoval: { - type: 'boolean', - nullable: false, optional: false, - }, autoRemovalCondition: { type: 'object', nullable: false, optional: false, properties: { - id: { - type: 'string', + active: { + type: 'boolean', nullable: false, optional: false, - format: 'id', - example: 'xxxxxxxxxx', }, deleteAfter: { type: 'number', diff --git a/packages/backend/src/server/api/endpoints/i/update-removal-condition.ts b/packages/backend/src/server/api/endpoints/i/update-removal-condition.ts index f8d0b097d..d67826541 100644 --- a/packages/backend/src/server/api/endpoints/i/update-removal-condition.ts +++ b/packages/backend/src/server/api/endpoints/i/update-removal-condition.ts @@ -49,7 +49,7 @@ export default class extends Endpoint { // eslint- private usersRepository: UsersRepository, ) { super(meta, paramDef, async (ps, me) => { - await this.usersRepository.update(me.id, { autoRemoval: false }); + await this.usersRepository.update(me.id, { autoRemoval: ps.active }); const updated = { deleteAfter: ps.deleteAfter, noPiningNotes: ps.noPiningNotes, diff --git a/packages/frontend/src/pages/settings/privacy.vue b/packages/frontend/src/pages/settings/privacy.vue index 9cc5c1423..952d91cf0 100644 --- a/packages/frontend/src/pages/settings/privacy.vue +++ b/packages/frontend/src/pages/settings/privacy.vue @@ -75,7 +75,7 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts._autoRemoval.use }} + {{ i18n.ts.save }} @@ -101,6 +102,7 @@ import MkSwitch from '@/components/MkSwitch.vue'; import MkSelect from '@/components/MkSelect.vue'; import FormSection from '@/components/form/section.vue'; import MkFolder from '@/components/MkFolder.vue'; +import MkInput from '@/components/MkInput.vue'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { defaultStore } from '@/store.js'; import { i18n } from '@/i18n.js'; @@ -118,7 +120,7 @@ const hideOnlineStatus = ref($i.hideOnlineStatus); const publicReactions = ref($i.publicReactions); const followingVisibility = ref($i.followingVisibility); const followersVisibility = ref($i.followersVisibility); -const autoRemoval = ref($i.autoRemoval); +const autoRemoval = ref($i.autoRemovalCondition.active); const deleteAfter = ref($i.autoRemovalCondition.deleteAfter); const noPiningNotes = ref($i.autoRemovalCondition.noPiningNotes); const noSpecifiedNotes = ref($i.autoRemovalCondition.noSpecifiedNotes); @@ -140,6 +142,9 @@ function save() { followingVisibility: followingVisibility.value, followersVisibility: followersVisibility.value, }); +} + +function saveRemovalCondition() { misskeyApi('i/update-removal-condition', { active: autoRemoval.value, deleteAfter: deleteAfter.value,