Merge branch 'feat/register' of https://github.com/digitalsolutiongroup/amati into feat/register
This commit is contained in:
commit
e6d5f61c70
|
|
@ -3,6 +3,7 @@ import { HTTPException } from "hono/http-exception";
|
|||
import db from "../../drizzle";
|
||||
import { respondents } from "../../drizzle/schema/respondents";
|
||||
import { users } from "../../drizzle/schema/users";
|
||||
import { rolesToUsers } from "../../drizzle/schema/rolesToUsers";
|
||||
import { hashPassword } from "../../utils/passwordUtils";
|
||||
import requestValidator from "../../utils/requestValidator";
|
||||
import authInfo from "../../middlewares/authInfo";
|
||||
|
|
@ -21,6 +22,23 @@ const registerFormSchema = z.object({
|
|||
workExperience: z.string().min(1).max(255),
|
||||
address: z.string().min(1),
|
||||
phoneNumber: z.string().min(1).max(13),
|
||||
isEnabled: z.string().default("false"),
|
||||
roles: z
|
||||
.string()
|
||||
.refine(
|
||||
(data) => {
|
||||
try {
|
||||
const parsed = JSON.parse(data);
|
||||
return Array.isArray(parsed);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
{
|
||||
message: "Roles must be an array",
|
||||
}
|
||||
)
|
||||
.optional(),
|
||||
});
|
||||
|
||||
const respondentsRoute = new Hono<HonoEnv>()
|
||||
|
|
@ -32,6 +50,8 @@ const respondentsRoute = new Hono<HonoEnv>()
|
|||
async (c) => {
|
||||
const formData = c.req.valid("json");
|
||||
|
||||
console.log("Form Data:", formData);
|
||||
|
||||
// Build conditions based on available formData
|
||||
const conditions = [];
|
||||
if (formData.email) {
|
||||
|
|
@ -44,11 +64,15 @@ const respondentsRoute = new Hono<HonoEnv>()
|
|||
.from(users)
|
||||
.where(or(...conditions));
|
||||
|
||||
console.log("Existing Users:", existingUser);
|
||||
|
||||
const existingRespondent = await db
|
||||
.select()
|
||||
.from(respondents)
|
||||
.where(eq(respondents.phoneNumber, formData.phoneNumber));
|
||||
|
||||
console.log("Existing Respondents:", existingRespondent);
|
||||
|
||||
if (existingUser.length > 0) {
|
||||
throw new HTTPException(400, {
|
||||
message: "Email atau username sudah terdaftar",
|
||||
|
|
@ -64,6 +88,8 @@ const respondentsRoute = new Hono<HonoEnv>()
|
|||
// Hash the password
|
||||
const hashedPassword = await hashPassword(formData.password);
|
||||
|
||||
console.log("Hashed Password:", hashedPassword);
|
||||
|
||||
// Start a transaction
|
||||
try {
|
||||
const result = await db.transaction(async (trx) => {
|
||||
|
|
@ -75,30 +101,50 @@ const respondentsRoute = new Hono<HonoEnv>()
|
|||
username: formData.username,
|
||||
email: formData.email,
|
||||
password: hashedPassword,
|
||||
isEnabled: formData.isEnabled?.toLowerCase() === "true" || true,
|
||||
})
|
||||
.returning();
|
||||
|
||||
console.log("New User:", newUser);
|
||||
|
||||
// Create respondent
|
||||
await trx
|
||||
.insert(respondents)
|
||||
.values({
|
||||
companyName: formData.companyName,
|
||||
position: formData.position,
|
||||
workExperience: formData.workExperience,
|
||||
address: formData.address,
|
||||
phoneNumber: formData.phoneNumber,
|
||||
userId: newUser.id,
|
||||
});
|
||||
await trx.insert(respondents).values({
|
||||
companyName: formData.companyName,
|
||||
position: formData.position,
|
||||
workExperience: formData.workExperience,
|
||||
address: formData.address,
|
||||
phoneNumber: formData.phoneNumber,
|
||||
userId: newUser.id,
|
||||
});
|
||||
|
||||
console.log("Respondent Created for User ID:", newUser.id);
|
||||
|
||||
// If roles are included in the request, add to rolesToUsers
|
||||
if (formData.roles) {
|
||||
try {
|
||||
const roles = JSON.parse(formData.roles) as string[];
|
||||
if (roles.length) {
|
||||
await trx.insert(rolesToUsers).values(
|
||||
roles.map((role) => ({
|
||||
userId: newUser.id,
|
||||
roleId: role,
|
||||
}))
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error parsing roles:", error);
|
||||
throw new HTTPException(400, {
|
||||
message: "Invalid roles format",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return newUser;
|
||||
});
|
||||
|
||||
return c.json(
|
||||
{
|
||||
message: "User and respondent created successfully",
|
||||
},
|
||||
201
|
||||
);
|
||||
return c.json({
|
||||
message: "User and respondent created successfully",
|
||||
}, 201);
|
||||
} catch (error) {
|
||||
console.error("Error creating user and respondent:", error);
|
||||
throw new HTTPException(500, {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user