Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 33 additions & 8 deletions app/routers/v1/items/api_items.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@
from .crud_items import get_item_by_location
from .crud_items import get_items_by_ids
from .crud_items import get_items_by_location
from .crud_items import get_marked_items_by_username
from .crud_items import mark_delete_item_by_id
from .crud_items import mark_restore_item_by_id
from .crud_items import update_item
from .crud_items import update_items
from .dependencies import jwt_required
Expand Down Expand Up @@ -151,18 +153,17 @@ async def mark_item_deleted(
set_api_response_error(api_response, 'Failed to mark item as deleted', EAPIResponseCode.internal_error)
return api_response.json_response()

@router.delete('batch/mark/')
async def mark_items_deleted(
self, ids: list[UUID] = Query(None), current_identity: dict = Depends(jwt_required)
@router.put('/mark/')
async def mark_item_restore(
self, id_: UUID = Query(None, alias='id'), current_identity: dict = Depends(jwt_required)
) -> JSONResponse:
try:
api_response = DELETEItemResponse()
for id_ in ids:
mark_delete_item_by_id(id_, current_identity['username'])
api_response = PUTItemResponse()
mark_restore_item_by_id(id_)
except EntityNotFoundException:
set_api_response_error(api_response, 'One or more items not found', EAPIResponseCode.not_found)
set_api_response_error(api_response, f'Failed to get item with id {id_}', EAPIResponseCode.not_found)
except Exception:
set_api_response_error(api_response, 'Failed to mark items as deleted', EAPIResponseCode.internal_error)
set_api_response_error(api_response, 'Failed to mark item as deleted', EAPIResponseCode.internal_error)
return api_response.json_response()


Expand Down Expand Up @@ -234,6 +235,30 @@ async def delete_items_by_ids(
set_api_response_error(api_response, 'Failed to delete items', EAPIResponseCode.not_found)
return api_response.json_response()

@router_bulk.delete('/mark/')
async def mark_items_deleted(
self, ids: list[UUID] = Query(None), current_identity: dict = Depends(jwt_required)
) -> JSONResponse:
try:
api_response = DELETEItemResponse()
for id_ in ids:
mark_delete_item_by_id(id_, current_identity['username'])
except EntityNotFoundException:
set_api_response_error(api_response, 'One or more items not found', EAPIResponseCode.not_found)
except Exception:
set_api_response_error(api_response, 'Failed to mark items as deleted', EAPIResponseCode.internal_error)
return api_response.json_response()

@router_bulk.get('/mark/')
async def get_items_mark(self, current_identity: dict = Depends(jwt_required)) -> JSONResponse:
try:
api_response = GETItemResponse()
result = get_marked_items_by_username(current_identity['username'])
api_response.result = [combine_item_tables(item) for item in result]
except Exception:
set_api_response_error(api_response, 'Failed to get marked items', EAPIResponseCode.internal_error)
return api_response.json_response()

@router_bulk.put(
'/batch/bequeath/',
response_model=PUTItemsBequeathResponse,
Expand Down
20 changes: 20 additions & 0 deletions app/routers/v1/items/crud_items.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,15 @@ def get_items_by_ids(params: GETItemsByIDs, ids: list[UUID], api_response: APIRe
paginate(params, api_response, item_query, combine_item_tables)


def get_marked_items_by_username(deleted_by: str) -> list[tuple[ItemModel, StorageModel, ExtendedModel]]:
item_query = (
db.session.query(ItemModel, StorageModel, ExtendedModel)
.join(StorageModel, ExtendedModel)
.filter(ItemModel.deleted_by == deleted_by, ItemModel.deleted.is_(True))
)
return item_query.all()


async def get_items_by_location( # noqa: C901
params: GETItemsByLocation, api_response: APIResponse, current_identity: dict
):
Expand Down Expand Up @@ -610,6 +619,17 @@ def mark_delete_item_by_id(id_: UUID, username: str):
db.session.commit()


def mark_restore_item_by_id(id_: UUID):
item_query = db.session.query(ItemModel).filter(ItemModel.id == id_)
item_result = item_query.first()
if not item_result:
raise EntityNotFoundException()
item_result.deleted = False
item_result.deleted_by = None
item_result.deleted_at = None
db.session.commit()


def delete_items_by_ids(ids: list[UUID], kafka_client: KafkaProducerClient, api_response: APIResponse):
for id_ in ids:
delete_item_by_id(id_, kafka_client, api_response)
Expand Down
2 changes: 1 addition & 1 deletion migrations/versions/b703f5750172_file_deletion.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def upgrade():
'items',
sa.Column(
'deleted_by',
sa.Boolean(),
sa.String(),
nullable=True,
server_default=sa.sql.null(),
),
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "metadata"
version = "2.2.11"
version = "2.2.12"
description = "Create and update file metadata"
authors = ["Indoc Research"]

Expand Down
Loading