feat(server): trash asset (#4015)

* refactor(server): delete assets endpoint

* fix: formatting

* chore: cleanup

* chore: open api

* chore(mobile): replace DeleteAssetDTO with BulkIdsDTOs

* feat: trash an asset

* chore(server): formatting

* chore: open api

* chore: wording

* chore: open-api

* feat(server): add withDeleted to getAssets queries

* WIP: mobile-recycle-bin

* feat(server): recycle-bin to system config

* feat(web): use recycle-bin system config

* chore(server): domain assetcore removed

* chore(server): rename recycle-bin to trash

* chore(web): rename recycle-bin to trash

* chore(server): always send soft deleted assets for getAllByUserId

* chore(web): formatting

* feat(server): permanent delete assets older than trashed period

* feat(web): trash empty placeholder image

* feat(server): empty trash

* feat(web): empty trash

* WIP: mobile-recycle-bin

* refactor(server): empty / restore trash to separate endpoint

* test(server): handle failures

* test(server): fix e2e server-info test

* test(server): deletion test refactor

* feat(mobile): use map settings from server-config to enable / disable map

* feat(mobile): trash asset

* fix(server): operations on assets in trash

* feat(web): show trash statistics

* fix(web): handle trash enabled

* fix(mobile): restore updates from trash

* fix(server): ignore trashed assets for person

* fix(server): add / remove search index when trashed / restored

* chore(web): format

* fix(server): asset service test

* fix(server): include trashed assts for duplicates from uploads

* feat(mobile): no dialog for trash, always dialog for permanent delete

* refactor(mobile): use isar where instead of dart filter

* refactor(mobile): asset provide - handle deletes in single db txn

* chore(mobile): review changes

* feat(web): confirmation before empty trash

* server: review changes

* fix(server): handle library changes

* fix: filter external assets from getting trashed / deleted

* fix(server): empty-bin

* feat: broadcast config update events through ws

* change order of trash button on mobile

* styling

* fix(mobile): do not show trashed toast for local only assets

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
shenlong
2023-10-06 07:01:14 +00:00
committed by GitHub
parent fc93762230
commit 4a8887f37b
117 changed files with 3155 additions and 928 deletions

View File

@@ -681,30 +681,20 @@
},
"/asset": {
"delete": {
"operationId": "deleteAsset",
"operationId": "deleteAssets",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeleteAssetDto"
"$ref": "#/components/schemas/AssetBulkDeleteDto"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/DeleteAssetResponseDto"
},
"type": "array"
}
}
},
"204": {
"description": ""
}
},
@@ -1568,6 +1558,41 @@
]
}
},
"/asset/restore": {
"post": {
"operationId": "restoreAssets",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BulkIdsDto"
}
}
},
"required": true
},
"responses": {
"204": {
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"tags": [
"Asset"
]
}
},
"/asset/search": {
"post": {
"operationId": "searchAsset",
@@ -1667,6 +1692,14 @@
"schema": {
"type": "boolean"
}
},
{
"name": "isTrashed",
"required": false,
"in": "query",
"schema": {
"type": "boolean"
}
}
],
"responses": {
@@ -1817,6 +1850,14 @@
"type": "boolean"
}
},
{
"name": "isTrashed",
"required": false,
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "timeBucket",
"required": true,
@@ -1929,6 +1970,14 @@
"type": "boolean"
}
},
{
"name": "isTrashed",
"required": false,
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "key",
"required": false,
@@ -1978,6 +2027,56 @@
]
}
},
"/asset/trash/empty": {
"post": {
"operationId": "emptyTrash",
"parameters": [],
"responses": {
"204": {
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"tags": [
"Asset"
]
}
},
"/asset/trash/restore": {
"post": {
"operationId": "restoreTrash",
"parameters": [],
"responses": {
"204": {
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"tags": [
"Asset"
]
}
},
"/asset/upload": {
"post": {
"operationId": "uploadFile",
@@ -5398,6 +5497,24 @@
],
"type": "object"
},
"AssetBulkDeleteDto": {
"properties": {
"force": {
"type": "boolean"
},
"ids": {
"items": {
"format": "uuid",
"type": "string"
},
"type": "array"
}
},
"required": [
"ids"
],
"type": "object"
},
"AssetBulkUpdateDto": {
"properties": {
"ids": {
@@ -5616,6 +5733,9 @@
"isReadOnly": {
"type": "boolean"
},
"isTrashed": {
"type": "boolean"
},
"libraryId": {
"type": "string"
},
@@ -5686,6 +5806,7 @@
"updatedAt",
"isFavorite",
"isArchived",
"isTrashed",
"localDateTime",
"isOffline",
"isExternal",
@@ -6222,48 +6343,6 @@
],
"type": "object"
},
"DeleteAssetDto": {
"properties": {
"ids": {
"example": [
"bf973405-3f2a-48d2-a687-2ed4167164be",
"dd41870b-5d00-46d2-924e-1d8489a0aa0f",
"fad77c3f-deef-4e7e-9608-14c1aa4e559a"
],
"items": {
"type": "string"
},
"title": "Array of asset IDs to delete",
"type": "array"
}
},
"required": [
"ids"
],
"type": "object"
},
"DeleteAssetResponseDto": {
"properties": {
"id": {
"type": "string"
},
"status": {
"$ref": "#/components/schemas/DeleteAssetStatus"
}
},
"required": [
"status",
"id"
],
"type": "object"
},
"DeleteAssetStatus": {
"enum": [
"SUCCESS",
"FAILED"
],
"type": "string"
},
"DownloadArchiveInfo": {
"properties": {
"assetIds": {
@@ -7225,9 +7304,13 @@
},
"oauthButtonText": {
"type": "string"
},
"trashDays": {
"type": "integer"
}
},
"required": [
"trashDays",
"oauthButtonText",
"loginPageMessage",
"mapTileUrl"
@@ -7268,6 +7351,9 @@
},
"tagImage": {
"type": "boolean"
},
"trash": {
"type": "boolean"
}
},
"required": [
@@ -7275,6 +7361,7 @@
"configFile",
"facialRecognition",
"map",
"trash",
"reverseGeocoding",
"oauth",
"oauthAutoLaunch",
@@ -7630,6 +7717,9 @@
},
"thumbnail": {
"$ref": "#/components/schemas/SystemConfigThumbnailDto"
},
"trash": {
"$ref": "#/components/schemas/SystemConfigTrashDto"
}
},
"required": [
@@ -7641,7 +7731,8 @@
"reverseGeocoding",
"storageTemplate",
"job",
"thumbnail"
"thumbnail",
"trash"
],
"type": "object"
},
@@ -7991,6 +8082,21 @@
],
"type": "object"
},
"SystemConfigTrashDto": {
"properties": {
"days": {
"type": "integer"
},
"enabled": {
"type": "boolean"
}
},
"required": [
"days",
"enabled"
],
"type": "object"
},
"TagResponseDto": {
"properties": {
"id": {