feat: add user setting for home board (#956)
This commit is contained in:
@@ -156,6 +156,7 @@ export const userRouter = createTRPCRouter({
|
||||
emailVerified: true,
|
||||
image: true,
|
||||
provider: true,
|
||||
homeBoardId: true,
|
||||
},
|
||||
where: eq(users.id, input.userId),
|
||||
});
|
||||
@@ -266,6 +267,39 @@ export const userRouter = createTRPCRouter({
|
||||
})
|
||||
.where(eq(users.id, input.userId));
|
||||
}),
|
||||
changeHomeBoardId: protectedProcedure
|
||||
.input(validation.user.changeHomeBoard.and(z.object({ userId: z.string() })))
|
||||
.mutation(async ({ input, ctx }) => {
|
||||
const user = ctx.session.user;
|
||||
// Only admins can change other users' passwords
|
||||
if (!user.permissions.includes("admin") && user.id !== input.userId) {
|
||||
throw new TRPCError({
|
||||
code: "NOT_FOUND",
|
||||
message: "User not found",
|
||||
});
|
||||
}
|
||||
|
||||
const dbUser = await ctx.db.query.users.findFirst({
|
||||
columns: {
|
||||
id: true,
|
||||
},
|
||||
where: eq(users.id, input.userId),
|
||||
});
|
||||
|
||||
if (!dbUser) {
|
||||
throw new TRPCError({
|
||||
code: "NOT_FOUND",
|
||||
message: "User not found",
|
||||
});
|
||||
}
|
||||
|
||||
await ctx.db
|
||||
.update(users)
|
||||
.set({
|
||||
homeBoardId: input.homeBoardId,
|
||||
})
|
||||
.where(eq(users.id, input.userId));
|
||||
}),
|
||||
});
|
||||
|
||||
const createUserAsync = async (db: Database, input: z.infer<typeof validation.user.create>) => {
|
||||
|
||||
@@ -37,6 +37,9 @@ export default {
|
||||
previousPassword: {
|
||||
label: "Previous password",
|
||||
},
|
||||
homeBoard: {
|
||||
label: "Home board",
|
||||
},
|
||||
},
|
||||
error: {
|
||||
usernameTaken: "Username already taken",
|
||||
@@ -81,6 +84,16 @@ export default {
|
||||
},
|
||||
},
|
||||
},
|
||||
changeHomeBoard: {
|
||||
notification: {
|
||||
success: {
|
||||
message: "Home board changed successfully",
|
||||
},
|
||||
error: {
|
||||
message: "Unable to change home board",
|
||||
},
|
||||
},
|
||||
},
|
||||
manageAvatar: {
|
||||
changeImage: {
|
||||
label: "Change image",
|
||||
@@ -1404,10 +1417,17 @@ export default {
|
||||
setting: {
|
||||
general: {
|
||||
title: "General",
|
||||
item: {
|
||||
language: "Language & Region",
|
||||
board: "Home board",
|
||||
},
|
||||
},
|
||||
security: {
|
||||
title: "Security",
|
||||
},
|
||||
board: {
|
||||
title: "Boards",
|
||||
},
|
||||
},
|
||||
list: {
|
||||
metaTitle: "Manage users",
|
||||
@@ -1736,6 +1756,7 @@ export default {
|
||||
},
|
||||
general: "General",
|
||||
security: "Security",
|
||||
board: "Boards",
|
||||
groups: {
|
||||
label: "Groups",
|
||||
},
|
||||
|
||||
@@ -68,6 +68,10 @@ const changePasswordSchema = z
|
||||
|
||||
const changePasswordApiSchema = changePasswordSchema.and(z.object({ userId: z.string() }));
|
||||
|
||||
const changeHomeBoardSchema = z.object({
|
||||
homeBoardId: z.string().min(1),
|
||||
});
|
||||
|
||||
export const userSchemas = {
|
||||
signIn: signInSchema,
|
||||
registration: registrationSchema,
|
||||
@@ -77,5 +81,6 @@ export const userSchemas = {
|
||||
password: passwordSchema,
|
||||
editProfile: editProfileSchema,
|
||||
changePassword: changePasswordSchema,
|
||||
changeHomeBoard: changeHomeBoardSchema,
|
||||
changePasswordApi: changePasswordApiSchema,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user