save user settings

main
alex 2024-01-26 16:03:47 +01:00
parent 9fe78001e7
commit 2892476a23
4 changed files with 96 additions and 7 deletions

View File

@ -101,6 +101,8 @@ export async function SignUp(req: Request, res: Response) {
account_name: accountName, account_name: accountName,
username: username, username: username,
password: hashedPassword, password: hashedPassword,
language: "en", // TODO: get language from request
analytics_enabled: true,
}) })
.then((user) => { .then((user) => {
logger.debug( logger.debug(
@ -213,7 +215,13 @@ export async function GetUser(req: Request, res: Response) {
where: { where: {
user_id: session.user_id, user_id: session.user_id,
}, },
attributes: ["user_id", "username", "store_id"], attributes: [
"user_id",
"username",
"store_id",
"language",
"analytics_enabled",
],
}); });
if (!user) { if (!user) {
@ -307,3 +315,66 @@ export async function IsAccountNameAvailable(req: Request, res: Response) {
res.status(500).send({ err: "invalid request" }); 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" });
}
}

View File

@ -111,6 +111,8 @@ export async function AddEmployee(req: Request, res: Response) {
password: hashedPassword, password: hashedPassword,
calendar_max_future_booking_days: calendarMaxFutureBookingDays, calendar_max_future_booking_days: calendarMaxFutureBookingDays,
calendar_min_earliest_booking_time: calendarMinEarliestBookingTime, calendar_min_earliest_booking_time: calendarMinEarliestBookingTime,
language: "en", // TODO: get language from request
analytics_enabled: true,
}) })
.then(() => res.status(200).send({ msg: "success" })) .then(() => res.status(200).send({ msg: "success" }))
.catch((err) => { .catch((err) => {

View File

@ -11,8 +11,9 @@ interface UserAttributes {
password: string; password: string;
calendar_max_future_booking_days?: number; calendar_max_future_booking_days?: number;
calendar_min_earliest_booking_time?: number; calendar_min_earliest_booking_time?: number;
calendar_primary_calendar_id?: string;
calendar_using_primary_calendar?: boolean; calendar_using_primary_calendar?: boolean;
language: string;
analytics_enabled: boolean;
} }
class User extends Model<UserAttributes> implements UserAttributes { class User extends Model<UserAttributes> implements UserAttributes {
@ -24,8 +25,9 @@ class User extends Model<UserAttributes> implements UserAttributes {
declare password: string; declare password: string;
declare calendar_max_future_booking_days: number; declare calendar_max_future_booking_days: number;
declare calendar_min_earliest_booking_time: number; declare calendar_min_earliest_booking_time: number;
declare calendar_primary_calendar_id: string;
declare calendar_using_primary_calendar: boolean; declare calendar_using_primary_calendar: boolean;
declare language: string;
declare analytics_enabled: boolean;
} }
User.init( User.init(
@ -64,14 +66,18 @@ User.init(
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
// allowNull defaults to true // allowNull defaults to true
}, },
calendar_primary_calendar_id: {
type: DataTypes.STRING,
// allowNull defaults to true
},
calendar_using_primary_calendar: { calendar_using_primary_calendar: {
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
// allowNull defaults to true // allowNull defaults to true
}, },
language: {
type: DataTypes.STRING,
allowNull: false,
},
analytics_enabled: {
type: DataTypes.BOOLEAN,
allowNull: false,
},
}, },
{ {
tableName: "users", tableName: "users",

View File

@ -9,5 +9,15 @@ router.post("/auth/login", userController.Login);
router.delete("/auth/logout", sessionProtection, userController.Logout); router.delete("/auth/logout", sessionProtection, userController.Logout);
router.get("/", sessionProtection, userController.GetUser); router.get("/", sessionProtection, userController.GetUser);
router.post("/auth/check/accountname", userController.IsAccountNameAvailable); router.post("/auth/check/accountname", userController.IsAccountNameAvailable);
router.get(
"/profile/settings",
sessionProtection,
userController.GetUserProfileSettings
);
router.post(
"/profile/settings",
sessionProtection,
userController.UpdateUserProfileSettings
);
export default router; export default router;