summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-10-22 13:02:24 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-10-22 13:02:24 +0900
commit4eaa02d25f83eff38cecd6db1724c8626dc3af2e (patch)
treebeedb76bfeae7a11109f25758f55f097f4c66d24 /packages/backend/src
parentUpdate CHANGELOG.md (diff)
downloadsharkey-4eaa02d25f83eff38cecd6db1724c8626dc3af2e.tar.gz
sharkey-4eaa02d25f83eff38cecd6db1724c8626dc3af2e.tar.bz2
sharkey-4eaa02d25f83eff38cecd6db1724c8626dc3af2e.zip
enhance: improve avatar decoration
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/core/entities/UserEntityService.ts8
-rw-r--r--packages/backend/src/models/User.ts10
-rw-r--r--packages/backend/src/models/json-schema/user.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/i/update.ts14
4 files changed, 32 insertions, 8 deletions
diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts
index 66facce4c2..09a7e579f0 100644
--- a/packages/backend/src/core/entities/UserEntityService.ts
+++ b/packages/backend/src/core/entities/UserEntityService.ts
@@ -338,9 +338,11 @@ export class UserEntityService implements OnModuleInit {
host: user.host,
avatarUrl: user.avatarUrl ?? this.getIdenticonUrl(user),
avatarBlurhash: user.avatarBlurhash,
- avatarDecorations: user.avatarDecorations.length > 0 ? this.avatarDecorationService.getAll().then(decorations => decorations.filter(decoration => user.avatarDecorations.includes(decoration.id)).map(decoration => ({
- id: decoration.id,
- url: decoration.url,
+ avatarDecorations: user.avatarDecorations.length > 0 ? this.avatarDecorationService.getAll().then(decorations => user.avatarDecorations.filter(ud => decorations.some(d => d.id === ud.id)).map(ud => ({
+ id: ud.id,
+ angle: ud.angle || undefined,
+ flipH: ud.flipH || undefined,
+ url: decorations.find(d => d.id === ud.id)!.url,
}))) : [],
isBot: user.isBot,
isCat: user.isCat,
diff --git a/packages/backend/src/models/User.ts b/packages/backend/src/models/User.ts
index c98426a7b6..c3762fcd3e 100644
--- a/packages/backend/src/models/User.ts
+++ b/packages/backend/src/models/User.ts
@@ -138,10 +138,14 @@ export class MiUser {
})
public bannerBlurhash: string | null;
- @Column('varchar', {
- length: 512, array: true, default: '{}',
+ @Column('jsonb', {
+ default: [],
})
- public avatarDecorations: string[];
+ public avatarDecorations: {
+ id: string;
+ angle: number;
+ flipH: boolean;
+ }[];
@Index()
@Column('varchar', {
diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts
index bf283fbeb2..75f3286eff 100644
--- a/packages/backend/src/models/json-schema/user.ts
+++ b/packages/backend/src/models/json-schema/user.ts
@@ -54,6 +54,14 @@ export const packedUserLiteSchema = {
format: 'url',
nullable: false, optional: false,
},
+ angle: {
+ type: 'number',
+ nullable: false, optional: true,
+ },
+ flipH: {
+ type: 'boolean',
+ nullable: false, optional: true,
+ },
},
},
},
diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts
index 79ead57a66..b03381a3f3 100644
--- a/packages/backend/src/server/api/endpoints/i/update.ts
+++ b/packages/backend/src/server/api/endpoints/i/update.ts
@@ -133,7 +133,13 @@ export const paramDef = {
lang: { type: 'string', enum: [null, ...Object.keys(langmap)] as string[], nullable: true },
avatarId: { type: 'string', format: 'misskey:id', nullable: true },
avatarDecorations: { type: 'array', maxItems: 1, items: {
- type: 'string',
+ type: 'object',
+ properties: {
+ id: { type: 'string', format: 'misskey:id' },
+ angle: { type: 'number', nullable: true, maximum: 0.5, minimum: -0.5 },
+ flipH: { type: 'boolean', nullable: true },
+ },
+ required: ['id'],
} },
bannerId: { type: 'string', format: 'misskey:id', nullable: true },
fields: {
@@ -309,7 +315,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
.filter(d => d.roleIdsThatCanBeUsedThisDecoration.filter(roleId => allRoles.some(r => r.id === roleId)).length === 0 || myRoles.some(r => d.roleIdsThatCanBeUsedThisDecoration.includes(r.id)))
.map(d => d.id);
- updates.avatarDecorations = ps.avatarDecorations.filter(id => decorationIds.includes(id));
+ updates.avatarDecorations = ps.avatarDecorations.filter(d => decorationIds.includes(d.id)).map(d => ({
+ id: d.id,
+ angle: d.angle ?? 0,
+ flipH: d.flipH ?? false,
+ }));
}
if (ps.pinnedPageId) {