1import { Compute } from "@/Prisma/Compute.ts";
2import { WriteBucket, WriteBucketBinding } from "@/Prisma/WriteBucket.ts";
3import * as Effect from "effect/Effect";
4import { HttpServerRequest } from "effect/http/HttpServerRequest";
5import * as HttpServerResponse from "effect/http/HttpServerResponse";
6import { TestBucket, TestProject } from "./bucket.ts";
7import { writeRoutes } from "./write-routes.ts";
8
9/** Write-only access via the native Compute binding (`WriteBucketBinding`). */
10export default Compute(
11 "PrismaWriteBucketCompute",
12 Effect.gen(function* () {
13 const project = yield* TestProject;
14 return {
15 project,
16 appName: "alchemy-bucket-binding-write",
17 main: import.meta.filename,
18 port: 8080,
19 timeoutSeconds: 240,
20 destroyOldDeployment: true,
21 };
22 }),
23 Effect.gen(function* () {
24 const bucket = yield* TestBucket;
25 const store = yield* WriteBucket(bucket);
26 return {
27 fetch: Effect.gen(function* () {
28 const request = yield* HttpServerRequest;
29 const url = new URL(request.url, "http://x");
30 const handled = yield* writeRoutes(store, request, url);
31 return handled ?? HttpServerResponse.text("Not Found", { status: 404 });
32 }),
33 };
34 }).pipe(Effect.provide(WriteBucketBinding)),
35);