From 2892476a23624c671295ca4377abfc5411efc5c7 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 26 Jan 2024 16:03:47 +0100 Subject: [PATCH] save user settings --- src/controllers/userController.ts | 73 +++++++++++++++++++++++++++++- src/controllers/usersController.ts | 2 + src/models/user.ts | 18 +++++--- src/routes/userRoutes.ts | 10 ++++ 4 files changed, 96 insertions(+), 7 deletions(-) diff --git a/src/controllers/userController.ts b/src/controllers/userController.ts index fe791b9..8081cf3 100644 --- a/src/controllers/userController.ts +++ b/src/controllers/userController.ts @@ -101,6 +101,8 @@ export async function SignUp(req: Request, res: Response) { account_name: accountName, username: username, password: hashedPassword, + language: "en", // TODO: get language from request + analytics_enabled: true, }) .then((user) => { logger.debug( @@ -213,7 +215,13 @@ export async function GetUser(req: Request, res: Response) { where: { user_id: session.user_id, }, - attributes: ["user_id", "username", "store_id"], + attributes: [ + "user_id", + "username", + "store_id", + "language", + "analytics_enabled", + ], }); if (!user) { @@ -307,3 +315,66 @@ export async function IsAccountNameAvailable(req: Request, res: Response) { res.status(500).send({ err: "invalid request" }); } } + +export async function GetUserProfileSettings(req: Request, res: Response) { + try { + const session = await getUserSession(req); + + if (!session) { + return res.status(401).send({ err: "unauthorized" }); + } + + const user = await User.findOne({ + where: { + user_id: session.user_id, + }, + attributes: ["language", "analytics_enabled"], + }); + + res.status(200).json(user); + } catch (error) { + logger.error(error); + res.status(500).send({ err: "invalid request" }); + } +} + +export async function UpdateUserProfileSettings(req: Request, res: Response) { + try { + const { language, analyticsEnabled } = req.body; + + if (!language && analyticsEnabled === undefined) { + return res.status(400).send({ err: "invalid request" }); + } + + const session = await getUserSession(req); + + if (!session) { + return res.status(401).send({ err: "unauthorized" }); + } + + const user = await User.findOne({ + where: { + user_id: session.user_id, + }, + }); + + if (!user) { + return res.status(401).send({ err: "unauthorized" }); + } + + if (language) { + user.language = language; + } + + if (analyticsEnabled !== undefined) { + user.analytics_enabled = analyticsEnabled; + } + + await user.save(); + + res.status(200).send({ msg: "user profile settings updated" }); + } catch (error) { + logger.error(error); + res.status(500).send({ err: "invalid request" }); + } +} diff --git a/src/controllers/usersController.ts b/src/controllers/usersController.ts index 525d010..a832c9b 100644 --- a/src/controllers/usersController.ts +++ b/src/controllers/usersController.ts @@ -111,6 +111,8 @@ export async function AddEmployee(req: Request, res: Response) { password: hashedPassword, calendar_max_future_booking_days: calendarMaxFutureBookingDays, calendar_min_earliest_booking_time: calendarMinEarliestBookingTime, + language: "en", // TODO: get language from request + analytics_enabled: true, }) .then(() => res.status(200).send({ msg: "success" })) .catch((err) => { diff --git a/src/models/user.ts b/src/models/user.ts index df05de6..0dba72e 100644 --- a/src/models/user.ts +++ b/src/models/user.ts @@ -11,8 +11,9 @@ interface UserAttributes { password: string; calendar_max_future_booking_days?: number; calendar_min_earliest_booking_time?: number; - calendar_primary_calendar_id?: string; calendar_using_primary_calendar?: boolean; + language: string; + analytics_enabled: boolean; } class User extends Model implements UserAttributes { @@ -24,8 +25,9 @@ class User extends Model implements UserAttributes { declare password: string; declare calendar_max_future_booking_days: number; declare calendar_min_earliest_booking_time: number; - declare calendar_primary_calendar_id: string; declare calendar_using_primary_calendar: boolean; + declare language: string; + declare analytics_enabled: boolean; } User.init( @@ -64,14 +66,18 @@ User.init( type: DataTypes.INTEGER, // allowNull defaults to true }, - calendar_primary_calendar_id: { - type: DataTypes.STRING, - // allowNull defaults to true - }, calendar_using_primary_calendar: { type: DataTypes.BOOLEAN, // allowNull defaults to true }, + language: { + type: DataTypes.STRING, + allowNull: false, + }, + analytics_enabled: { + type: DataTypes.BOOLEAN, + allowNull: false, + }, }, { tableName: "users", diff --git a/src/routes/userRoutes.ts b/src/routes/userRoutes.ts index f2125be..00c7e17 100644 --- a/src/routes/userRoutes.ts +++ b/src/routes/userRoutes.ts @@ -9,5 +9,15 @@ router.post("/auth/login", userController.Login); router.delete("/auth/logout", sessionProtection, userController.Logout); router.get("/", sessionProtection, userController.GetUser); router.post("/auth/check/accountname", userController.IsAccountNameAvailable); +router.get( + "/profile/settings", + sessionProtection, + userController.GetUserProfileSettings +); +router.post( + "/profile/settings", + sessionProtection, + userController.UpdateUserProfileSettings +); export default router;