-
Notifications
You must be signed in to change notification settings - Fork 39
/
project_close.ts
43 lines (39 loc) · 1.39 KB
/
project_close.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import logger from "lib/logger";
import { VError } from "verror";
import { Ctx } from "../lib/ctx";
import * as Result from "../result";
import * as Cache from "./cache2";
import { ConnToken } from "./conn";
import * as GroupQuery from "./domain/organization/group_query";
import { ServiceUser } from "./domain/organization/service_user";
import * as Project from "./domain/workflow/project";
import * as ProjectClose from "./domain/workflow/project_close";
import { store } from "./store";
export async function closeProject(
conn: ConnToken,
ctx: Ctx,
serviceUser: ServiceUser,
projectId: Project.Id,
): Promise<Result.Type<void>> {
logger.debug({ projectId }, "Closing project");
const closeProjectResult = await Cache.withCache(conn, ctx, async (cache) =>
ProjectClose.closeProject(ctx, serviceUser, projectId, {
getProject: async () => {
return cache.getProject(projectId);
},
getSubprojects: async (pId) => {
return cache.getSubprojects(pId);
},
getUsersForIdentity: async (identity) => {
return GroupQuery.resolveUsers(conn, ctx, serviceUser, identity);
},
}),
);
if (Result.isErr(closeProjectResult)) {
return new VError(closeProjectResult, `close project ${projectId} failed`);
}
const { newEvents } = closeProjectResult;
for (const event of newEvents) {
await store(conn, ctx, event, serviceUser.address);
}
}