summaryrefslogtreecommitdiff
path: root/packages/backend/src/models/repositories/user.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/models/repositories/user.ts')
-rw-r--r--packages/backend/src/models/repositories/user.ts32
1 files changed, 24 insertions, 8 deletions
diff --git a/packages/backend/src/models/repositories/user.ts b/packages/backend/src/models/repositories/user.ts
index 478b1ac287..a909ab3ba6 100644
--- a/packages/backend/src/models/repositories/user.ts
+++ b/packages/backend/src/models/repositories/user.ts
@@ -1,7 +1,7 @@
import { EntityRepository, Repository, In, Not } from 'typeorm';
import Ajv from 'ajv';
import { User, ILocalUser, IRemoteUser } from '@/models/entities/user.js';
-import { Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserSecurityKeys, UserGroupJoinings, Pages, Announcements, AnnouncementReads, Antennas, AntennaNotes, ChannelFollowings, Instances } from '../index.js';
+import { Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserSecurityKeys, UserGroupJoinings, Pages, Announcements, AnnouncementReads, Antennas, AntennaNotes, ChannelFollowings, Instances, DriveFiles } from '../index.js';
import config from '@/config/index.js';
import { Packed } from '@/misc/schema.js';
import { awaitAll, Promiseable } from '@/prelude/await-all.js';
@@ -182,13 +182,18 @@ export class UserRepository extends Repository<User> {
}
public getAvatarUrl(user: User): string {
- if (user.avatarUrl) {
- return user.avatarUrl;
+ // TODO: avatarIdがあるがavatarがない(JOINされてない)場合のハンドリング
+ if (user.avatar) {
+ return DriveFiles.getPublicUrl(user.avatar, true) || this.getIdenticonUrl(user.id);
} else {
- return `${config.url}/identicon/${user.id}`;
+ return this.getIdenticonUrl(user.id);
}
}
+ public getIdenticonUrl(userId: User['id']): string {
+ return `${config.url}/identicon/${userId}`;
+ }
+
public async pack<ExpectsMe extends boolean | null = null, D extends boolean = false>(
src: User['id'] | User,
me?: { id: User['id'] } | null | undefined,
@@ -202,7 +207,18 @@ export class UserRepository extends Repository<User> {
includeSecrets: false,
}, options);
- const user = typeof src === 'object' ? src : await this.findOneOrFail(src);
+ let user: User;
+
+ if (typeof src === 'object') {
+ user = src;
+ if (src.avatar === undefined && src.avatarId) src.avatar = await DriveFiles.findOne(src.avatarId) ?? null;
+ if (src.banner === undefined && src.bannerId) src.banner = await DriveFiles.findOne(src.bannerId) ?? null;
+ } else {
+ user = await this.findOneOrFail(src, {
+ relations: ['avatar', 'banner'],
+ });
+ }
+
const meId = me ? me.id : null;
const isMe = meId === user.id;
@@ -232,7 +248,7 @@ export class UserRepository extends Repository<User> {
username: user.username,
host: user.host,
avatarUrl: this.getAvatarUrl(user),
- avatarBlurhash: user.avatarBlurhash,
+ avatarBlurhash: user.avatar?.blurhash || null,
avatarColor: null, // 後方互換性のため
isAdmin: user.isAdmin || falsy,
isModerator: user.isModerator || falsy,
@@ -256,8 +272,8 @@ export class UserRepository extends Repository<User> {
createdAt: user.createdAt.toISOString(),
updatedAt: user.updatedAt ? user.updatedAt.toISOString() : null,
lastFetchedAt: user.lastFetchedAt ? user.lastFetchedAt.toISOString() : null,
- bannerUrl: user.bannerUrl,
- bannerBlurhash: user.bannerBlurhash,
+ bannerUrl: user.banner ? DriveFiles.getPublicUrl(user.banner, false) : null,
+ bannerBlurhash: user.banner?.blurhash || null,
bannerColor: null, // 後方互換性のため
isLocked: user.isLocked,
isSilenced: user.isSilenced || falsy,