refactor: enforce frontend view model boundaries
This commit is contained in:
@@ -24,6 +24,7 @@ function stockQueryOptions(uid: string) {
|
||||
staleTime: STOCK_STALE_TIME_MS,
|
||||
};
|
||||
}
|
||||
|
||||
function useStock(identifier: string) {
|
||||
const isUid
|
||||
= /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
|
||||
@@ -34,6 +35,7 @@ function useStock(identifier: string) {
|
||||
...stockQueryOptions(identifier),
|
||||
enabled: Boolean(identifier) && isUid,
|
||||
});
|
||||
|
||||
const byTicker = useResourceQuery({
|
||||
...apiQueryClient.queryOptions("get", "/api/v1/stocks/by-ticker/{ticker}", {
|
||||
params: { path: { ticker: identifier } },
|
||||
@@ -41,6 +43,7 @@ function useStock(identifier: string) {
|
||||
enabled: Boolean(identifier) && !isUid,
|
||||
staleTime: STOCK_STALE_TIME_MS,
|
||||
});
|
||||
|
||||
return isUid ? byUid : byTicker;
|
||||
}
|
||||
|
||||
@@ -63,6 +66,7 @@ function useStockCompany(uid: string) {
|
||||
staleTime: STOCK_STALE_TIME_MS,
|
||||
});
|
||||
}
|
||||
|
||||
function useStockDividends(uid: string) {
|
||||
return useResourceQuery({
|
||||
meta: { accessGroup: "brokerage" },
|
||||
@@ -73,6 +77,7 @@ function useStockDividends(uid: string) {
|
||||
staleTime: STOCK_STALE_TIME_MS,
|
||||
});
|
||||
}
|
||||
|
||||
function useStockPosition(uid: string) {
|
||||
return useResourceQuery({
|
||||
meta: { accessGroup: "brokerage" },
|
||||
@@ -83,6 +88,7 @@ function useStockPosition(uid: string) {
|
||||
staleTime: STOCK_STALE_TIME_MS,
|
||||
});
|
||||
}
|
||||
|
||||
function useStockQuote(uid: string) {
|
||||
return useResourceQuery({
|
||||
...apiQueryClient.queryOptions("get", "/api/v1/stocks/{uid}/quote", {
|
||||
@@ -92,16 +98,23 @@ function useStockQuote(uid: string) {
|
||||
staleTime: STOCK_STALE_TIME_MS,
|
||||
});
|
||||
}
|
||||
|
||||
function useStocks(uids: string[]) {
|
||||
const uniqueUids = [...new Set(uids)];
|
||||
const queries = useAuthenticatedQueries(uniqueUids.map(uniqueUid => stockQueryOptions(uniqueUid)));
|
||||
|
||||
const queries = useAuthenticatedQueries(
|
||||
uniqueUids.map(uniqueUid => stockQueryOptions(uniqueUid)),
|
||||
);
|
||||
|
||||
return new Map(
|
||||
queries.map((query, index) => [
|
||||
/* eslint-disable-line security/detect-object-injection -- This is a positional index into the local array, not a user-supplied object key. */ uniqueUids[index],
|
||||
// eslint-disable-next-line security/detect-object-injection -- This is a positional index into the local array, not a user-supplied object key.
|
||||
uniqueUids[index],
|
||||
unwrapResourceResult(query).data,
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
function useStockSearch(query: string) {
|
||||
return useResourceQuery({
|
||||
...apiQueryClient.queryOptions("get", "/api/v1/stocks", {
|
||||
@@ -112,7 +125,8 @@ function useStockSearch(query: string) {
|
||||
});
|
||||
}
|
||||
|
||||
export { MIN_STOCK_SEARCH_LENGTH,
|
||||
export {
|
||||
MIN_STOCK_SEARCH_LENGTH,
|
||||
type StockPeriod,
|
||||
useStock,
|
||||
useStockCandles,
|
||||
|
||||
Reference in New Issue
Block a user