import * as Context from "effect/Context"; import type { Effect } from "effect/Effect"; import * as S from "effect/Schema"; import { Issue, IssueId } from "./issue.ts"; import { Reply, ReplyId } from "./reply.ts"; export class CreateIssueRequest extends S.Class( "CreateIssueRequest", )({ title: S.String, description: S.String, }) {} export class UpdateIssueRequest extends S.Class( "UpdateIssueRequest", )({ issueId: IssueId, title: S.String.pipe(S.optional), description: S.String.pipe(S.optional), }) {} export class SendReplyRequest extends S.Class( "SendReplyRequest", )({ issueId: IssueId, content: S.String, }) {} export class UpdateReplyRequest extends S.Class( "UpdateReplyRequest", )({ replyId: ReplyId, content: S.String.pipe(S.optional), }) {} export class Issues extends Context.Service< Issues, { listIssues: () => Effect; readIssue: (issueId: IssueId) => Effect; createIssue: (input: CreateIssueRequest) => Effect; updateIssue: (input: UpdateIssueRequest) => Effect; closeIssue: (issueId: IssueId) => Effect; sendReply: (input: SendReplyRequest) => Effect; updateReply: (input: UpdateReplyRequest) => Effect; deleteReply: (replyId: ReplyId) => Effect; } >()("Issues") {}