Improving Error Handling in TypeScript: Converting `getCurrentCompany` Function to Use Effects
Hi all, I am trying to learn effect by converting existing code, but improving error handling,
I'm not convinced about what I did, but if it works
export async function getCurrentCompany(): Promise<Company> {
const session = await auth();
if (!session?.companyId) throw new Error('Invalid session');
const company = (await db
.query('SELECT * FROM "company" WHERE "id" = $1', [session.companyId])
.then((res) => res.rows.map(convertToCamelCase)[0])) as Company | null;
if (!company) throw new Error('Invalid data');
return company;
}
export const getCurrentCompany = () : Effect.Effect<Company, InvalidSession | InvalidUser> => Effect.gen(function* () {
const session = yield* Effect.promise(async () => await auth());
if(!session?.companyId) return Effect.fail(new InvalidSession());
const companyUnknown = yield* Effect.promise(async () => await db
.query('SELECT * FROM "company" WHERE "id" = $1', [session.companyId])
.then((res) => res.rows.map(convertToCamelCase)[0]));
if(!companyUnknown) return Effect.fail(new InvalidUser());
const company = Schema.decodeUnknownSync(Company)(companyUnknown);
return Effect.succeed(company);
}).pipe(Effect.runPromise);export async function getCurrentCompany(): Promise<Company> {
const session = await auth();
if (!session?.companyId) throw new Error('Invalid session');
const company = (await db
.query('SELECT * FROM "company" WHERE "id" = $1', [session.companyId])
.then((res) => res.rows.map(convertToCamelCase)[0])) as Company | null;
if (!company) throw new Error('Invalid data');
return company;
}
export const getCurrentCompany = () : Effect.Effect<Company, InvalidSession | InvalidUser> => Effect.gen(function* () {
const session = yield* Effect.promise(async () => await auth());
if(!session?.companyId) return Effect.fail(new InvalidSession());
const companyUnknown = yield* Effect.promise(async () => await db
.query('SELECT * FROM "company" WHERE "id" = $1', [session.companyId])
.then((res) => res.rows.map(convertToCamelCase)[0]));
if(!companyUnknown) return Effect.fail(new InvalidUser());
const company = Schema.decodeUnknownSync(Company)(companyUnknown);
return Effect.succeed(company);
}).pipe(Effect.runPromise);I'm not convinced about what I did, but if it works
