92 lines
2.0 KiB
TypeScript
92 lines
2.0 KiB
TypeScript
import { sendCommand } from "./client";
|
|
import { pickCase } from "./normalize";
|
|
|
|
export type FragmentDto = {
|
|
id: string;
|
|
type: string;
|
|
description: string;
|
|
time: string;
|
|
tags: string[];
|
|
};
|
|
|
|
export type CreateFragmentPayload = {
|
|
type: string;
|
|
description: string;
|
|
tags?: string[];
|
|
};
|
|
|
|
export type UpdateFragmentPayload = {
|
|
type?: string;
|
|
description?: string;
|
|
tags?: string[];
|
|
time?: string;
|
|
};
|
|
|
|
export type FragmentDtoRaw = {
|
|
id?: string;
|
|
type?: string;
|
|
description?: string;
|
|
time?: string;
|
|
tags?: string[];
|
|
Id?: string;
|
|
Type?: string;
|
|
Description?: string;
|
|
Time?: string;
|
|
Tags?: string[];
|
|
};
|
|
|
|
export function normalizeFragment(raw: FragmentDtoRaw): FragmentDto {
|
|
return {
|
|
id: pickCase(raw, "id", "Id", ""),
|
|
type: pickCase(raw, "type", "Type", ""),
|
|
description: pickCase(raw, "description", "Description", ""),
|
|
time: pickCase(raw, "time", "Time", ""),
|
|
tags: pickCase(raw, "tags", "Tags", [] as string[]),
|
|
};
|
|
}
|
|
|
|
export async function listFragments(): Promise<FragmentDto[]> {
|
|
const data = await sendCommand<FragmentDtoRaw[]>({
|
|
action: "fragments.list",
|
|
});
|
|
return data.map(normalizeFragment).filter((item) => Boolean(item.id));
|
|
}
|
|
|
|
export async function getFragment(id: string): Promise<FragmentDto | null> {
|
|
const data = await sendCommand<FragmentDtoRaw | null>({
|
|
action: "fragments.get",
|
|
id,
|
|
});
|
|
if (!data) return null;
|
|
const normalized = normalizeFragment(data);
|
|
return normalized.id ? normalized : null;
|
|
}
|
|
|
|
export async function createFragment(
|
|
payload: CreateFragmentPayload,
|
|
): Promise<FragmentDto> {
|
|
const data = await sendCommand<FragmentDtoRaw>({
|
|
action: "fragments.create",
|
|
payload,
|
|
});
|
|
return normalizeFragment(data);
|
|
}
|
|
|
|
export function updateFragment(
|
|
id: string,
|
|
payload: UpdateFragmentPayload,
|
|
): Promise<boolean> {
|
|
return sendCommand<boolean>({
|
|
action: "fragments.update",
|
|
id,
|
|
payload,
|
|
});
|
|
}
|
|
|
|
export function deleteFragment(id: string): Promise<boolean> {
|
|
return sendCommand<boolean>({
|
|
action: "fragments.delete",
|
|
id,
|
|
});
|
|
}
|