summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/room
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2019-08-18 14:41:33 +0900
committerGitHub <noreply@github.com>2019-08-18 14:41:33 +0900
commit45b972c059e9841da742538b8a948eefca7c9153 (patch)
treee1cd44014f09ef3de7d3d317ddd021a7fecd0539 /src/server/api/endpoints/room
parentupdateHashtagを並列で行わないように (#5284) (diff)
downloadsharkey-45b972c059e9841da742538b8a948eefca7c9153.tar.gz
sharkey-45b972c059e9841da742538b8a948eefca7c9153.tar.bz2
sharkey-45b972c059e9841da742538b8a948eefca7c9153.zip
MisskeyRoom (#5267)
* wip * Add pemcil * Fix bug * Update .gitattributes * Add :custard: * Better :custard: * Add color boxes * Add pc * Add keyboard * Add :package: * Add more :package: * :v: * carpet * Add plant * :v: * :v: * Update room.vue * Add plant * :v: * :v: * :v: * :v: * :v: * 段ボール箱がてかりすぎているのを修正 * Update room.ts * Render username * :v: * Add new :package: * Update room.ts * Remove blender backup files * Refactor * Improve performance * Update room.ts * Update .gitattributes * Update room.ts * Better fan * Better tissue rendering * Add :penguin: * Create photoframe2.glb * chairs * Add :book: * fix: HiDPi環境でオブジェクトを選択できない (#5268) * Better monitor * :v: * Add corkboard * Add missing blend * mousepad * Add missing blend * Add cube * 額縁やモニターなどに任意の画像を表示できるように * Update MisskeyRoom section of CONTRIBUTING.md (#5272) * Update MisskeyRoom section of CONTRIBUTING.md * Update CONTRIBUTING.md * Update CONTRIBUTING.md * Refactor * カスタムテクスチャがずれないように * Remove debug code * Update furnitures.json5 * 一部の家具の色を自由に変えられるように * Update ja-JP.yml * Type annotation * 家具の色やテクスチャをすぐ反映するように * Update room.vue * Update furnitures.json5 * Add :tv: * Update ja-JP.yml * 床の色を変えられるように * 和室にできるように * Update washitsu * Use MeshLambertMaterial to improve performance * Use MeshLambertMaterial * Fix bug * Refactor * Update room.ts * Fix washitsu * Update room.vue * Update washistu * Use MeshLambertMaterial * Update room.ts * Set current property value * Disable reactivity to improve performance a bit * Fix bug * Set current carpet color * Update ja-JP.yml * Add rubik-cube (#5278) * Update ja-JP.yml (#5279) * Update UI * ルームの設定を追加 * Add room link * 家具をドラッグで移動や回転できるように * esnextにする (#5286) * Fix moduleResolution * Use uuid v4 * Fix bug * マットの色を変えられるように * :v: * 異方性フィルタリングするように * グラフィックの品質をフィルタリングに反映 * Add bloom effect when ultra graphics * Add posters * :art:
Diffstat (limited to 'src/server/api/endpoints/room')
-rw-r--r--src/server/api/endpoints/room/show.ts92
-rw-r--r--src/server/api/endpoints/room/update.ts48
2 files changed, 140 insertions, 0 deletions
diff --git a/src/server/api/endpoints/room/show.ts b/src/server/api/endpoints/room/show.ts
new file mode 100644
index 0000000000..17634834ac
--- /dev/null
+++ b/src/server/api/endpoints/room/show.ts
@@ -0,0 +1,92 @@
+import $ from 'cafy';
+import define from '../../define';
+import { ApiError } from '../../error';
+import { Users, UserProfiles } from '../../../../models';
+import { ID } from '../../../../misc/cafy-id';
+import { ensure } from '../../../../prelude/ensure';
+import { toPunyNullable } from '../../../../misc/convert-host';
+
+export const meta = {
+ desc: {
+ 'ja-JP': '指定した部屋の情報を取得します。',
+ },
+
+ tags: ['room'],
+
+ requireCredential: false,
+
+ params: {
+ userId: {
+ validator: $.optional.type(ID),
+ desc: {
+ 'ja-JP': '対象のユーザーのID',
+ 'en-US': 'Target user 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'
+ }
+ }
+};
+
+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.findOne(user.id).then(ensure);
+
+ if (profile.room.furnitures == null) {
+ await UserProfiles.update({ userId: user.id }, {
+ room: {
+ furnitures: [],
+ ...profile.room
+ }
+ });
+
+ profile.room.furnitures = [];
+ }
+
+ if (profile.room.roomType == null) {
+ const initialType = 'default';
+ await UserProfiles.update({ userId: user.id }, {
+ room: {
+ roomType: initialType as any,
+ ...profile.room
+ }
+ });
+
+ profile.room.roomType = initialType;
+ }
+
+ if (profile.room.carpetColor == null) {
+ const initialColor = '#85CAF0';
+ await UserProfiles.update({ userId: user.id }, {
+ room: {
+ carpetColor: initialColor as any,
+ ...profile.room
+ }
+ });
+
+ profile.room.carpetColor = initialColor;
+ }
+
+ return profile.room;
+});
diff --git a/src/server/api/endpoints/room/update.ts b/src/server/api/endpoints/room/update.ts
new file mode 100644
index 0000000000..897f65f2d2
--- /dev/null
+++ b/src/server/api/endpoints/room/update.ts
@@ -0,0 +1,48 @@
+import $ from 'cafy';
+import { publishMainStream } from '../../../../services/stream';
+import define from '../../define';
+import { Users, UserProfiles } from '../../../../models';
+
+export const meta = {
+ requireCredential: true,
+
+ 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({ userId: 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);
+
+ return iObj;
+});