diff --git a/api/src/routes/users/@me/settings.ts b/api/src/routes/users/@me/settings.ts index cca9b3ab..5664fc2f 100644 --- a/api/src/routes/users/@me/settings.ts +++ b/api/src/routes/users/@me/settings.ts @@ -1,9 +1,15 @@ import { Router, Response, Request } from "express"; +import { UserModel, UserSettings } from "@fosscord/util"; +import { check } from "../../../util/instanceOf"; +import { UserSettingsSchema } from "../../../schema/User"; const router = Router(); -router.patch("/", (req: Request, res: Response) => { - // TODO: +router.patch("/", check(UserSettingsSchema), async (req: Request, res: Response) => { + const body = req.body as UserSettings; + + await UserModel.updateOne({ id: req.user_id }, body).exec(); + res.sendStatus(204); }); diff --git a/api/src/schema/User.ts b/api/src/schema/User.ts index c7478f8d..0d094b9e 100644 --- a/api/src/schema/User.ts +++ b/api/src/schema/User.ts @@ -1,3 +1,4 @@ +import { UserSettings } from "../../../util/dist"; import { Length } from "../util/instanceOf"; export const UserModifySchema = { @@ -21,3 +22,53 @@ export interface UserModifySchema { new_password?: string; code?: string; } + +export const UserSettingsSchema = { + $afk_timeout: Number, + $allow_accessibility_detection: Boolean, + $animate_emoji: Boolean, + $animate_stickers: Number, + $contact_sync_enabled: Boolean, + $convert_emoticons: Boolean, + $custom_status: { + $emoji_id: String, + $emoji_name: String, + $expires_at: Number, + $text: String + }, + $default_guilds_restricted: Boolean, + $detect_platform_accounts: Boolean, + $developer_mode: Boolean, + $disable_games_tab: Boolean, + $enable_tts_command: Boolean, + $explicit_content_filter: Number, + $friend_source_flags: { + all: Boolean + }, + $gateway_connected: Boolean, + $gif_auto_play: Boolean, + $guild_folders: [ + { + color: Number, + guild_ids: [String], + id: Number, + name: String + } + ], + $guild_positions: [String], + $inline_attachment_media: Boolean, + $inline_embed_media: Boolean, + $locale: String, + $message_display_compact: Boolean, + $native_phone_integration_enabled: Boolean, + $render_embeds: Boolean, + $render_reactions: Boolean, + $restricted_guilds: [String], + $show_current_game: Boolean, + $status: String, + $stream_notifications_enabled: Boolean, + $theme: String, + $timezone_offset: Number +}; + +export interface UserSettingsSchema extends UserSettings {}