summaryrefslogtreecommitdiff
path: root/packages/backend
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-03-12 16:38:08 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-03-12 16:38:08 +0900
commit7c2d8d73ce3dc407a57925562b48357e54c315e6 (patch)
tree46c1145bbf388f01d94002f68c67360054a73f2e /packages/backend
parentfix(backend/ApRendererService): allow announces with visibility: followers (#... (diff)
downloadmisskey-7c2d8d73ce3dc407a57925562b48357e54c315e6.tar.gz
misskey-7c2d8d73ce3dc407a57925562b48357e54c315e6.tar.bz2
misskey-7c2d8d73ce3dc407a57925562b48357e54c315e6.zip
enhance: ロールの並び順を設定可能に
Diffstat (limited to 'packages/backend')
-rw-r--r--packages/backend/migration/1678602320354-role-display-order.js11
-rw-r--r--packages/backend/src/core/entities/RoleEntityService.ts1
-rw-r--r--packages/backend/src/core/entities/UserEntityService.ts6
-rw-r--r--packages/backend/src/models/entities/Role.ts6
-rw-r--r--packages/backend/src/server/api/endpoints/admin/roles/create.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/admin/roles/update.ts3
6 files changed, 28 insertions, 2 deletions
diff --git a/packages/backend/migration/1678602320354-role-display-order.js b/packages/backend/migration/1678602320354-role-display-order.js
new file mode 100644
index 0000000000..de8f6f1033
--- /dev/null
+++ b/packages/backend/migration/1678602320354-role-display-order.js
@@ -0,0 +1,11 @@
+export class roleDisplayOrder1678602320354 {
+ name = 'roleDisplayOrder1678602320354'
+
+ async up(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "role" ADD "displayOrder" integer NOT NULL DEFAULT '0'`);
+ }
+
+ async down(queryRunner) {
+ await queryRunner.query(`ALTER TABLE "role" DROP COLUMN "displayOrder"`);
+ }
+}
diff --git a/packages/backend/src/core/entities/RoleEntityService.ts b/packages/backend/src/core/entities/RoleEntityService.ts
index 2f1d51fa1a..e111a10b77 100644
--- a/packages/backend/src/core/entities/RoleEntityService.ts
+++ b/packages/backend/src/core/entities/RoleEntityService.ts
@@ -61,6 +61,7 @@ export class RoleEntityService {
isModerator: role.isModerator,
asBadge: role.asBadge,
canEditMembersByModerator: role.canEditMembersByModerator,
+ displayOrder: role.displayOrder,
policies: policies,
usersCount: assignedCount,
});
diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts
index 53353e916d..068ffad09d 100644
--- a/packages/backend/src/core/entities/UserEntityService.ts
+++ b/packages/backend/src/core/entities/UserEntityService.ts
@@ -390,9 +390,10 @@ export class UserEntityService implements OnModuleInit {
emojis: this.customEmojiService.populateEmojis(user.emojis, user.host),
onlineStatus: this.getOnlineStatus(user),
// パフォーマンス上の理由でローカルユーザーのみ
- badgeRoles: user.host == null ? this.roleService.getUserBadgeRoles(user.id).then(rs => rs.map(r => ({
+ badgeRoles: user.host == null ? this.roleService.getUserBadgeRoles(user.id).then(rs => rs.sort((a, b) => b.displayOrder - a.displayOrder).map(r => ({
name: r.name,
iconUrl: r.iconUrl,
+ displayOrder: r.displayOrder,
}))) : undefined,
...(opts.detail ? {
@@ -429,7 +430,7 @@ export class UserEntityService implements OnModuleInit {
userId: user.id,
}).then(result => result >= 1)
: false,
- roles: this.roleService.getUserRoles(user.id).then(roles => roles.filter(role => role.isPublic).map(role => ({
+ roles: this.roleService.getUserRoles(user.id).then(roles => roles.filter(role => role.isPublic).sort((a, b) => b.displayOrder - a.displayOrder).map(role => ({
id: role.id,
name: role.name,
color: role.color,
@@ -437,6 +438,7 @@ export class UserEntityService implements OnModuleInit {
description: role.description,
isModerator: role.isModerator,
isAdministrator: role.isAdministrator,
+ displayOrder: role.displayOrder,
}))),
} : {}),
diff --git a/packages/backend/src/models/entities/Role.ts b/packages/backend/src/models/entities/Role.ts
index 399e9ead05..85ff266740 100644
--- a/packages/backend/src/models/entities/Role.ts
+++ b/packages/backend/src/models/entities/Role.ts
@@ -144,6 +144,12 @@ export class Role {
})
public canEditMembersByModerator: boolean;
+ // UIに表示する際の並び順用(大きいほど先頭)
+ @Column('integer', {
+ default: 0,
+ })
+ public displayOrder: number;
+
@Column('jsonb', {
default: { },
})
diff --git a/packages/backend/src/server/api/endpoints/admin/roles/create.ts b/packages/backend/src/server/api/endpoints/admin/roles/create.ts
index df60c6be94..1359894634 100644
--- a/packages/backend/src/server/api/endpoints/admin/roles/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/roles/create.ts
@@ -27,6 +27,7 @@ export const paramDef = {
isAdministrator: { type: 'boolean' },
asBadge: { type: 'boolean' },
canEditMembersByModerator: { type: 'boolean' },
+ displayOrder: { type: 'number' },
policies: {
type: 'object',
},
@@ -43,6 +44,7 @@ export const paramDef = {
'isAdministrator',
'asBadge',
'canEditMembersByModerator',
+ 'displayOrder',
'policies',
],
} as const;
@@ -76,6 +78,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
isModerator: ps.isModerator,
asBadge: ps.asBadge,
canEditMembersByModerator: ps.canEditMembersByModerator,
+ displayOrder: ps.displayOrder,
policies: ps.policies,
}).then(x => this.rolesRepository.findOneByOrFail(x.identifiers[0]));
diff --git a/packages/backend/src/server/api/endpoints/admin/roles/update.ts b/packages/backend/src/server/api/endpoints/admin/roles/update.ts
index b939ccdbf9..37b68c4c41 100644
--- a/packages/backend/src/server/api/endpoints/admin/roles/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/roles/update.ts
@@ -35,6 +35,7 @@ export const paramDef = {
isAdministrator: { type: 'boolean' },
asBadge: { type: 'boolean' },
canEditMembersByModerator: { type: 'boolean' },
+ displayOrder: { type: 'number' },
policies: {
type: 'object',
},
@@ -52,6 +53,7 @@ export const paramDef = {
'isAdministrator',
'asBadge',
'canEditMembersByModerator',
+ 'displayOrder',
'policies',
],
} as const;
@@ -85,6 +87,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
isAdministrator: ps.isAdministrator,
asBadge: ps.asBadge,
canEditMembersByModerator: ps.canEditMembersByModerator,
+ displayOrder: ps.displayOrder,
policies: ps.policies,
});
const updated = await this.rolesRepository.findOneByOrFail({ id: ps.roleId });