Skip to content

Commit

Permalink
API/Components: Connected DID KeyValuePairs (ie PageDIDMetadata)
Browse files Browse the repository at this point in the history
added api route and added frontend connection.
  • Loading branch information
Anton Schwarz committed Aug 21, 2023
1 parent 83a3abf commit f60ec5b
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 20 deletions.
13 changes: 8 additions & 5 deletions src/app/(rucio)/did/page/[scope]/[name]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@
import { PageDID as PageDIDStory } from '@/component-library/Pages/DID/PageDID';
import useComDOM from "@/lib/infrastructure/hooks/useComDOM";
import { useEffect, useState } from "react";
import { fixtureDIDDatasetReplicasViewModel, fixtureDIDMetaViewModel, fixtureDIDRulesViewModel, mockUseComDOM, fixtureDIDKeyValuePairsViewModel } from 'test/fixtures/table-fixtures';
import { fixtureDIDDatasetReplicasViewModel, fixtureDIDKeyValuePairsDataViewModel, fixtureDIDMetaViewModel, fixtureDIDRulesViewModel, mockUseComDOM } from 'test/fixtures/table-fixtures';
import { HTTPRequest } from "@/lib/sdk/http";
import { DIDMetaViewModel, DIDViewModel, FilereplicaStateDViewModel, FilereplicaStateViewModel } from '@/lib/infrastructure/data/view-model/did';
import { didMetaQueryBase } from '@/app/(rucio)/did/queries';
import { DIDKeyValuePairsDataViewModel, DIDMetaViewModel, DIDViewModel, FilereplicaStateDViewModel, FilereplicaStateViewModel } from '@/lib/infrastructure/data/view-model/did';
import { didKeyValuePairsDataQuery, didMetaQueryBase } from '@/app/(rucio)/did/queries';
import { Loading } from '@/component-library/Pages/Helpers/Loading';

