Skip to content

Commit

Permalink
fix: a few misses :(
Browse files Browse the repository at this point in the history
  • Loading branch information
willruggiano committed Jul 31, 2024
1 parent 09c3ada commit d82e374
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 41 deletions.
65 changes: 33 additions & 32 deletions lib/datasources/name.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,36 @@ import { type SQL, sql } from "./postgres";
export function makeNameLoader(req: Request) {
return new Dataloader<string, Name, string>(
async keys => {
return await Promise.all(
keys.map(async key => {
const [name] = await sql<[WithKey<Name>?]>`
SELECT
m.languagemasteruuid AS _key,
encode(('name:' || m.languagemasteruuid)::bytea, 'base64') AS id,
coalesce(t.languagetranslationvalue, m.languagemastersource) AS value,
coalesce(tl.systaguuid, ml.systaguuid) AS "languageId"
FROM public.languagemaster AS m
INNER JOIN public.systag AS ml
ON m.languagemastersourcelanguagetypeid = ml.systagid
LEFT JOIN public.languagetranslations AS t
ON
m.languagemasterid = t.languagetranslationmasterid
AND t.languagetranslationtypeid = (
SELECT systagid
FROM public.systag
WHERE
systagparentid = 2
AND systagtype = ${req.i18n.language}
)
LEFT JOIN public.systag AS tl
ON t.languagetranslationtypeid = tl.systagid
WHERE m.languagemasteruuid = ${key};
`;
return (
name ?? new NotFoundError(`${key}:${req.i18n.language}`, "name")
);
}),
const rows = await sql<WithKey<Name>[]>`
SELECT
m.languagemasteruuid AS _key,
encode(('name:' || m.languagemasteruuid)::bytea, 'base64') AS id,
coalesce(t.languagetranslationvalue, m.languagemastersource) AS value,
coalesce(tl.systaguuid, ml.systaguuid) AS "languageId"
FROM public.languagemaster AS m
INNER JOIN public.systag AS ml
ON m.languagemastersourcelanguagetypeid = ml.systagid
LEFT JOIN public.languagetranslations AS t
ON
m.languagemasterid = t.languagetranslationmasterid
AND t.languagetranslationtypeid = (
SELECT systagid
FROM public.systag
WHERE
systagparentid = 2
AND systagtype = ${req.i18n.language}
)
LEFT JOIN public.systag AS tl
ON t.languagetranslationtypeid = tl.systagid
WHERE m.languagemasteruuid IN ${sql(keys)};
`;

const byId = rows.reduce(
(acc, val) => acc.set(val._key, val),
new Map<string, Name>(),
);

return keys.map(key => byId.get(key) ?? new NotFoundError(key, "name"));
},
{
cacheKeyFn: key => `${key}:${req.i18n.language}`,
Expand Down Expand Up @@ -86,9 +86,10 @@ export async function updateName(input: UpdateNameInput, sql: SQL) {

export function makeNameMetadataLoader(_: Request) {
return new Dataloader<string, NameMetadata>(async keys => {
const rows = await sql<NameMetadata[]>`
const rows = await sql<WithKey<NameMetadata>[]>`
SELECT
m.languagemasteruuid AS "nameId",
m.languagemasteruuid AS _key,
encode(('name:' || m.languagemasteruuid)::bytea, 'base64') AS "nameId",
m.languagemastersource AS "sourceText",
l.systaguuid AS "sourceLanguageId",
m.languagemastertranslationtime::text AS "translatedAt"
Expand All @@ -99,7 +100,7 @@ export function makeNameMetadataLoader(_: Request) {
`;

const byId = rows.reduce(
(acc, row) => acc.set(row.nameId as string, row),
(acc, row) => acc.set(row._key, row),
new Map<string, NameMetadata>(),
);

Expand Down
2 changes: 1 addition & 1 deletion lib/datasources/organization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export default (_: Request) =>
o.customerstartdate AS "activatedAt",
o.customerenddate AS "deactivatedAt",
o.customerexternalid AS "billingId",
n.languagemasteruuid AS "nameId"
encode(('name:' || n.languagemasteruuid)::bytea, 'base64') AS "nameId"
FROM public.customer AS o
INNER JOIN public.languagemaster AS n
ON o.customernamelanguagemasterid = n.languagemasterid
Expand Down
2 changes: 1 addition & 1 deletion lib/datasources/tag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export default (_: Request) =>
const rows = await sql<Tag[]>`
SELECT
s.systaguuid AS id,
n.languagemasteruuid AS "nameId",
encode(('name:' || n.languagemasteruuid)::bytea, 'base64') AS "nameId",
p.systaguuid AS "parentId",
s.systagtype AS type
FROM public.systag AS s
Expand Down
8 changes: 6 additions & 2 deletions lib/schema/resolvers/Language.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import type { LanguageResolvers } from "@/schema";
import type { LanguageResolvers, Name } from "@/schema";
import { decodeGlobalId } from "@/util";

export const Language: LanguageResolvers = {
async name(parent, _, ctx) {
return ctx.orm.name.load(decodeGlobalId(parent.nameId).id);
try {
return ctx.orm.name.load(decodeGlobalId(parent.nameId).id);
} catch (e) {
return ctx.orm.name.load(parent.nameId as string);
}
},
};
2 changes: 1 addition & 1 deletion lib/schema/resolvers/Organization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { type WithKey, decodeGlobalId } from "@/util";

export const Organization: OrganizationResolvers = {
async name(parent, _, ctx) {
return ctx.orm.name.load(parent.nameId as string);
return ctx.orm.name.load(decodeGlobalId(parent.nameId).id);
},
async languages(root, args, ctx) {
const { first, last } = args;
Expand Down
2 changes: 1 addition & 1 deletion lib/schema/resolvers/Query/languages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export const languages: NonNullable<QueryResolvers["languages"]> = async (
SELECT
s.systaguuid AS id,
s.systagtype AS code,
n.languagemasteruuid AS "nameId"
encode(('name:' || n.languagemasteruuid)::bytea, 'base64') AS "nameId"
FROM public.systag AS s
INNER JOIN public.languagemaster AS n
ON s.systagnameid = n.languagemasterid
Expand Down
2 changes: 1 addition & 1 deletion lib/schema/resolvers/Query/roles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export const roles: NonNullable<QueryResolvers["roles"]> = async (
SELECT
s.systaguuid AS id,
s.systagtype AS type,
n.languagemasteruuid AS "nameId"
encode(('name:' || n.languagemasteruuid)::bytea, 'base64') AS "nameId"
FROM public.systag AS s
INNER JOIN public.languagemaster AS n
ON s.systagnameid = n.languagemasterid
Expand Down
3 changes: 2 additions & 1 deletion lib/schema/resolvers/Tag.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import type { TagResolvers } from "@/schema";
import { decodeGlobalId } from "@/util";

export const Tag: TagResolvers = {
async name(parent, _, ctx) {
return ctx.orm.name.load(parent.nameId as string);
return ctx.orm.name.load(decodeGlobalId(parent.nameId).id);
},
parent(parent, _, ctx) {
if (parent.parentId) {
Expand Down
2 changes: 1 addition & 1 deletion lib/schema/resolvers/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export const User: UserResolvers = {
customerstartdate::text AS "activatedAt",
customerenddate::text AS "deactivatedAt",
customerexternalid AS "billingId",
languagemasteruuid AS "nameId"
encode(('name:' || languagemasteruuid)::bytea, 'base64') AS "nameId"
FROM public.workerinstance
INNER JOIN public.customer
ON workerinstancecustomerid = customerid
Expand Down

0 comments on commit d82e374

Please sign in to comment.