Refactor ExportGeneration to improve serialization and usage

Streamlined the `ExportGeneration` entity by adding a `getStatus` accessor and updating the serialization group. Refactored frontend logic to use computed properties for `status` and `storedObject`. Simplified API methods to work with the updated `ExportGeneration` interface for consistent handling.
This commit is contained in:
Julien Fastré 2025-03-17 10:41:54 +01:00
parent b2d8d21f04
commit 0c2508d26d
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
5 changed files with 44 additions and 15 deletions

View File

@ -59,7 +59,7 @@ final readonly class ExportGenerationController
return new JsonResponse(
$this->serializer->serialize(
['status' => $exportGeneration->getStoredObject()->getStatus(), 'stored_object' => $exportGeneration->getStoredObject()],
$exportGeneration,
'json',
[AbstractNormalizer::GROUPS => ['read']],
),

View File

@ -99,6 +99,13 @@ class ExportGeneration implements TrackCreationInterface
return $this->savedExport;
}
#[Serializer\Groups(['read'])]
#[Serializer\SerializedName('status')]
public function getStatus(): string
{
return $this->getStoredObject()->getStatus();
}
public function setSavedExport(SavedExport $savedExport): self
{
$this->savedExport = $savedExport;

View File

@ -1,14 +1,19 @@
import { StoredObject, StoredObjectStatus } from "ChillDocStoreAssets/types";
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
import {ExportGeneration} from "ChillMainAssets/types";
export const fetchExportGenerationStatus = async (
exportGenerationId: string,
): Promise<
| { status: "pending" }
| { status: StoredObjectStatus; stored_object: StoredObject }
> => {
return makeFetch(
): Promise<ExportGeneration> =>
makeFetch(
"GET",
`/api/1.0/main/export-generation/${exportGenerationId}/object`,
);
};
export const generateFromSavedExport = async (
savedExportUuid: string,
): Promise<ExportGeneration> =>
makeFetch(
"POST",
`/api/1.0/main/export/export-generation/${savedExportUuid}`
);

View File

@ -1,4 +1,5 @@
import { GenericDoc } from "ChillDocStoreAssets/types/generic_doc";
import {StoredObject, StoredObjectStatus} from "ChillDocStoreAssets/types";
export interface DateTime {
datetime: string;
@ -203,3 +204,13 @@ export interface WorkflowAttachment {
updatedBy: User | null;
genericDoc: null | GenericDoc;
}
export interface ExportGeneration {
id: string;
type: "export_generation";
exportAlias: string;
createdBy: User | null;
createdAt: DateTime | null;
status: StoredObjectStatus;
storedObject: StoredObject;
}

View File

@ -8,8 +8,9 @@ import {
} from "translator";
import { computed, onMounted, ref } from "vue";
import { StoredObject, StoredObjectStatus } from "ChillDocStoreAssets/types";
import { fetchExportGenerationStatus } from "ChillMainAssets/vuejs/DownloadExport/api";
import { fetchExportGenerationStatus } from "ChillMainAssets/lib/api/export";
import DocumentActionButtonsGroup from "ChillDocStoreAssets/vuejs/DocumentActionButtonsGroup.vue";
import {ExportGeneration} from "ChillMainAssets/types";
interface AppProps {
exportGenerationId: string;
@ -19,8 +20,16 @@ interface AppProps {
const props = defineProps<AppProps>();
const status = ref<StoredObjectStatus>("pending");
const storedObject = ref<null | StoredObject>(null);
const exportGeneration = ref<ExportGeneration|null>(null);
const status = computed<StoredObjectStatus>(() => exportGeneration.value?.status ?? 'pending');
const storedObject = computed<null | StoredObject>(() => {
if (exportGeneration.value === null) {
return null;
}
return exportGeneration.value?.storedObject;
}) ;
const isPending = computed<boolean>(() => status.value === "pending");
const isFetching = computed<boolean>(
@ -56,18 +65,15 @@ const checkForReady = function (): void {
};
const onObjectNewStatusCallback = async function (): Promise<void> {
let status_response = await fetchExportGenerationStatus(
exportGeneration.value = await fetchExportGenerationStatus(
props.exportGenerationId,
);
if (status_response.status === "pending") {
if (isPending) {
checkForReady();
return Promise.resolve();
}
status.value = status_response.status;
storedObject.value = status_response.stored_object;
return Promise.resolve();
};