export default function Page({ params }: { params: { scope: string, name: string } }) {
const [didMeta, setDIDMeta] = useState<DIDMetaViewModel>({status: "pending"} as DIDMetaViewModel)
const [didKeyValuePairsData, setDIDKeyValuePairsData] = useState({status: "pending"} as DIDKeyValuePairsDataViewModel)
const [fromDidList, setFromDidList] = useState<string>("yosearch")
useEffect(() => {
didMetaQueryBase(params.scope, params.name).then(setDIDMeta)
}, [])
useEffect(() => {
didKeyValuePairsDataQuery(params.scope, params.name).then(setDIDKeyValuePairsData)
}, [])

const didParentsComDOM = useComDOM<DIDViewModel>(
'page-did-parents-query', [], false, Infinity, 200, true
Expand Down Expand Up @@ -68,7 +72,6 @@ export default function Page({ params }: { params: { scope: string, name: string
}
setRequests()
}, [])
const didMetadataComDOM = mockUseComDOM(Array.from({ length: 100 }, (_, i) => fixtureDIDKeyValuePairsViewModel()))
const didRulesComDOM = mockUseComDOM(Array.from({ length: 100 }, (_, i) => fixtureDIDRulesViewModel()))
const didDatasetReplicasComDOM = mockUseComDOM(Array.from({ length: 100 }, (_, i) => fixtureDIDDatasetReplicasViewModel()))
if (didMeta.status === "pending") {return <Loading title="View DID" subtitle={`For DID ${params.scope}:${params.name}`} />}
Expand All @@ -77,7 +80,7 @@ export default function Page({ params }: { params: { scope: string, name: string
didMeta={didMeta}
fromDidList={fromDidList}
didParentsComDOM={didParentsComDOM}
didMetadataComDOM={didMetadataComDOM}
didKeyValuePairsData={didKeyValuePairsData}
didFileReplicasComDOM={didFileReplicasComDOM}
didFileReplicasDComDOM={didFileReplicasDComDOM}
didRulesComDOM={didRulesComDOM}
Expand Down
26 changes: 25 additions & 1 deletion src/app/(rucio)/did/queries.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { DIDMetaViewModel } from "@/lib/infrastructure/data/view-model/did";
import { DIDKeyValuePairsDataViewModel, DIDMetaViewModel } from "@/lib/infrastructure/data/view-model/did";
import { HTTPRequest, prepareRequestArgs } from "@/lib/sdk/http";

export async function didMetaQueryBase(scope: string, name: string): Promise<DIDMetaViewModel> {
Expand All @@ -22,5 +22,29 @@ export async function didMetaQueryBase(scope: string, name: string): Promise<DID
} as HeadersInit)
})

return await res.json()
}

export async function didKeyValuePairsDataQuery(scope: string, name: string): Promise<DIDKeyValuePairsDataViewModel> {
const req: HTTPRequest = {
method: "GET",
url: new URL('http://localhost:3000/api/didkeyvaluepairs'),
params: {
"scope": scope,
"name": name
},
headers: new Headers({
'Content-Type': 'application/json',
} as HeadersInit)
}

const { url, requestArgs } = prepareRequestArgs(req)
const res = await fetch(url, {
method: "GET",
headers: new Headers({
'Content-Type': 'application/json',
} as HeadersInit)
})

return await res.json()
}
4 changes: 2 additions & 2 deletions src/component-library/Pages/DID/PageDID.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { StoryFn, Meta } from "@storybook/react";
import { PageDID as PD } from "./PageDID";

import { fixtureDIDMetaViewModel, mockUseComDOM, fixtureDIDRulesViewModel, fixtureDIDViewModel, fixtureDIDDatasetReplicasViewModel, fixtureFilereplicaStateViewModel, fixtureFilereplicaStateDViewModel, fixtureDIDKeyValuePairsViewModel } from "test/fixtures/table-fixtures";
import { fixtureDIDMetaViewModel, mockUseComDOM, fixtureDIDRulesViewModel, fixtureDIDViewModel, fixtureDIDDatasetReplicasViewModel, fixtureFilereplicaStateViewModel, fixtureFilereplicaStateDViewModel, fixtureDIDKeyValuePairsDataViewModel} from "test/fixtures/table-fixtures";

export default {
title: "Components/Pages/DID",
Expand All @@ -16,7 +16,7 @@ PageDID.args = {
// Parent DIDs [FILE]
didParentsComDOM: mockUseComDOM(Array.from({length: 100}, (_, i) => fixtureDIDViewModel())),
// DID Metadata
didMetadataComDOM: mockUseComDOM(Array.from({ length: 100 }, (_, i) => fixtureDIDKeyValuePairsViewModel())),
didKeyValuePairsData: fixtureDIDKeyValuePairsDataViewModel(),
// Filereplicas
didFileReplicasComDOM: mockUseComDOM(Array.from({ length: 100 }, (_, i) => fixtureFilereplicaStateViewModel())),
didFileReplicasDComDOM: mockUseComDOM(Array.from({ length: 100 }, (_, i) => fixtureFilereplicaStateDViewModel())),
Expand Down
4 changes: 2 additions & 2 deletions src/component-library/Pages/DID/PageDID.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export interface PageDIDPageProps {
// Parent DIDs [FILE]
didParentsComDOM: UseComDOM<DIDViewModel>
// Metadata [BOTH]
didMetadataComDOM: UseComDOM<DIDKeyValuePairsDataViewModel>
didKeyValuePairsData: DIDKeyValuePairsDataViewModel
// File Replica States [FILE]
didFileReplicasComDOM: UseComDOM<FilereplicaStateViewModel>
// File Replica States [DATASET]
Expand Down Expand Up @@ -162,7 +162,7 @@ export const PageDID = (
show={showPageBools["subpage-metadata"]()}
id="subpage-metadata"
>
<PageDIDMetadata comdom={props.didMetadataComDOM} />
<PageDIDMetadata tabledata={props.didKeyValuePairsData} />
</SubPage>
<SubPage
show={showPageBools["subpage-contents"]()}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ const Template: StoryFn<typeof P> = (args) => <P {...args} />;

export const PageDIDMetadata = Template.bind({});
PageDIDMetadata.args = {
data: fixtureDIDKeyValuePairsDataViewModel()
tabledata: fixtureDIDKeyValuePairsDataViewModel()
}
14 changes: 5 additions & 9 deletions src/component-library/Pages/DID/PageDIDMetadata.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { NormalTable } from "@/component-library/StreamedTables/NormalTable";

export const PageDIDMetadata = (
props: {
data: DIDKeyValuePairsDataViewModel // remember that this is ONLY the custom metadata
tabledata: DIDKeyValuePairsDataViewModel // remember that this is ONLY the custom metadata
}
) => {

Expand Down Expand Up @@ -56,10 +56,10 @@ export const PageDIDMetadata = (
if (val === null) {
return <NullTag />
}
if (["Available", "Deleted", "Lost"].includes(val as string)) {
if (Object.keys(DIDAvailability).includes(val as string)) {
return <AvailabilityTag availability={val as DIDAvailability} />
}
if (Object.values(DIDType).includes(val as DIDType)) {
if (Object.keys(DIDType).includes(val as DIDType)) {
return <DIDTypeTag didtype={val as DIDType} />
}
else {
Expand All @@ -74,12 +74,9 @@ export const PageDIDMetadata = (
})
]

if (props.data.status === "pending") {
if (props.tabledata.status === "pending") {
return (
<div
className={twMerge(
"flex flex-col space-y-2",
)}
aria-label="DID Metadata Quick Summary -- Loading"
aria-busy="true"
>
Expand All @@ -89,9 +86,8 @@ export const PageDIDMetadata = (
}
return (
<NormalTable<DIDKeyValuePair>
tabledata={props.data.data}
tabledata={props.tabledata.data || []}
tablecolumns={tablecolumns}
tablestyling={{}}
/>
)
}
36 changes: 36 additions & 0 deletions src/pages/api/didkeyvaluepairs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { withAuthenticatedSessionRoute } from "@/lib/infrastructure/auth/session-utils";
import { DIDKeyValuePairsDataControllerParameters } from "@/lib/infrastructure/controller/did-keyvaluepairs-controller";
import appContainer from "@/lib/infrastructure/ioc/container-config";
import CONTROLLERS from "@/lib/infrastructure/ioc/ioc-symbols-controllers";
import { BaseController } from "@/lib/sdk/controller";
import { NextApiRequest, NextApiResponse } from "next";

async function getDIDKeyValuePairs(req: NextApiRequest, res: NextApiResponse, rucioAuthToken: string) {
if(req.method === 'POST') {
res.status(405).json({ error: 'Method Not Allowed' })
return
}
const { scope, name } = req.query

if(!scope || typeof scope !== 'string') {
res.status(400).json({ error: 'Missing scope parameter' })
return
}

if(!name || typeof name !== 'string') {
res.status(400).json({ error: 'Missing name parameter' })
return
}

const controller = appContainer.get<BaseController<DIDKeyValuePairsDataControllerParameters, void>>(CONTROLLERS.DID_KEYVALUEPAIRS)
const controllerParameters: DIDKeyValuePairsDataControllerParameters = {
response: res,
scope: scope,
name: name,
rucioAuthToken: rucioAuthToken
}

await controller.execute(controllerParameters)
}

export default withAuthenticatedSessionRoute(getDIDKeyValuePairs)

0 comments on commit f60ec5b

Please sign in to comment.