fix: database problem
This commit is contained in:
parent
5d0012ceac
commit
a87776f41e
7 changed files with 38 additions and 75 deletions
|
@ -138,13 +138,6 @@ export class SignupService {
|
||||||
|
|
||||||
if (exist) throw new Error(' the username is already used');
|
if (exist) throw new Error(' the username is already used');
|
||||||
|
|
||||||
const condition = await transactionalEntityManager.save(new MiAutoRemovalCondition({
|
|
||||||
id: this.idService.gen(),
|
|
||||||
deleteAfter: 7,
|
|
||||||
noPiningNotes: false,
|
|
||||||
noSpecifiedNotes: false,
|
|
||||||
}));
|
|
||||||
|
|
||||||
account = await transactionalEntityManager.save(new MiUser({
|
account = await transactionalEntityManager.save(new MiUser({
|
||||||
id: this.idService.gen(),
|
id: this.idService.gen(),
|
||||||
username: username,
|
username: username,
|
||||||
|
@ -152,11 +145,16 @@ export class SignupService {
|
||||||
host: this.utilityService.toPunyNullable(host),
|
host: this.utilityService.toPunyNullable(host),
|
||||||
token: secret,
|
token: secret,
|
||||||
autoRemoval: false,
|
autoRemoval: false,
|
||||||
autoRemovalConditionId: condition.id,
|
|
||||||
autoRemovalCondition: condition,
|
|
||||||
isRoot: isTheFirstUser,
|
isRoot: isTheFirstUser,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
await transactionalEntityManager.save(new MiAutoRemovalCondition({
|
||||||
|
userId: account.id,
|
||||||
|
deleteAfter: 7,
|
||||||
|
noPiningNotes: false,
|
||||||
|
noSpecifiedNotes: false,
|
||||||
|
}));
|
||||||
|
|
||||||
await transactionalEntityManager.save(new MiUserKeypair({
|
await transactionalEntityManager.save(new MiUserKeypair({
|
||||||
publicKey: keyPair[0],
|
publicKey: keyPair[0],
|
||||||
privateKey: keyPair[1],
|
privateKey: keyPair[1],
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: syuilo and other misskey, cherrypick contributors
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
|
||||||
import { DI } from '@/di-symbols.js';
|
|
||||||
import type { AutoRemovalConditionRepository, MiAutoRemovalCondition } from '@/models/_.js';
|
|
||||||
import type { Packed } from '@/misc/json-schema.js';
|
|
||||||
import { bindThis } from '@/decorators.js';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class AutoRemovalConditionEntityService {
|
|
||||||
constructor(
|
|
||||||
@Inject(DI.autoRemovalConditionRepository)
|
|
||||||
private autoRemovalConditionRepository: AutoRemovalConditionRepository,
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@bindThis
|
|
||||||
public async pack(
|
|
||||||
src: MiAutoRemovalCondition['id'] | MiAutoRemovalCondition,
|
|
||||||
): Promise<Packed<'AutoRemovalCondition'>> {
|
|
||||||
const condition = typeof src === 'object' ? src : await this.autoRemovalConditionRepository.findOneByOrFail({ id: src });
|
|
||||||
|
|
||||||
return {
|
|
||||||
deleteAfter: condition.deleteAfter,
|
|
||||||
noPiningNotes: condition.noPiningNotes,
|
|
||||||
noSpecifiedNotes: condition.noSpecifiedNotes,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@bindThis
|
|
||||||
public packMany(
|
|
||||||
conditions: any[],
|
|
||||||
) {
|
|
||||||
return Promise.all(conditions.map(x => this.pack(x)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ import type { Promiseable } from '@/misc/prelude/await-all.js';
|
||||||
import { awaitAll } from '@/misc/prelude/await-all.js';
|
import { awaitAll } from '@/misc/prelude/await-all.js';
|
||||||
import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from '@/const.js';
|
import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from '@/const.js';
|
||||||
import type { MiLocalUser, MiPartialLocalUser, MiPartialRemoteUser, MiRemoteUser, MiUser } from '@/models/User.js';
|
import type { MiLocalUser, MiPartialLocalUser, MiPartialRemoteUser, MiRemoteUser, MiUser } from '@/models/User.js';
|
||||||
|
import { MiAutoRemovalCondition } from '@/models/AutoRemovalCondition.js';
|
||||||
import {
|
import {
|
||||||
birthdaySchema,
|
birthdaySchema,
|
||||||
descriptionSchema,
|
descriptionSchema,
|
||||||
|
@ -429,8 +430,6 @@ export class UserEntityService implements OnModuleInit {
|
||||||
? (opts.userProfile ?? await this.userProfilesRepository.findOneByOrFail({ userId: user.id }))
|
? (opts.userProfile ?? await this.userProfilesRepository.findOneByOrFail({ userId: user.id }))
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
const autoRemovalCondition = await this.autoRemovalConditionRepository.findOneBy({ id: user.autoRemovalConditionId });
|
|
||||||
|
|
||||||
let relation: UserRelation | null = null;
|
let relation: UserRelation | null = null;
|
||||||
if (meId && !isMe && isDetailed) {
|
if (meId && !isMe && isDetailed) {
|
||||||
if (opts.userRelations) {
|
if (opts.userRelations) {
|
||||||
|
@ -440,6 +439,17 @@ export class UserEntityService implements OnModuleInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let autoRemovalCondition = await this.autoRemovalConditionRepository.findOneBy({ userId: user.id });
|
||||||
|
if (autoRemovalCondition === null) {
|
||||||
|
autoRemovalCondition = new MiAutoRemovalCondition({
|
||||||
|
userId: user.id,
|
||||||
|
deleteAfter: 7,
|
||||||
|
noPiningNotes: false,
|
||||||
|
noSpecifiedNotes: false,
|
||||||
|
});
|
||||||
|
await this.autoRemovalConditionRepository.save(autoRemovalCondition);
|
||||||
|
}
|
||||||
|
|
||||||
let memo: string | null = null;
|
let memo: string | null = null;
|
||||||
if (isDetailed && meId) {
|
if (isDetailed && meId) {
|
||||||
if (opts.userMemos) {
|
if (opts.userMemos) {
|
||||||
|
|
|
@ -5,12 +5,16 @@
|
||||||
|
|
||||||
import { Entity, Column, PrimaryColumn } from 'typeorm';
|
import { Entity, Column, PrimaryColumn } from 'typeorm';
|
||||||
import { id } from './util/id.js';
|
import { id } from './util/id.js';
|
||||||
|
import { MiUser } from './User.js';
|
||||||
|
|
||||||
@Entity('auto_removal_condition')
|
@Entity('auto_removal_condition')
|
||||||
// @Index(['userId'], { unique: true })
|
// @Index(['userId'], { unique: true })
|
||||||
export class MiAutoRemovalCondition {
|
export class MiAutoRemovalCondition {
|
||||||
@PrimaryColumn(id())
|
@PrimaryColumn({
|
||||||
public id: string;
|
...id(),
|
||||||
|
nullable: false,
|
||||||
|
})
|
||||||
|
public userId: MiUser['id'];
|
||||||
|
|
||||||
@Column('bigint', {
|
@Column('bigint', {
|
||||||
default: 7,
|
default: 7,
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
|
import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
|
||||||
import { id } from './util/id.js';
|
import { id } from './util/id.js';
|
||||||
import { MiDriveFile } from './DriveFile.js';
|
import { MiDriveFile } from './DriveFile.js';
|
||||||
import { MiAutoRemovalCondition } from './AutoRemovalCondition.js';
|
|
||||||
|
|
||||||
@Entity('user')
|
@Entity('user')
|
||||||
@Index(['usernameLower', 'host'], { unique: true })
|
@Index(['usernameLower', 'host'], { unique: true })
|
||||||
|
@ -274,18 +273,6 @@ export class MiUser {
|
||||||
})
|
})
|
||||||
public token: string | null;
|
public token: string | null;
|
||||||
|
|
||||||
@Column({
|
|
||||||
...id(),
|
|
||||||
nullable: false,
|
|
||||||
})
|
|
||||||
public autoRemovalConditionId: MiAutoRemovalCondition['id'];
|
|
||||||
|
|
||||||
@OneToOne(type => MiAutoRemovalCondition, {
|
|
||||||
onDelete: 'CASCADE',
|
|
||||||
})
|
|
||||||
@JoinColumn()
|
|
||||||
public autoRemovalCondition: MiAutoRemovalCondition;
|
|
||||||
|
|
||||||
constructor(data: Partial<MiUser>) {
|
constructor(data: Partial<MiUser>) {
|
||||||
if (data == null) return;
|
if (data == null) return;
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ export class AutoNoteRemovalProcessorService {
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
|
|
||||||
for (const user of users) {
|
for (const user of users) {
|
||||||
const autoRemovalCondition = await this.autoRemovalConditionRepository.findOneByOrFail({ id: user.autoRemovalConditionId });
|
const autoRemovalCondition = await this.autoRemovalConditionRepository.findOneByOrFail({ userId: user.id });
|
||||||
const pinings: MiUserNotePining[] = await this.userNotePiningsRepository.findBy({ userId: user.id });
|
const pinings: MiUserNotePining[] = await this.userNotePiningsRepository.findBy({ userId: user.id });
|
||||||
const piningNoteIds: string[] = pinings.map(pining => pining.noteId); // pining.note always undefined (bug?)
|
const piningNoteIds: string[] = pinings.map(pining => pining.noteId); // pining.note always undefined (bug?)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
|
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { Endpoint } from '@/server/api/endpoint-base.js';
|
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
import type { AutoRemovalConditionRepository, MiAutoRemovalCondition, UsersRepository } from '@/models/_.js';
|
import { MiAutoRemovalCondition } from '@/models/_.js';
|
||||||
|
import type { AutoRemovalConditionRepository, UsersRepository } from '@/models/_.js';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import { UserEntityService } from '@/core/entities/UserEntityService.js';
|
import { UserEntityService } from '@/core/entities/UserEntityService.js';
|
||||||
import { GlobalEventService } from '@/core/GlobalEventService.js';
|
import { GlobalEventService } from '@/core/GlobalEventService.js';
|
||||||
|
@ -55,16 +56,19 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
) {
|
) {
|
||||||
super(meta, paramDef, async (ps, me) => {
|
super(meta, paramDef, async (ps, me) => {
|
||||||
await this.usersRepository.update(me.id, { autoRemoval: ps.active });
|
await this.usersRepository.update(me.id, { autoRemoval: ps.active });
|
||||||
const updated = {
|
let updates = await this.autoRemovalConditionRepository.findOneBy({ userId: me.id });
|
||||||
deleteAfter: ps.deleteAfter,
|
if (updates === null) {
|
||||||
noPiningNotes: ps.noPiningNotes,
|
updates = new MiAutoRemovalCondition({
|
||||||
noSpecifiedNotes: ps.noSpecifiedNotes,
|
userId: me.id,
|
||||||
};
|
deleteAfter: 7,
|
||||||
const updates = {} as Partial<MiAutoRemovalCondition>;
|
noPiningNotes: false,
|
||||||
|
noSpecifiedNotes: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
if (ps.deleteAfter !== undefined) updates.deleteAfter = ps.deleteAfter;
|
if (ps.deleteAfter !== undefined) updates.deleteAfter = ps.deleteAfter;
|
||||||
if (ps.noPiningNotes !== undefined) updates.noPiningNotes = ps.noPiningNotes;
|
if (ps.noPiningNotes !== undefined) updates.noPiningNotes = ps.noPiningNotes;
|
||||||
if (ps.noSpecifiedNotes !== undefined) updates.noSpecifiedNotes = ps.noSpecifiedNotes;
|
if (ps.noSpecifiedNotes !== undefined) updates.noSpecifiedNotes = ps.noSpecifiedNotes;
|
||||||
if (Object.keys(updates).length > 0) await this.autoRemovalConditionRepository.update(me.autoRemovalConditionId, updated);
|
await this.autoRemovalConditionRepository.save(updates);
|
||||||
|
|
||||||
const iObj = await this.userEntityService.pack(me.id, me, {
|
const iObj = await this.userEntityService.pack(me.id, me, {
|
||||||
schema: 'MeDetailed',
|
schema: 'MeDetailed',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue