feat(server): support for read-only assets and importing existing items in the filesystem (#2715)

* Added read-only flag for assets, endpoint to trigger file import vs upload

* updated fixtures with new property

* if upload is 'read-only', ensure there is no existing asset at the designated originalPath

* added test for file import as well as detecting existing image at read-only destination location

* Added storage service test for a case where it should not move read-only assets

* upload doesn't need the read-only flag available, just importing

* default isReadOnly on import endpoint to true

* formatting fixes

* create-asset dto needs isReadOnly, so set it to false by default on create, updated api generation

* updated code to reflect changes in MR

* fixed read stream promise return type

* new index for originalPath, check for existing path on import, reglardless of user, to prevent duplicates

* refactor: import asset

* chore: open api

* chore: tests

* Added externalPath support for individual users, updated UI to allow this to be set by admin

* added missing var for externalPath in ui

* chore: open api

* fix: compilation issues

* fix: server test

* built api, fixed user-response dto to include externalPath

* reverted accidental commit

* bad commit of duplicate externalPath in user response  dto

* fixed tests to include externalPath on expected result

* fix: unit tests

* centralized supported filetypes, perform file type checking of asset and sidecar during file import process

* centralized supported filetype check method to keep regex DRY

* fixed typo

* combined migrations into one

* update api

* Removed externalPath from shared-link code, added column to admin user page whether external paths / import is enabled or not

* update mimetype

* Fixed detect correct mimetype

* revert asset-upload config

* reverted domain.constant

* refactor

* fix mime-type issue

* fix format

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
Alex Phillips
2023-06-21 22:33:20 -04:00
committed by GitHub
parent 7f44d508dc
commit e171fec5aa
55 changed files with 1321 additions and 128 deletions

View File

@@ -1430,6 +1430,48 @@
]
}
},
"/asset/import": {
"post": {
"operationId": "importFile",
"parameters": [],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ImportAssetDto"
}
}
}
},
"responses": {
"201": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetFileUploadResponseDto"
}
}
}
}
},
"tags": [
"Asset"
],
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
]
}
},
"/asset/map-marker": {
"get": {
"operationId": "getMapMarkers",
@@ -5085,6 +5127,13 @@
"type": "string",
"format": "binary"
},
"isReadOnly": {
"type": "boolean",
"default": false
},
"fileExtension": {
"type": "string"
},
"deviceAssetId": {
"type": "string"
},
@@ -5108,9 +5157,6 @@
"isVisible": {
"type": "boolean"
},
"fileExtension": {
"type": "string"
},
"duration": {
"type": "string"
}
@@ -5118,12 +5164,12 @@
"required": [
"assetType",
"assetData",
"fileExtension",
"deviceAssetId",
"deviceId",
"fileCreatedAt",
"fileModifiedAt",
"isFavorite",
"fileExtension"
"isFavorite"
]
},
"CreateProfileImageDto": {
@@ -5186,6 +5232,10 @@
"storageLabel": {
"type": "string",
"nullable": true
},
"externalPath": {
"type": "string",
"nullable": true
}
},
"required": [
@@ -5461,6 +5511,59 @@
"timeGroup"
]
},
"ImportAssetDto": {
"type": "object",
"properties": {
"assetType": {
"$ref": "#/components/schemas/AssetTypeEnum"
},
"isReadOnly": {
"type": "boolean",
"default": true
},
"assetPath": {
"type": "string"
},
"sidecarPath": {
"type": "string"
},
"deviceAssetId": {
"type": "string"
},
"deviceId": {
"type": "string"
},
"fileCreatedAt": {
"format": "date-time",
"type": "string"
},
"fileModifiedAt": {
"format": "date-time",
"type": "string"
},
"isFavorite": {
"type": "boolean"
},
"isArchived": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"duration": {
"type": "string"
}
},
"required": [
"assetType",
"assetPath",
"deviceAssetId",
"deviceId",
"fileCreatedAt",
"fileModifiedAt",
"isFavorite"
]
},
"JobCommand": {
"type": "string",
"enum": [
@@ -6592,6 +6695,9 @@
"storageLabel": {
"type": "string"
},
"externalPath": {
"type": "string"
},
"isAdmin": {
"type": "boolean"
},
@@ -6665,6 +6771,10 @@
"type": "string",
"nullable": true
},
"externalPath": {
"type": "string",
"nullable": true
},
"profileImagePath": {
"type": "string"
},
@@ -6697,6 +6807,7 @@
"firstName",
"lastName",
"storageLabel",
"externalPath",
"profileImagePath",
"shouldChangePassword",
"isAdmin",