diff --git a/backend/app/models/files.py b/backend/app/models/files.py
index 0a22d4474..926fac105 100644
--- a/backend/app/models/files.py
+++ b/backend/app/models/files.py
@@ -13,6 +13,8 @@ class FileVersion(MongoModel):
version_num: int = 1
file_id: PyObjectId
creator: UserOut
+ bytes: int = 0
+ content_type: str = "N/A"
created: datetime = Field(default_factory=datetime.utcnow)
@@ -33,6 +35,8 @@ class FileDB(FileBase):
folder_id: Optional[PyObjectId]
views: int = 0
downloads: int = 0
+ bytes: int = 0
+ content_type: str = "N/A"
class FileOut(FileDB):
diff --git a/backend/app/routers/datasets.py b/backend/app/routers/datasets.py
index 93588a04a..36beac957 100644
--- a/backend/app/routers/datasets.py
+++ b/backend/app/routers/datasets.py
@@ -316,11 +316,15 @@ async def save_file(
part_size=settings.MINIO_UPLOAD_CHUNK_SIZE,
) # async write chunk to minio
version_id = response.version_id
+ bytes = len(fs.get_object(settings.MINIO_BUCKET_NAME, str(new_file_id)).data)
+ content_type = file.content_type
if version_id is None:
# TODO: This occurs in testing when minio is not running
version_id = 999999999
fileDB.version_id = version_id
fileDB.version_num = 1
+ fileDB.bytes = bytes
+ fileDB.content_type = content_type
print(fileDB)
await db["files"].replace_one({"_id": ObjectId(new_file_id)}, fileDB.to_mongo())
@@ -329,6 +333,8 @@ async def save_file(
version_id=version_id,
file_id=new_file_id,
creator=user,
+ bytes=bytes,
+ content_type=content_type
)
await db["file_versions"].insert_one(new_version.to_mongo())
return fileDB
diff --git a/frontend/src/components/files/FileAbout.tsx b/frontend/src/components/files/FileAbout.tsx
index 070a294fb..88c0fe0c8 100644
--- a/frontend/src/components/files/FileAbout.tsx
+++ b/frontend/src/components/files/FileAbout.tsx
@@ -9,7 +9,7 @@ type FileAboutProps = {
}
export function FileAbout(props: FileAboutProps) {
- const {id, created, name, creator, version_id} = props.fileSummary;
+ const {id, created, name, creator, version_id, bytes, content_type} = props.fileSummary;
return (
@@ -19,6 +19,8 @@ export function FileAbout(props: FileAboutProps) {
Uploaded as: {name}
Uploaded by: {creator.first_name} {creator.last_name}
Latest Version: {version_id}
+ Size: {bytes} bytes
+ Content Type: {content_type}
);
}
diff --git a/frontend/src/components/files/FilesTable.tsx b/frontend/src/components/files/FilesTable.tsx
index 0315f206b..8a72acbce 100644
--- a/frontend/src/components/files/FilesTable.tsx
+++ b/frontend/src/components/files/FilesTable.tsx
@@ -48,8 +48,8 @@ export default function FilesTable(props: FilesTableProps) {
Name
Updated
- {/*Size*/}
- {/*Type*/}
+ Size
+ Type
@@ -83,9 +83,8 @@ export default function FilesTable(props: FilesTableProps) {
{parseDate(file.created)} by {file.creator.first_name} {file.creator.last_name}
- {/*TODO we don't have those in backend yet*/}
- {/*{file.size}*/}
- {/*{file.contentType}*/}
+ {file.bytes} bytes
+ {file.content_type}
))
}
diff --git a/frontend/src/openapi/v2/models/FileOut.ts b/frontend/src/openapi/v2/models/FileOut.ts
index ff4879917..51394d786 100644
--- a/frontend/src/openapi/v2/models/FileOut.ts
+++ b/frontend/src/openapi/v2/models/FileOut.ts
@@ -15,4 +15,6 @@ export type FileOut = {
folder_id?: string;
views?: number;
downloads?: number;
+ bytes?: number;
+ content_type?: string;
}
diff --git a/frontend/src/openapi/v2/models/FileVersion.ts b/frontend/src/openapi/v2/models/FileVersion.ts
index b459ded90..eb2177be8 100644
--- a/frontend/src/openapi/v2/models/FileVersion.ts
+++ b/frontend/src/openapi/v2/models/FileVersion.ts
@@ -10,5 +10,7 @@ export type FileVersion = {
version_num?: number;
file_id: string;
creator: UserOut;
+ bytes?: number;
+ content_type?: string;
created?: string;
}
diff --git a/frontend/src/openapi/v2/services/FilesService.ts b/frontend/src/openapi/v2/services/FilesService.ts
index ebed8f4cd..f958674b8 100644
--- a/frontend/src/openapi/v2/services/FilesService.ts
+++ b/frontend/src/openapi/v2/services/FilesService.ts
@@ -111,4 +111,22 @@ export class FilesService {
});
}
+ /**
+ * Get File Extract
+ * @param fileId
+ * @returns any Successful Response
+ * @throws ApiError
+ */
+ public static getFileExtractApiV2FilesFileIdExtractPost(
+ fileId: string,
+ ): CancelablePromise {
+ return __request({
+ method: 'POST',
+ path: `/api/v2/files/${fileId}/extract`,
+ errors: {
+ 422: `Validation Error`,
+ },
+ });
+ }
+
}
\ No newline at end of file
diff --git a/frontend/src/openapi/v2/services/MetadataService.ts b/frontend/src/openapi/v2/services/MetadataService.ts
index 880970764..a49bea77e 100644
--- a/frontend/src/openapi/v2/services/MetadataService.ts
+++ b/frontend/src/openapi/v2/services/MetadataService.ts
@@ -61,6 +61,25 @@ export class MetadataService {
});
}
+ /**
+ * Delete Metadata
+ * Delete metadata by specific ID.
+ * @param metadataId
+ * @returns any Successful Response
+ * @throws ApiError
+ */
+ public static deleteMetadataApiV2MetadataMetadataIdDelete(
+ metadataId: string,
+ ): CancelablePromise {
+ return __request({
+ method: 'DELETE',
+ path: `/api/v2/metadata/${metadataId}`,
+ errors: {
+ 422: `Validation Error`,
+ },
+ });
+ }
+
/**
* Update Metadata
* Update metadata. Any fields provided in the contents JSON will be added or updated in the metadata. If context or