save user settings
parent
9fe78001e7
commit
2892476a23
|
@ -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" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue