import { HttpApiBuilder } from "effect/unstable/httpapi";import { Effect } from "effect";import type { Artifact, ArtifactSummary } from "@executor-js/sdk"; import { ExecutorApi } from "../api";import { ExecutorService } from "../services";import { capture } from "@executor-js/api"; const summaryToResponse = (a: ArtifactSummary) => ({ id: a.id, owner: a.owner, title: a.title, description: a.description, createdAt: a.createdAt.getTime(), updatedAt: a.updatedAt.getTime(),}); const artifactToResponse = (a: Artifact) => ({ ...summaryToResponse(a), code: a.code,}); export const ArtifactsHandlers = HttpApiBuilder.group(ExecutorApi, "artifacts", (handlers) => handlers .handle("list", () => capture( Effect.gen(function* () { const executor = yield* ExecutorService; const artifacts = yield* executor.artifacts.list(); return artifacts.map(summaryToResponse); }), ), ) .handle("get", ({ params: path }) => capture( Effect.gen(function* () { const executor = yield* ExecutorService; const artifact = yield* executor.artifacts.get(path.artifactId); return artifactToResponse(artifact); }), ), ) .handle("save", ({ payload }) => capture( Effect.gen(function* () { const executor = yield* ExecutorService; const saved = yield* executor.artifacts.save({ id: payload.id, title: payload.title, description: payload.description, code: payload.code, }); return artifactToResponse(saved); }), ), ) .handle("rename", ({ params: path, payload }) => capture( Effect.gen(function* () { const executor = yield* ExecutorService; const renamed = yield* executor.artifacts.rename({ id: path.artifactId, title: payload.title, }); return artifactToResponse(renamed); }), ), ) .handle("remove", ({ params: path }) => capture( Effect.gen(function* () { const executor = yield* ExecutorService; yield* executor.artifacts.remove({ id: path.artifactId }); return { removed: true }; }), ), ),);
import { HttpApiBuilder } from "effect/unstable/httpapi";
import { Effect } from "effect";
import type { Artifact, ArtifactSummary } from "@executor-js/sdk";
import { ExecutorApi } from "../api";
import { ExecutorService } from "../services";
import { capture } from "@executor-js/api";
const summaryToResponse = (a: ArtifactSummary) => ({
id: a.id,
owner: a.owner,
title: a.title,
description: a.description,
createdAt: a.createdAt.getTime(),
updatedAt: a.updatedAt.getTime(),
});
const artifactToResponse = (a: Artifact) => ({
...summaryToResponse(a),
code: a.code,
});
export const ArtifactsHandlers = HttpApiBuilder.group(ExecutorApi, "artifacts", (handlers) =>
handlers
.handle("list", () =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
const artifacts = yield* executor.artifacts.list();
return artifacts.map(summaryToResponse);
}),
),
)
.handle("get", ({ params: path }) =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
const artifact = yield* executor.artifacts.get(path.artifactId);
return artifactToResponse(artifact);
}),
),
)
.handle("save", ({ payload }) =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
const saved = yield* executor.artifacts.save({
id: payload.id,
title: payload.title,
description: payload.description,
code: payload.code,
});
return artifactToResponse(saved);
}),
),
)
.handle("rename", ({ params: path, payload }) =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
const renamed = yield* executor.artifacts.rename({
id: path.artifactId,
title: payload.title,
});
return artifactToResponse(renamed);
}),
),
)
.handle("remove", ({ params: path }) =>
capture(
Effect.gen(function* () {
const executor = yield* ExecutorService;
yield* executor.artifacts.remove({ id: path.artifactId });
return { removed: true };
}),
),
),
);