Update various configuration files, components, and assets; enhance notification system and API endpoints; improve documentation and styles across the application.

This commit is contained in:
Haqeem Solehan
2025-10-16 16:05:39 +08:00
commit b124ff8092
336 changed files with 94392 additions and 0 deletions

View File

@@ -0,0 +1,138 @@
import sha256 from "crypto-js/sha256.js";
export default defineEventHandler(async (event) => {
const body = await readBody(event);
const password = sha256("abc123").toString();
let secretKey = generateSecretKey();
try {
// Get user from database
const allUser = await prisma.user.findMany({
where: {
userStatus: "ACTIVE",
},
});
// Check if the user already exists
const userExist = allUser.find((user) => {
return user?.userUsername.toLowerCase() === body?.username.toLowerCase();
});
if (userExist)
return {
statusCode: 400,
message: "Username already exists",
};
// Validate secret key
do {
secretKey = generateSecretKey();
} while (
allUser.find((user) => {
return user?.userSecretKey === secretKey;
})
);
// Add New User
const user = await prisma.user.create({
data: {
userSecretKey: secretKey,
userUsername: body.username,
userPassword: password,
userFullName: body?.fullname || "",
userEmail: body?.email || "",
userPhone: body?.phone || "",
userStatus: "ACTIVE",
userCreatedDate: new Date(),
},
});
if (user) {
// Add user roles if provided
if (body.role && Array.isArray(body.role)) {
const userRoles = await Promise.all(
body.role.map(async (role) => {
const existingRole = await prisma.role.findFirst({
where: {
roleID: role.value,
},
});
if (existingRole) {
return prisma.userrole.create({
data: {
userRoleUserID: user.userID,
userRoleRoleID: role.value,
userRoleCreatedDate: new Date(),
},
});
}
return null;
})
);
const validUserRoles = userRoles.filter(Boolean);
return {
statusCode: 200,
message: "User successfully added!",
data: {
user,
assignedRoles: validUserRoles.length,
totalRoles: body.role.length,
},
};
}
return {
statusCode: 200,
message: "User successfully added!",
data: { user },
};
} else {
return {
statusCode: 500,
message: "Something went wrong! Please contact your administrator.",
};
}
} catch (error) {
return {
statusCode: 500,
message: error.message,
};
}
});
function generateSecretKey() {
// Generate Secret Key number and alphabet. Format : xxxx-xxxx-xxxx-xxxx
let secretKey = "";
let possible =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 4; i++) {
for (let j = 0; j < 4; j++) {
secretKey += possible.charAt(Math.floor(Math.random() * possible.length));
}
if (i < 3) {
secretKey += "-";
}
}
return secretKey;
}
async function checkRoleID(roleID) {
const role = await prisma.role.findFirst({
where: {
roleID: roleID,
},
});
if (!role) {
return false;
} else {
return true;
}
}

View File

@@ -0,0 +1,28 @@
export default defineEventHandler(async (event) => {
const body = await readBody(event);
try {
// Delete user
const user = await prisma.user.updateMany({
where: {
userUsername: body.username,
},
data: {
userStatus: "DELETED",
userModifiedDate: new Date(),
},
});
if (user) {
return {
statusCode: 200,
message: "User deleted successfully",
};
}
} catch (error) {
return {
statusCode: 500,
message: error.message,
};
}
});

View File

@@ -0,0 +1,86 @@
export default defineEventHandler(async (event) => {
const body = await readBody(event);
try {
// Update user
const user = await prisma.user.updateMany({
where: {
userUsername: body.username,
},
data: {
userFullName: body?.fullname || "",
userEmail: body?.email || "",
userPhone: body?.phone || "",
userStatus: body.status,
userModifiedDate: new Date(),
},
});
if (user.count > 0) {
const getUserID = await prisma.user.findFirst({
where: {
userUsername: body.username,
},
});
if (getUserID) {
// Delete all user roles
await prisma.userrole.deleteMany({
where: {
userRoleUserID: getUserID.userID,
},
});
// Add new user roles
if (body.role && Array.isArray(body.role)) {
const userRoles = await Promise.all(
body.role.map(async (role) => {
const existingRole = await prisma.role.findFirst({
where: {
roleID: role.value,
},
});
if (existingRole) {
return prisma.userrole.create({
data: {
userRoleUserID: getUserID.userID,
userRoleRoleID: role.value,
userRoleCreatedDate: new Date(),
},
});
}
return null;
})
);
const validUserRoles = userRoles.filter(Boolean);
return {
statusCode: 200,
message: "User updated successfully",
data: {
assignedRoles: validUserRoles.length,
totalRoles: body.role.length,
},
};
}
return {
statusCode: 200,
message: "User updated successfully",
};
}
}
return {
statusCode: 404,
message: "User not found",
};
} catch (error) {
return {
statusCode: 500,
message: error.message,
};
}
});

View File

@@ -0,0 +1,60 @@
export default defineEventHandler(async (event) => {
// Get all users from database except userStatus = DELETED
try {
const users = await prisma.user.findMany({
select: {
userID: true,
userUsername: true,
userFullName: true,
userEmail: true,
userPhone: true,
userStatus: true,
userCreatedDate: true,
userModifiedDate: true,
},
where: {
userStatus: {
not: "DELETED",
},
},
});
if (users) {
// Get all roles for each user
for (let i = 0; i < users.length; i++) {
let roleOfUser = await prisma.userrole.findMany({
select: {
role: {
select: {
roleID: true,
roleName: true,
},
},
},
where: {
userRoleUserID: users[i].userID,
},
});
users[i].roles = roleOfUser;
}
return {
statusCode: 200,
message: "Users successfully fetched",
data: users,
};
} else {
return {
statusCode: 404,
message: "No users found",
};
}
} catch (error) {
return {
statusCode: 500,
message: error.message,
};
}
});