Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 19 additions & 18 deletions src/backend/lib/db_helpers/case_manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,36 @@ import { getTransporter } from "@/backend/lib/nodemailer";
import { user } from "zapatos/schema";
import { UserType } from "@/types/auth";

interface paraInputProps {
first_name: string;
last_name: string;
email: string;
interface createParaProps {
para: {
first_name: string;
last_name: string;
email: string;
};
db: KyselyDatabaseInstance;
case_manager_name: string;
from_email: string;
to_email: string;
env: Env;
}

/**
* Checks for the existence of a user with the given email, if
* they do not exist, create the user with the role of "para",
* initiate email sending without awaiting result
*/
export async function createPara(
para: paraInputProps,
db: KyselyDatabaseInstance,
case_manager_name: string,
from_email: string,
to_email: string,
env: Env
paraProps: createParaProps
): Promise<user.Selectable> {
const { first_name, last_name, email } = para;
const { first_name, last_name, email } = paraProps.para;

let paraData = await db
let paraData = await paraProps.db
.selectFrom("user")
.where("email", "=", email.toLowerCase())
.selectAll()
.executeTakeFirst();

if (!paraData) {
paraData = await db
paraData = await paraProps.db
.insertInto("user")
.values({
first_name,
Expand All @@ -45,11 +46,11 @@ export async function createPara(

// promise, will not interfere with returning paraData
void sendInviteEmail(
from_email,
to_email,
paraProps.from_email,
paraProps.to_email,
first_name,
case_manager_name,
env
paraProps.case_manager_name,
paraProps.env
);
}

Expand Down
21 changes: 13 additions & 8 deletions src/backend/routers/case_manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -320,14 +320,19 @@ export const case_manager = router({
})
)
.mutation(async (req) => {
const para = await createPara(
req.input,
req.ctx.db,
req.ctx.auth.session.user?.name ?? "",
req.ctx.env.EMAIL_FROM,
req.input.email,
req.ctx.env
);
const paraProps = {
para: {
first_name: req.input.first_name,
last_name: req.input.last_name,
email: req.input.email,
},
db: req.ctx.db,
from_email: req.ctx.env.EMAIL_FROM,
to_email: req.input.email,
case_manager_name: req.ctx.auth.session.user?.name ?? "",
env: req.ctx.env,
};
Comment on lines +323 to +334
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Since req.input has the same shape as the para object expected by createParaProps, you can pass it directly instead of creating a new object with the same properties. This simplifies the code, as is already done in src/backend/routers/para.ts.

      const paraProps = {
        para: req.input,
        db: req.ctx.db,
        from_email: req.ctx.env.EMAIL_FROM,
        to_email: req.input.email,
        case_manager_name: req.ctx.auth.session.user?.name ?? "",
        env: req.ctx.env,
      };

const para = await createPara(paraProps);

return await assignParaToCaseManager(
para.user_id,
Expand Down
16 changes: 8 additions & 8 deletions src/backend/routers/para.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ export const para = router({
.mutation(async (req) => {
const { email } = req.input;

const para = await createPara(
req.input,
req.ctx.db,
req.ctx.auth.session.user?.name ?? "",
req.ctx.env.EMAIL_FROM,
email,
req.ctx.env
);
const para = await createPara({
para: req.input,
db: req.ctx.db,
case_manager_name: req.ctx.auth.session.user?.name ?? "",
from_email: req.ctx.env.EMAIL_FROM,
to_email: email,
env: req.ctx.env,
});
return para;

// TODO: Logic for sending email to staff. Should email be sent everytime or only first time? Should staff be notified that they are added to a certain case manager's list?
Expand Down