diff --git a/src/app/admin/users/[id]/edit/page.js b/src/app/admin/users/[id]/edit/page.js
index 1841782..f1f1e0d 100644
--- a/src/app/admin/users/[id]/edit/page.js
+++ b/src/app/admin/users/[id]/edit/page.js
@@ -18,6 +18,7 @@ export default function EditUserPage() {
username: "",
role: "user",
is_active: true,
+ initial: "",
password: ""
});
const [loading, setLoading] = useState(true);
@@ -65,6 +66,7 @@ export default function EditUserPage() {
username: userData.username,
role: userData.role,
is_active: userData.is_active,
+ initial: userData.initial || "",
password: "" // Never populate password field
});
} catch (err) {
@@ -86,7 +88,8 @@ export default function EditUserPage() {
name: formData.name,
username: formData.username,
role: formData.role,
- is_active: formData.is_active
+ is_active: formData.is_active,
+ initial: formData.initial.trim() || null
};
// Only include password if it's provided
@@ -253,6 +256,23 @@ export default function EditUserPage() {
+
+
+
setFormData({ ...formData, initial: e.target.value })}
+ placeholder="1-2 letter identifier"
+ maxLength={2}
+ className="w-full md:w-1/2"
+ />
+
+ Optional 1-2 letter identifier for the user
+
+
+
{user.name}
{user.username}
+ {user.initial && (
+
Initial: {user.initial}
+ )}
diff --git a/src/lib/userManagement.js b/src/lib/userManagement.js
index 04404a2..96ee1d3 100644
--- a/src/lib/userManagement.js
+++ b/src/lib/userManagement.js
@@ -19,7 +19,7 @@ export async function createUser({ name, username, password, role = 'user', is_a
return db.prepare(`
SELECT id, name, username, role, created_at, updated_at, last_login,
- is_active, failed_login_attempts, locked_until
+ is_active, failed_login_attempts, locked_until, initial
FROM users WHERE id = ?
`).get(userId)
}
@@ -28,7 +28,7 @@ export async function createUser({ name, username, password, role = 'user', is_a
export function getUserById(id) {
return db.prepare(`
SELECT id, name, username, password_hash, role, created_at, updated_at, last_login,
- is_active, failed_login_attempts, locked_until
+ is_active, failed_login_attempts, locked_until, initial
FROM users WHERE id = ?
`).get(id)
}
@@ -36,7 +36,7 @@ export function getUserById(id) {
// Get user by username
export function getUserByUsername(username) {
return db.prepare(`
- SELECT id, name, username, role, created_at, last_login, is_active
+ SELECT id, name, username, role, created_at, last_login, is_active, initial
FROM users WHERE username = ?
`).get(username)
}
@@ -45,7 +45,7 @@ export function getUserByUsername(username) {
export function getAllUsers() {
return db.prepare(`
SELECT id, name, username, password_hash, role, created_at, updated_at, last_login, is_active,
- failed_login_attempts, locked_until
+ failed_login_attempts, locked_until, initial
FROM users
ORDER BY created_at DESC
`).all()
@@ -172,6 +172,11 @@ export async function updateUser(userId, updates) {
updateValues.push(updates.is_active ? 1 : 0);
}
+ if (updates.initial !== undefined) {
+ updateFields.push("initial = ?");
+ updateValues.push(updates.initial);
+ }
+
if (updates.password !== undefined) {
const passwordHash = await bcrypt.hash(updates.password, 12);
updateFields.push("password_hash = ?");
@@ -199,7 +204,7 @@ export async function updateUser(userId, updates) {
if (result.changes > 0) {
return db.prepare(`
SELECT id, name, username, role, created_at, updated_at, last_login,
- is_active, failed_login_attempts, locked_until
+ is_active, failed_login_attempts, locked_until, initial
FROM users WHERE id = ?
`).get(userId);
}