| 1 | import { type ProjectMutation } from "@t3tools/contracts"; |
| 2 | import * as Effect from "effect/Effect"; |
| 3 | |
| 4 | import { type ProjectService } from "./ProjectService.ts"; |
| 5 | |
| 6 | type ProjectMutations = Pick<ProjectService["Service"], "create" | "delete" | "update">; |
| 7 | |
| 8 | export 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 | }); |