Skip to content

Commit

Permalink
refactor(moderation): merge context setter (#571)
Browse files Browse the repository at this point in the history
  • Loading branch information
douglasduteil authored Oct 3, 2024
1 parent 741b5e1 commit cc97e46
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 56 deletions.
5 changes: 5 additions & 0 deletions packages/~/moderations/api/src/:id/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ export const EMAIL_TO_INPUT_ID = "mail-to";

//

export interface ModerationContext extends Env {
Variables: {
moderation: get_moderation_dto;
};
}
export interface ContextVariablesType extends Env {
Variables: {
domain: string;
Expand Down
87 changes: 33 additions & 54 deletions packages/~/moderations/api/src/:id/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,22 @@ import { NotFoundError } from "@~/app.core/error";
import { Entity_Schema } from "@~/app.core/schema";
import { z_email_domain } from "@~/app.core/schema/z_email_domain";
import { Main_Layout } from "@~/app.layout/index";
import type { App_Context } from "@~/app.middleware/context";
import { set_context_variables } from "@~/app.middleware/set_context_variables";
import { GetFicheOrganizationById } from "@~/organizations.lib/usecase/GetFicheOrganizationById";
import { get_domain_count } from "@~/organizations.repository/get_domain_count";
import { get_organization_members_count } from "@~/organizations.repository/get_organization_members_count";
import { to } from "await-to-js";
import { Hono } from "hono";
import { getContext } from "hono/context-storage";
import { jsxRenderer } from "hono/jsx-renderer";
import moderation_procedures_router from "./$procedures";
import {
get_moderation,
get_organization_member,
type ContextType,
type ContextVariablesType,
type ModerationContext,
} from "./context";
import duplicate_warning_router from "./duplicate_warning";
import moderation_email_router from "./email/index";
Expand All @@ -26,15 +29,13 @@ import Page from "./page";

//

export default new Hono<ContextType>()
export default new Hono<ModerationContext>()
.get(
"/",
jsxRenderer(Main_Layout),
zValidator("param", Entity_Schema),
async function set_moderation(
{ render, req, set, status, var: { moncomptepro_pg } },
next,
) {
async function set_moderation({ render, req, set, status }, next) {
const { moncomptepro_pg } = getContext<App_Context>().var;
const { id: moderation_id } = req.valid("param");

const [moderation_error, moderation] = await to(
Expand All @@ -51,74 +52,52 @@ export default new Hono<ContextType>()
set("moderation", moderation);
return next();
},
async function set_domain({ set, var: { moderation } }, next) {
set_context_variables<ContextVariablesType>(async () => {
const { moderation, moncomptepro_pg } = getContext<ContextType>().var;

//

const domain = z_email_domain.parse(moderation.user.email, {
path: ["moderation.users.email"],
});
set("domain", domain);
return next();
},
async function set_organization_member(
{ set, var: { moderation, moncomptepro_pg } },
next,
) {

//

const organization_member = await get_organization_member(
{ pg: moncomptepro_pg },
{
organization_id: moderation.organization_id,
user_id: moderation.user.id,
},
);
set("organization_member", organization_member);
return next();
},
async function set_query_domain_count(
{ set, var: { moderation, moncomptepro_pg } },
next,
) {
set(
"query_domain_count",
get_domain_count(moncomptepro_pg, {
organization_id: moderation.organization_id,
}),
);
return next();
},
async function set_query_organization_members_count(
{ set, var: { moderation, moncomptepro_pg } },
next,
) {
set(
"query_organization_members_count",
get_organization_members_count(moncomptepro_pg, {
organization_id: moderation.organization_id,
}),
);
return next();
},
async function set_context(ctx, next) {
const {
domain,
moderation,
organization_member,
query_domain_count,
query_organization_members_count,
} = ctx.var;

//

const get_fiche_organization_by_id = GetFicheOrganizationById({
pg: ctx.var.moncomptepro_pg,
pg: moncomptepro_pg,
});
const organization_fiche = await get_fiche_organization_by_id(
moderation.organization_id,
);
return set_context_variables<ContextVariablesType>(() => ({

//

return {
domain,
moderation,
organization_fiche,
organization_member,
query_domain_count,
query_organization_members_count,
}))(ctx as any, next);
},
query_domain_count: get_domain_count(moncomptepro_pg, {
organization_id: moderation.organization_id,
}),
query_organization_members_count: get_organization_members_count(
moncomptepro_pg,
{
organization_id: moderation.organization_id,
},
),
};
}),
function GET({ render }) {
return render(<Page />);
},
Expand Down
6 changes: 4 additions & 2 deletions packages/~/moderations/api/src/:id/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,22 @@ import { hx_urls, urls } from "@~/app.urls";
import { MODERATION_EVENTS } from "@~/moderations.lib/event";
import { About as About_Organization } from "@~/organizations.ui/info/About";
import { Investigation as Investigation_Organization } from "@~/organizations.ui/info/Investigation";
import { getContext } from "hono/context-storage";
import { About_User, Investigation_User } from "./About_User";
import { Moderation_Actions } from "./Actions";
import { Domain_Organization } from "./Domain_Organization";
import { Header } from "./Header";
import { Members_Of_Organization_Table } from "./Members_Of_Organization_Table";
import { Moderation_Exchanges } from "./Moderation_Exchanges";
import { Organizations_Of_User_Table } from "./Organizations_Of_User_Table";
import { usePageRequestContext } from "./context";
import { type ModerationContext, usePageRequestContext } from "./context";

//

export default async function Moderation_Page() {
const { moderation } = getContext<ModerationContext>().var;
const {
var: { moderation, organization_fiche },
var: { organization_fiche },
} = usePageRequestContext();

return (
Expand Down

0 comments on commit cc97e46

Please sign in to comment.