-
-
+
+
+ {{ $t('me.sectionGeneral') }}
+
+
+
+
+
+
+
+ {{ $t('me.sectionPassword') }}
+
+
+
+
+
+
diff --git a/src/server/api/me/index.post.ts b/src/server/api/me/index.post.ts
new file mode 100644
index 00000000..324b4552
--- /dev/null
+++ b/src/server/api/me/index.post.ts
@@ -0,0 +1,13 @@
+import { UserUpdateSchema } from '#db/repositories/user/types';
+
+export default definePermissionEventHandler(
+ actions.CLIENT,
+ async ({ event, user }) => {
+ const { name, email } = await readValidatedBody(
+ event,
+ validateZod(UserUpdateSchema)
+ );
+ await Database.users.update(user.id, name, email);
+ return { success: true };
+ }
+);
diff --git a/src/server/database/repositories/user/service.ts b/src/server/database/repositories/user/service.ts
index 209fe99d..34cffff1 100644
--- a/src/server/database/repositories/user/service.ts
+++ b/src/server/database/repositories/user/service.ts
@@ -14,6 +14,14 @@ function createPreparedStatement(db: DBType) {
where: eq(user.username, sql.placeholder('username')),
})
.prepare(),
+ update: db
+ .update(user)
+ .set({
+ name: sql.placeholder('name') as never as string,
+ email: sql.placeholder('email') as never as string,
+ })
+ .where(eq(user.id, sql.placeholder('id')))
+ .prepare(),
};
}
@@ -60,4 +68,8 @@ export class UserService {
});
});
}
+
+ async update(id: ID, name: string, email: string | null) {
+ return this.#statements.update.execute({ id, name, email });
+ }
}
diff --git a/src/server/database/repositories/user/types.ts b/src/server/database/repositories/user/types.ts
index 7b629365..9c519d7d 100644
--- a/src/server/database/repositories/user/types.ts
+++ b/src/server/database/repositories/user/types.ts
@@ -20,6 +20,18 @@ const password = z
const remember = z.boolean({ message: 'zod.user.remember' });
+const name = z
+ .string({ message: 'zod.user.name' })
+ .min(1, 'zod.user.nameMin')
+ .pipe(safeStringRefine);
+
+const email = z
+ .string({ message: 'zod.user.email' })
+ .min(5, 'zod.user.emailMin')
+ .email({ message: 'zod.user.emailInvalid' })
+ .pipe(safeStringRefine)
+ .nullable();
+
export const UserLoginSchema = z.object(
{
username: username,
@@ -41,3 +53,11 @@ export const UserSetupType = z.object(
},
{ message: objectMessage }
);
+
+export const UserUpdateSchema = z.object(
+ {
+ name: name,
+ email: email,
+ },
+ { message: objectMessage }
+);