Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import { AudioBookRepositoryPromise } from "@/repository/AudioBookRepository";
import { tRPCProcedure, tRPCRouter } from "../../tRPC";
import { TRPCError } from "@trpc/server";
export type AudioBookSummaryType = {
id: string;
name: string;
plot: string;
genre: string[];
numCharacters: number;
numEpisodes: number;
numScenes: number;
numDialogues: number;
createdAt: number;
updatedAt: number;
lastAccessedAt: number;
status: "ACTIVE" | "ARCHIVED" | "DELETED";
};
export const projectsRouter = tRPCRouter({
get: tRPCProcedure.query(async () => {
const AudioBookRepositoryResult = await AudioBookRepositoryPromise;
if (AudioBookRepositoryResult.isErr()) {
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: "Failed to init 'AudioBookModel'",
cause: AudioBookRepositoryResult.error.cause,
});
}
const AudioBookRepository = AudioBookRepositoryResult.value;
const findAllSummariesResult = await AudioBookRepository.findAllSummaries();
if (findAllSummariesResult.isErr()) {
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message: "Failed to find 'audioBookSummaries'",
});
}
return findAllSummariesResult.value.map(({ id, createdAt, updatedAt, lastAccessedAt, ...rest }) => ({
id: id.toString("hex"),
createdAt: createdAt.getTime(),
updatedAt: updatedAt.getTime(),
lastAccessedAt: lastAccessedAt.getTime(),
...rest,
})) satisfies AudioBookSummaryType[];
}),
});
|