summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/room
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
commit0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch)
tree40874799472fa07416f17b50a398ac33b7771905 /packages/backend/src/server/api/endpoints/room
parentupdate deps (diff)
downloadmisskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz
misskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2
misskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip
refactoring
Resolve #7779
Diffstat (limited to 'packages/backend/src/server/api/endpoints/room')
-rw-r--r--packages/backend/src/server/api/endpoints/room/show.ts159
-rw-r--r--packages/backend/src/server/api/endpoints/room/update.ts51
2 files changed, 210 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/room/show.ts b/packages/backend/src/server/api/endpoints/room/show.ts
new file mode 100644
index 0000000000..a6461d4a6e
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/room/show.ts
@@ -0,0 +1,159 @@
+import $ from 'cafy';
+import define from '../../define';
+import { ApiError } from '../../error';
+import { Users, UserProfiles } from '@/models/index';
+import { ID } from '@/misc/cafy-id';
+import { toPunyNullable } from '@/misc/convert-host';
+
+export const meta = {
+ tags: ['room'],
+
+ requireCredential: false as const,
+
+ params: {
+ userId: {
+ validator: $.optional.type(ID),
+ },
+
+ username: {
+ validator: $.optional.str
+ },
+
+ host: {
+ validator: $.optional.nullable.str
+ },
+ },
+
+ errors: {
+ noSuchUser: {
+ message: 'No such user.',
+ code: 'NO_SUCH_USER',
+ id: '7ad3fa3e-5e12-42f0-b23a-f3d13f10ee4b'
+ }
+ },
+
+ res: {
+ type: 'object' as const,
+ optional: false as const, nullable: false as const,
+ properties: {
+ roomType: {
+ type: 'string' as const,
+ optional: false as const, nullable: false as const,
+ enum: ['default', 'washitsu']
+ },
+ furnitures: {
+ type: 'array' as const,
+ optional: false as const, nullable: false as const,
+ items: {
+ type: 'object' as const,
+ optional: false as const, nullable: false as const,
+ properties: {
+ id: {
+ type: 'string' as const,
+ optional: false as const, nullable: false as const
+ },
+ type: {
+ type: 'string' as const,
+ optional: false as const, nullable: false as const
+ },
+ props: {
+ type: 'object' as const,
+ optional: true as const, nullable: false as const,
+ },
+ position: {
+ type: 'object' as const,
+ optional: false as const, nullable: false as const,
+ properties: {
+ x: {
+ type: 'number' as const,
+ optional: false as const, nullable: false as const
+ },
+ y: {
+ type: 'number' as const,
+ optional: false as const, nullable: false as const
+ },
+ z: {
+ type: 'number' as const,
+ optional: false as const, nullable: false as const
+ }
+ }
+ },
+ rotation: {
+ type: 'object' as const,
+ optional: false as const, nullable: false as const,
+ properties: {
+ x: {
+ type: 'number' as const,
+ optional: false as const, nullable: false as const
+ },
+ y: {
+ type: 'number' as const,
+ optional: false as const, nullable: false as const
+ },
+ z: {
+ type: 'number' as const,
+ optional: false as const, nullable: false as const
+ }
+ }
+ }
+ }
+ }
+ },
+ carpetColor: {
+ type: 'string' as const,
+ optional: false as const, nullable: false as const,
+ format: 'hex',
+ example: '#85CAF0'
+ }
+ }
+ }
+};
+
+export default define(meta, async (ps, me) => {
+ const user = await Users.findOne(ps.userId != null
+ ? { id: ps.userId }
+ : { usernameLower: ps.username!.toLowerCase(), host: toPunyNullable(ps.host) });
+
+ if (user == null) {
+ throw new ApiError(meta.errors.noSuchUser);
+ }
+
+ const profile = await UserProfiles.findOneOrFail(user.id);
+
+ if (profile.room.furnitures == null) {
+ await UserProfiles.update(user.id, {
+ room: {
+ furnitures: [],
+ ...profile.room
+ }
+ });
+
+ profile.room.furnitures = [];
+ }
+
+ if (profile.room.roomType == null) {
+ const initialType = 'default';
+ await UserProfiles.update(user.id, {
+ room: {
+ roomType: initialType as any,
+ ...profile.room
+ }
+ });
+
+ profile.room.roomType = initialType;
+ }
+
+ if (profile.room.carpetColor == null) {
+ const initialColor = '#85CAF0';
+ await UserProfiles.update(user.id, {
+ room: {
+ carpetColor: initialColor as any,
+ ...profile.room
+ }
+ });
+
+ profile.room.carpetColor = initialColor;
+ }
+
+ return profile.room;
+});
diff --git a/packages/backend/src/server/api/endpoints/room/update.ts b/packages/backend/src/server/api/endpoints/room/update.ts
new file mode 100644
index 0000000000..8c4cfbdea6
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/room/update.ts
@@ -0,0 +1,51 @@
+import $ from 'cafy';
+import { publishMainStream } from '@/services/stream';
+import define from '../../define';
+import { Users, UserProfiles } from '@/models/index';
+
+export const meta = {
+ tags: ['room'],
+
+ requireCredential: true as const,
+
+ params: {
+ room: {
+ validator: $.obj({
+ furnitures: $.arr($.obj({
+ id: $.str,
+ type: $.str,
+ position: $.obj({
+ x: $.num,
+ y: $.num,
+ z: $.num,
+ }),
+ rotation: $.obj({
+ x: $.num,
+ y: $.num,
+ z: $.num,
+ }),
+ props: $.optional.nullable.obj(),
+ })),
+ roomType: $.str,
+ carpetColor: $.str
+ })
+ },
+ },
+};
+
+export default define(meta, async (ps, user) => {
+ await UserProfiles.update(user.id, {
+ room: ps.room as any
+ });
+
+ const iObj = await Users.pack(user.id, user, {
+ detail: true,
+ includeSecrets: true
+ });
+
+ // Publish meUpdated event
+ publishMainStream(user.id, 'meUpdated', iObj);
+
+ // TODO: レスポンスがおかしいと思う by YuzuRyo61
+ return iObj;
+});