chain entity
This commit is contained in:
parent
f4405e14de
commit
7f281cd82b
14
src/entities/chain/api/list.ts
Normal file
14
src/entities/chain/api/list.ts
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
0
src/entities/chain/index.ts
Normal file
0
src/entities/chain/index.ts
Normal file
13
src/entities/chain/lib.ts
Normal file
13
src/entities/chain/lib.ts
Normal 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);
|
||||||
|
}
|
||||||
11
src/entities/chain/model.ts
Normal file
11
src/entities/chain/model.ts
Normal 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 }),
|
||||||
|
}));
|
||||||
11
src/entities/chain/schema.ts
Normal file
11
src/entities/chain/schema.ts
Normal 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>;
|
||||||
Loading…
Reference in New Issue
Block a user