Mind-blowing code and seeking better solution for error handling
This part of my code is mind-blowing. Does anyone have a better solution for this situation?
type ResJson = {
ok: boolean;
error:
| "ParseJsonError"
| "InvalidInputError"
| "TitleNotExistsError"
| "TitleUsedBeforeError"
| "AdminNotFoundError";
};
const errObj = {
ParseJsonError: class ParseJsonError extends Data.TaggedError(
"ParseJsonError",
)<{}> {},
InvalidInputError: class InvalidInputError extends Data.TaggedError(
"InvalidInputError",
)<{}> {},
TitleNotExistsError: class TitleNotExistsError extends Data.TaggedError(
"TitleNotExistsError",
)<{}> {},
TitleUsedBeforeError: class TitleUsedBeforeError extends Data.TaggedError(
"TitleUsedBeforeError",
)<{}> {},
AdminNotFoundError: class AdminNotFoundError extends Data.TaggedError(
"AdminNotFoundError",
)<{}> {},
} as const;
class TitlesResponseError extends Data.TaggedError("TitlesResponseError")<{}> {}
const modifyTitles = (title: string, titleId: number, user: string) => {
return Effect.tryPromise({
try: () =>
axios.post<ResJson>(
"http://localhost:5173/used",
{ auth: "something", title, titleId, user },
{ headers: { "Content-Type": "application/json" } },
),
catch: () => new TitlesResponseError(),
}).pipe(
Effect.filterOrFail(
(x) => x.data.ok,
(res) => errObj[res.data.error],
),
);
};type ResJson = {
ok: boolean;
error:
| "ParseJsonError"
| "InvalidInputError"
| "TitleNotExistsError"
| "TitleUsedBeforeError"
| "AdminNotFoundError";
};
const errObj = {
ParseJsonError: class ParseJsonError extends Data.TaggedError(
"ParseJsonError",
)<{}> {},
InvalidInputError: class InvalidInputError extends Data.TaggedError(
"InvalidInputError",
)<{}> {},
TitleNotExistsError: class TitleNotExistsError extends Data.TaggedError(
"TitleNotExistsError",
)<{}> {},
TitleUsedBeforeError: class TitleUsedBeforeError extends Data.TaggedError(
"TitleUsedBeforeError",
)<{}> {},
AdminNotFoundError: class AdminNotFoundError extends Data.TaggedError(
"AdminNotFoundError",
)<{}> {},
} as const;
class TitlesResponseError extends Data.TaggedError("TitlesResponseError")<{}> {}
const modifyTitles = (title: string, titleId: number, user: string) => {
return Effect.tryPromise({
try: () =>
axios.post<ResJson>(
"http://localhost:5173/used",
{ auth: "something", title, titleId, user },
{ headers: { "Content-Type": "application/json" } },
),
catch: () => new TitlesResponseError(),
}).pipe(
Effect.filterOrFail(
(x) => x.data.ok,
(res) => errObj[res.data.error],
),
);
};