chain entity

This commit is contained in:
Robert 2024-03-07 05:33:00 +07:00
parent f4405e14de
commit 7f281cd82b
No known key found for this signature in database
GPG Key ID: F631C7FD957D5F22
5 changed files with 49 additions and 0 deletions

View File

@ -0,0 +1,14 @@
import { z } from "zod";
import { chainSchema } from "../schema";
import { getAxios } from "@/shared/lib/getAxios";
export async function getChainList() {
const axios = await getAxios();
try {
const response = await axios.get("/chain/list");
return z.array(chainSchema).parse(response.data);
} catch {
return null;
}
}

View File

13
src/entities/chain/lib.ts Normal file
View File

@ -0,0 +1,13 @@
import { useChainState } from "./model";
import { getChainList } from "./api/list";
import { redirect } from "@tanstack/react-router";
export async function requireChains() {
const chainState = useChainState.getState();
if (chainState.chains) return;
const chains = await getChainList();
if (chains === null) throw redirect({ to: "/" });
chainState.setChains(chains);
}

View File

@ -0,0 +1,11 @@
import { create } from "zustand";
import type { Chain } from "./schema";
interface ChainState {
chains?: Chain[];
setChains: (chains: Chain[]) => void;
}
export const useChainState = create<ChainState>((set) => ({
setChains: (chains) => set({ chains }),
}));

View File

@ -0,0 +1,11 @@
import { z } from "zod";
import { actionSchema } from "../action/schema";
export const chainSchema = z.object({
_id: z.string().uuid(),
name: z.string().nullable(),
actions: z.array(actionSchema),
lastModified: z.string(),
});
export type Chain = z.infer<typeof chainSchema>;