Skip to content

Commit e512e55

Browse files
refactor(users): filter at the top level (#545)
1 parent 0e05cdb commit e512e55

File tree

7 files changed

+61
-47
lines changed

7 files changed

+61
-47
lines changed

packages/~/app/middleware/src/session/Session_Context.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Env } from "hono";
2-
import { Session } from "hono-sessions";
3-
import { BaseClient, TokenSet } from "openid-client";
2+
import type { Session } from "hono-sessions";
3+
import type { BaseClient, TokenSet } from "openid-client";
44
import type { AgentConnect_UserInfo } from "./AgentConnect_UserInfo";
55

66
//

packages/~/infra/moncomptepro/lib/src/index.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
import { fetch_mcp_admin_api } from "./fetch";
44

55
//
6-
7-
export async function join_organization({
8-
is_external,
9-
organization_id,
10-
user_id,
11-
}: {
6+
export type JoinOrganizationHandler = (options: {
127
is_external: boolean;
138
organization_id: number;
149
user_id: number;
15-
}): Promise<{}> {
10+
}) => Promise<{}>;
11+
export const join_organization: JoinOrganizationHandler = async ({
12+
is_external,
13+
organization_id,
14+
user_id,
15+
}) => {
1616
return fetch_mcp_admin_api({
1717
endpoint: "/api/admin/join-organization",
1818
method: "POST",
@@ -22,7 +22,7 @@ export async function join_organization({
2222
user_id: String(user_id),
2323
},
2424
});
25-
}
25+
};
2626

2727
export async function mark_domain_as_verified({
2828
domain,

packages/~/infra/moncomptepro/lib/src/sdk.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ const MAIN_ORGANIZATION_MANAGER_MODULE: {
3030
} = await import(`${MONCOMPTEPRO_MODULE}/src/managers/organization/main`);
3131

3232
// import "@numerique-gouv/moncomptepro/src/managers/organization/join";
33+
export type ForceJoinOrganizationHandler = (options: {
34+
organization_id: number;
35+
user_id: number;
36+
is_external?: boolean;
37+
}) => Promise<UserOrganizationLink>;
3338
const JOIN_ORGANIZATION_MANAGER_MODULE: {
34-
forceJoinOrganization(options: {
35-
organization_id: number;
36-
user_id: number;
37-
is_external?: boolean;
38-
}): Promise<UserOrganizationLink>;
39+
forceJoinOrganization: ForceJoinOrganizationHandler;
3940
} = await import(`${MONCOMPTEPRO_MODULE}/src/managers/organization/join`);
4041

4142
//

packages/~/moderations/api/src/:id/$procedures/validate.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ import { mark_moderation_as } from "@~/moderations.lib/usecase/mark_moderation_a
1212
import { MemberJoinOrganization } from "@~/moderations.lib/usecase/member_join_organization";
1313
import { GetModerationById } from "@~/moderations.repository";
1414
import { schema } from "@~/moncomptepro.database";
15-
import { send_moderation_processed_email } from "@~/moncomptepro.lib/index";
15+
import {
16+
join_organization,
17+
send_moderation_processed_email,
18+
} from "@~/moncomptepro.lib/index";
19+
import { forceJoinOrganization } from "@~/moncomptepro.lib/sdk";
1620
import { add_verified_domain } from "@~/organizations.lib/usecase/add_verified_domain";
1721
import { GetOrganizationById } from "@~/organizations.repository";
1822
import { GetMember } from "@~/users.repository";
@@ -98,8 +102,13 @@ export default new Hono<App_Context>().patch(
98102
.with("AS_EXTERNAL", () => true)
99103
.exhaustive();
100104
const member_join_organization = MemberJoinOrganization({
101-
get_member: GetMember({ pg: moncomptepro_pg }),
105+
force_join_organization: forceJoinOrganization,
106+
get_member: GetMember({
107+
pg: moncomptepro_pg,
108+
columns: { updated_at: true },
109+
}),
102110
get_moderation_by_id: GetModerationById({ pg: moncomptepro_pg }),
111+
join_organization: join_organization,
103112
});
104113
const [error] = await to(
105114
member_join_organization({ is_external, moderation_id: id }),

packages/~/moderations/lib/src/usecase/member_join_organization.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
//
22

3-
import { type GetModerationByIdHandler } from "@~/moderations.repository";
4-
import { join_organization } from "@~/moncomptepro.lib";
5-
import { forceJoinOrganization } from "@~/moncomptepro.lib/sdk";
6-
import { type GetMemberHandler } from "@~/users.repository";
3+
import type { GetModerationByIdHandler } from "@~/moderations.repository";
4+
import type { JoinOrganizationHandler } from "@~/moncomptepro.lib";
5+
import type { ForceJoinOrganizationHandler } from "@~/moncomptepro.lib/sdk";
6+
import type { GetMemberHandler } from "@~/users.repository";
77
import { to as await_to } from "await-to-js";
88

99
//
1010

1111
export function MemberJoinOrganization({
12+
force_join_organization,
1213
get_member,
1314
get_moderation_by_id,
15+
join_organization,
1416
}: {
15-
get_member: GetMemberHandler;
17+
force_join_organization: ForceJoinOrganizationHandler;
18+
get_member: GetMemberHandler<{ updated_at: true }>;
1619
get_moderation_by_id: GetModerationByIdHandler;
20+
join_organization: JoinOrganizationHandler;
1721
}) {
1822
return async function member_join_organization({
1923
moderation_id,
@@ -33,14 +37,11 @@ export function MemberJoinOrganization({
3337
);
3438

3539
const [get_member_err] = await await_to(
36-
get_member(
37-
{ organization_id, user_id },
38-
{ columns: { updated_at: true } },
39-
),
40+
get_member({ organization_id, user_id }),
4041
);
4142

4243
if (get_member_err) {
43-
await forceJoinOrganization({
44+
await force_join_organization({
4445
is_external,
4546
organization_id,
4647
user_id,

packages/~/users/repository/src/get_member.test.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,15 @@ test("get an organization member", async () => {
2828
user_id,
2929
});
3030

31-
const get_member = GetMember({ pg });
32-
const organization = await get_member(
33-
{ organization_id, user_id },
34-
{
35-
columns: {
36-
is_external: true,
37-
organization_id: true,
38-
user_id: true,
39-
},
31+
const get_member = GetMember({
32+
pg,
33+
columns: {
34+
is_external: true,
35+
organization_id: true,
36+
user_id: true,
4037
},
41-
);
38+
});
39+
const organization = await get_member({ organization_id, user_id });
4240

4341
expect(organization).toEqual({
4442
is_external: false,

packages/~/users/repository/src/get_member.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@ import { schema, type MonComptePro_PgDatabase } from "@~/moncomptepro.database";
55
import { and, eq } from "drizzle-orm";
66

77
//
8+
type UsersOrganizationsColumns =
9+
keyof typeof schema.users_organizations._.columns;
810

9-
export function GetMember({ pg }: { pg: MonComptePro_PgDatabase }) {
10-
type UsersOrganizationsColumns =
11-
keyof typeof schema.users_organizations._.columns;
12-
return async function get_member_by_id<
13-
TColumns extends Partial<Record<UsersOrganizationsColumns, true>>,
14-
>(
15-
{ organization_id, user_id }: { organization_id: number; user_id: number },
16-
{ columns }: { columns: TColumns },
17-
) {
11+
export function GetMember<
12+
TColumns extends Partial<Record<UsersOrganizationsColumns, true>>,
13+
>({ pg, columns }: { pg: MonComptePro_PgDatabase; columns: TColumns }) {
14+
return async function get_member_by_id({
15+
organization_id,
16+
user_id,
17+
}: {
18+
organization_id: number;
19+
user_id: number;
20+
}) {
1821
const member = await pg.query.users_organizations.findFirst({
1922
columns,
2023
where: and(
@@ -29,4 +32,6 @@ export function GetMember({ pg }: { pg: MonComptePro_PgDatabase }) {
2932
};
3033
}
3134

32-
export type GetMemberHandler = ReturnType<typeof GetMember>;
35+
export type GetMemberHandler<
36+
TColumns extends Partial<Record<UsersOrganizationsColumns, true>>,
37+
> = ReturnType<typeof GetMember<TColumns>>;

0 commit comments

Comments
 (0)