1import { type ProjectMutation } from "@t3tools/contracts";
2import * as Effect from "effect/Effect";
3
4import { type ProjectService } from "./ProjectService.ts";
5
6type ProjectMutations = Pick<ProjectService["Service"], "create" | "delete" | "update">;
7
8export const projectMutationOperation = Effect.fn("projectMutationOperation")(function* (
9 projects: ProjectMutations,
10 mutation: ProjectMutation,
11) {
12 switch (mutation.type) {
13 case "project.create":
14 return yield* projects.create({
15 commandId: mutation.commandId,
16 projectId: mutation.projectId,
17 title: mutation.title,
18 workspaceRoot: mutation.workspaceRoot,
19 ...(mutation.createWorkspaceRootIfMissing === undefined
20 ? {}
21 : { createWorkspaceRootIfMissing: mutation.createWorkspaceRootIfMissing }),
22 ...(mutation.defaultModelSelection === undefined
23 ? {}
24 : { defaultModelSelection: mutation.defaultModelSelection }),
25 ...(mutation.scripts === undefined ? {} : { scripts: mutation.scripts }),
26 });
27
28 case "project.update":
29 return yield* projects.update({
30 commandId: mutation.commandId,
31 projectId: mutation.projectId,
32 ...(mutation.title === undefined ? {} : { title: mutation.title }),
33 ...(mutation.workspaceRoot === undefined ? {} : { workspaceRoot: mutation.workspaceRoot }),
34 ...(mutation.defaultModelSelection === undefined
35 ? {}
36 : { defaultModelSelection: mutation.defaultModelSelection }),
37 ...(mutation.autoPull === undefined ? {} : { autoPull: mutation.autoPull }),
38 ...(mutation.projectIcon === undefined ? {} : { projectIcon: mutation.projectIcon }),
39 ...(mutation.faviconPath === undefined ? {} : { faviconPath: mutation.faviconPath }),
40 ...(mutation.defaultThreadEnvMode === undefined
41 ? {}
42 : { defaultThreadEnvMode: mutation.defaultThreadEnvMode }),
43 ...(mutation.scripts === undefined ? {} : { scripts: mutation.scripts }),
44 });
45
46 case "project.delete":
47 return yield* projects.delete({
48 commandId: mutation.commandId,
49 projectId: mutation.projectId,
50 ...(mutation.force === undefined ? {} : { force: mutation.force }),
51 });
52 }
53});