| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import { ProjectCopy } from "@opencode-ai/schema/project-copy"
- import { Project } from "@opencode-ai/schema/project"
- import { Schema, Struct } from "effect"
- import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi"
- import { LocationQuery, locationQueryOpenApi } from "./location"
- const root = "/experimental/project/:projectID/copy"
- export class ProjectCopyError extends Schema.ErrorClass<ProjectCopyError>("ProjectCopyError")(
- {
- name: Schema.Literal("ProjectCopyError"),
- data: Schema.Struct({
- message: Schema.String,
- forceRequired: Schema.optional(Schema.Boolean),
- }),
- },
- { httpApiStatus: 400 },
- ) {}
- const CreatePayload = Schema.Struct(Struct.omit(ProjectCopy.CreateInput.fields, ["projectID", "sourceDirectory"]))
- const RemovePayload = Schema.Struct(Struct.omit(ProjectCopy.RemoveInput.fields, ["projectID"]))
- export const ProjectCopyGroup = HttpApiGroup.make("server.projectCopy")
- .add(
- HttpApiEndpoint.post("projectCopy.create", root, {
- params: { projectID: Project.ID },
- query: LocationQuery,
- payload: CreatePayload,
- success: ProjectCopy.Copy,
- error: ProjectCopyError,
- })
- .annotateMerge(locationQueryOpenApi)
- .annotateMerge(OpenApi.annotations({ identifier: "v2.projectCopy.create" })),
- )
- .add(
- HttpApiEndpoint.delete("projectCopy.remove", root, {
- params: { projectID: Project.ID },
- query: LocationQuery,
- payload: RemovePayload,
- success: HttpApiSchema.NoContent,
- error: ProjectCopyError,
- })
- .annotateMerge(locationQueryOpenApi)
- .annotateMerge(OpenApi.annotations({ identifier: "v2.projectCopy.remove" })),
- )
- .add(
- HttpApiEndpoint.post("projectCopy.refresh", `${root}/refresh`, {
- params: { projectID: Project.ID },
- query: LocationQuery,
- success: HttpApiSchema.NoContent,
- error: ProjectCopyError,
- })
- .annotateMerge(locationQueryOpenApi)
- .annotateMerge(OpenApi.annotations({ identifier: "v2.projectCopy.refresh" })),
- )
- .annotateMerge(OpenApi.annotations({ title: "projectCopy", description: "Project copy management routes." }))
|