import {
HttpApiBuilder,
HttpApiEndpoint,
HttpApiGroup,
HttpApi,
HttpApiMiddleware,
} from "@effect/platform";
import { InternalServerError } from "@effect/platform/HttpApiError";
import { Effect, Schema, Layer } from "effect";
const DemoApiGroup = HttpApiGroup.make("Demo")
.add(
HttpApiEndpoint.post("demo")`/demo`
.addError(InternalServerError)
.addSuccess(Schema.Struct({
status: Schema.String,
})),
);
class ErrorLogMiddleware extends HttpApiMiddleware.Tag<ErrorLogMiddleware>()(
"ErrorLogMiddleware"
) { }
const ErrorLogMiddlewareLive = Layer.effect(
ErrorLogMiddleware,
Effect.gen(function* () {
return Effect.gen(function* () {
// Log and catch all errors here
})
}),
)
const Api = HttpApi.make("Api")
.add(DemoApiGroup.middleware(ErrorLogMiddleware))
const createDemoRouteHandler = () =>
HttpApiBuilder.group(Api, "Demo", (handlers) =>
Effect.gen(function* () {
return handlers
.handle("demo", () =>
Effect.gen(function* () {
return yield* Effect.fail(new InternalServerError())
})
)
})
);
export const ApiLive = HttpApiBuilder.api(Api).pipe(
Layer.provide(createDemoRouteHandler()),
Layer.provide(ErrorLogMiddlewareLive),
);
import {
HttpApiBuilder,
HttpApiEndpoint,
HttpApiGroup,
HttpApi,
HttpApiMiddleware,
} from "@effect/platform";
import { InternalServerError } from "@effect/platform/HttpApiError";
import { Effect, Schema, Layer } from "effect";
const DemoApiGroup = HttpApiGroup.make("Demo")
.add(
HttpApiEndpoint.post("demo")`/demo`
.addError(InternalServerError)
.addSuccess(Schema.Struct({
status: Schema.String,
})),
);
class ErrorLogMiddleware extends HttpApiMiddleware.Tag<ErrorLogMiddleware>()(
"ErrorLogMiddleware"
) { }
const ErrorLogMiddlewareLive = Layer.effect(
ErrorLogMiddleware,
Effect.gen(function* () {
return Effect.gen(function* () {
// Log and catch all errors here
})
}),
)
const Api = HttpApi.make("Api")
.add(DemoApiGroup.middleware(ErrorLogMiddleware))
const createDemoRouteHandler = () =>
HttpApiBuilder.group(Api, "Demo", (handlers) =>
Effect.gen(function* () {
return handlers
.handle("demo", () =>
Effect.gen(function* () {
return yield* Effect.fail(new InternalServerError())
})
)
})
);
export const ApiLive = HttpApiBuilder.api(Api).pipe(
Layer.provide(createDemoRouteHandler()),
Layer.provide(ErrorLogMiddlewareLive),
);