import type { ReqHandler } from "@ethicdevs/react-monolith";
import { AppRoute, AppRoutesParams } from "../../routes";
import RegisterView, { RegisterViewProps } from "../../views/auth/RegisterView";
import { makeAuthService } from "../../services/auth";
const postRegisterView: ReqHandler = async (request, reply) => {
const authService = makeAuthService({
cryptoService: request.cryptoService,
request,
});
const reqHandler = reply.makeRequestHandler(request, reply);
const {
email_address: emailAddress,
username,
password,
} = request.body as AppRoutesParams[AppRoute.AUTH_REGISTER_ACTION]["body"];
const initialValues = { emailAddress, username };
if (request.validationError != null) {
const { message: errorMessage } = request.validationError;
return reqHandler<RegisterViewProps>(RegisterView.name, {
errorMessage,
initialValues,
});
}
if (await authService.isExistingEmailAddress(emailAddress)) {
return reqHandler<RegisterViewProps>(RegisterView.name, {
errorMessage:
"This is email address is already used. Please use another.",
initialValues: { emailAddress, username },
});
}
if (await authService.isExistingUsername(username)) {
return reqHandler<RegisterViewProps>(RegisterView.name, {
errorMessage: "This is username is already taken. Please choose another.",
initialValues: { emailAddress, username },
});
}
const newUser = await authService.createUser({
emailAddress,
username,
password,
});
console.log(`Made new user with id: ${newUser.id}`);
request.session.data.authenticated = true;
request.session.data.curr_user_uid = newUser.id;
request.session.data.curr_user_role = newUser.role;
request.session.data.curr_user_username = newUser.username;
request.session.data.curr_user_avatar_uri = newUser.avatarUri;
reply.redirect(request.namedViewsPathMap[AppRoute.HOME]);
return reply;
};
export default postRegisterView;