mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-12-13 10:28:25 +00:00
merge: Fix Postgres / TypeORM errors *FOR STABLE* (!1192)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1192 Approved-by: Hazelnoot <acomputerdog@gmail.com>
This commit is contained in:
commit
2f67882f82
1 changed files with 25 additions and 17 deletions
|
|
@ -4,7 +4,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { Not, IsNull } from 'typeorm';
|
import { Not, IsNull, DataSource } from 'typeorm';
|
||||||
import type { FollowingsRepository, FollowRequestsRepository, UsersRepository } from '@/models/_.js';
|
import type { FollowingsRepository, FollowRequestsRepository, UsersRepository } from '@/models/_.js';
|
||||||
import { MiUser } from '@/models/User.js';
|
import { MiUser } from '@/models/User.js';
|
||||||
import { QueueService } from '@/core/QueueService.js';
|
import { QueueService } from '@/core/QueueService.js';
|
||||||
|
|
@ -21,6 +21,7 @@ import { LoggerService } from '@/core/LoggerService.js';
|
||||||
import type Logger from '@/logger.js';
|
import type Logger from '@/logger.js';
|
||||||
import { renderInlineError } from '@/misc/render-inline-error.js';
|
import { renderInlineError } from '@/misc/render-inline-error.js';
|
||||||
import { trackPromise } from '@/misc/promise-tracker.js';
|
import { trackPromise } from '@/misc/promise-tracker.js';
|
||||||
|
import { InternalEventService } from '@/core/InternalEventService.js';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UserSuspendService {
|
export class UserSuspendService {
|
||||||
|
|
@ -36,12 +37,16 @@ export class UserSuspendService {
|
||||||
@Inject(DI.followRequestsRepository)
|
@Inject(DI.followRequestsRepository)
|
||||||
private followRequestsRepository: FollowRequestsRepository,
|
private followRequestsRepository: FollowRequestsRepository,
|
||||||
|
|
||||||
|
@Inject(DI.db)
|
||||||
|
private db: DataSource,
|
||||||
|
|
||||||
private userEntityService: UserEntityService,
|
private userEntityService: UserEntityService,
|
||||||
private queueService: QueueService,
|
private queueService: QueueService,
|
||||||
private globalEventService: GlobalEventService,
|
private globalEventService: GlobalEventService,
|
||||||
private apRendererService: ApRendererService,
|
private apRendererService: ApRendererService,
|
||||||
private moderationLogService: ModerationLogService,
|
private moderationLogService: ModerationLogService,
|
||||||
private readonly cacheService: CacheService,
|
private readonly cacheService: CacheService,
|
||||||
|
private readonly internalEventService: InternalEventService,
|
||||||
|
|
||||||
loggerService: LoggerService,
|
loggerService: LoggerService,
|
||||||
) {
|
) {
|
||||||
|
|
@ -56,6 +61,8 @@ export class UserSuspendService {
|
||||||
isSuspended: true,
|
isSuspended: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await this.internalEventService.emit(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', { id: user.id });
|
||||||
|
|
||||||
await this.moderationLogService.log(moderator, 'suspend', {
|
await this.moderationLogService.log(moderator, 'suspend', {
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
userUsername: user.username,
|
userUsername: user.username,
|
||||||
|
|
@ -74,6 +81,8 @@ export class UserSuspendService {
|
||||||
isSuspended: false,
|
isSuspended: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await this.internalEventService.emit(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', { id: user.id });
|
||||||
|
|
||||||
await this.moderationLogService.log(moderator, 'unsuspend', {
|
await this.moderationLogService.log(moderator, 'unsuspend', {
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
userUsername: user.username,
|
userUsername: user.username,
|
||||||
|
|
@ -178,30 +187,29 @@ export class UserSuspendService {
|
||||||
// Freeze follow relations with all remote users
|
// Freeze follow relations with all remote users
|
||||||
await this.followingsRepository
|
await this.followingsRepository
|
||||||
.createQueryBuilder('following')
|
.createQueryBuilder('following')
|
||||||
.orWhere({
|
|
||||||
followeeId: user.id,
|
|
||||||
followerHost: Not(IsNull()),
|
|
||||||
})
|
|
||||||
.update({
|
.update({
|
||||||
isFollowerHibernated: true,
|
isFollowerHibernated: true,
|
||||||
})
|
})
|
||||||
|
.where({
|
||||||
|
followeeId: user.id,
|
||||||
|
followerHost: Not(IsNull()),
|
||||||
|
})
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
private async unFreezeAll(user: MiUser): Promise<void> {
|
private async unFreezeAll(user: MiUser): Promise<void> {
|
||||||
// Restore follow relations with all remote users
|
// Restore follow relations with all remote users
|
||||||
await this.followingsRepository
|
|
||||||
.createQueryBuilder('following')
|
// TypeORM does not support UPDATE with JOIN: https://github.com/typeorm/typeorm/issues/564#issuecomment-310331468
|
||||||
.innerJoin(MiUser, 'follower', 'user.id = following.followerId')
|
await this.db.query(`
|
||||||
.andWhere('follower.isHibernated = false') // Don't unfreeze if the follower is *actually* frozen
|
UPDATE "following"
|
||||||
.andWhere({
|
SET "isFollowerHibernated" = false
|
||||||
followeeId: user.id,
|
FROM "user"
|
||||||
followerHost: Not(IsNull()),
|
WHERE "user"."id" = "following"."followerId"
|
||||||
})
|
AND "user"."isHibernated" = false -- Don't unfreeze if the follower is *actually* frozen
|
||||||
.update({
|
AND "followeeId" = $1
|
||||||
isFollowerHibernated: false,
|
AND "followeeHost" IS NOT NULL
|
||||||
})
|
`, [user.id]);
|
||||||
.execute();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue