diff --git a/apis/paios/openapi.yaml b/apis/paios/openapi.yaml index cd0cb59..0f365cd 100644 --- a/apis/paios/openapi.yaml +++ b/apis/paios/openapi.yaml @@ -1185,10 +1185,12 @@ components: resource_id: $ref: '#/components/schemas/uuid4' user_id: - $ref: '#/components/schemas/uuid4' + type: string + nullable: true expiration_dt: type: string format: date-time + nullable: true is_revoked: type: boolean required: diff --git a/backend/api/SharesView.py b/backend/api/SharesView.py index 7f08e0d..b04f523 100644 --- a/backend/api/SharesView.py +++ b/backend/api/SharesView.py @@ -15,22 +15,28 @@ async def get(self, id: str): return JSONResponse(share.model_dump(), status_code=200) async def post(self, body: dict): - print("expiration_dt: {}".format(body['expiration_dt'])) - expiration_dt = datetime.fromisoformat(body['expiration_dt']).astimezone(tz=timezone.utc) - print("converted expiration_dt: {}".format(expiration_dt)) + expiration_dt = None + if 'expiration_dt' in body and body['expiration_dt'] is not None: + expiration_dt = datetime.fromisoformat(body['expiration_dt']).astimezone(tz=timezone.utc) + user_id = None + if 'user_id' in body and body['user_id']: + user_id = body['user_id'] new_share = await self.slm.create_share(resource_id=body['resource_id'], - user_id=body['user_id'], + user_id=user_id, expiration_dt=expiration_dt, is_revoked=False) return JSONResponse(new_share.model_dump(), status_code=201, headers={'Location': f'{api_base_url}/shares/{new_share.id}'}) async def put(self, id: str, body: dict): - print("expiration_dt: {}".format(body['expiration_dt'])) - expiration_dt = datetime.fromisoformat(body['expiration_dt']).astimezone(tz=timezone.utc) - print("converted expiration_dt: {}".format(expiration_dt)) + expiration_dt = None + if 'expiration_dt' in body and body['expiration_dt'] is not None: + expiration_dt = datetime.fromisoformat(body['expiration_dt']).astimezone(tz=timezone.utc) + user_id = None + if 'user_id' in body and body['user_id']: + user_id = body['user_id'] updated_share = await self.slm.update_share(id, resource_id=body['resource_id'], - user_id=body['user_id'], + user_id=user_id, expiration_dt=expiration_dt, is_revoked=body['is_revoked']) if updated_share is None: diff --git a/backend/managers/SharesManager.py b/backend/managers/SharesManager.py index 01c6e15..f5bbb92 100644 --- a/backend/managers/SharesManager.py +++ b/backend/managers/SharesManager.py @@ -81,8 +81,6 @@ async def retrieve_shares(self, offset: int = 0, limit: int = 100, sort_by: Opti async with db_session_context() as session: query = select(Share) - print("filters: {}".format(filters)) - if filters: for key, value in filters.items(): if isinstance(value, list): diff --git a/backend/schemas.py b/backend/schemas.py index 83e1d6e..4007dfe 100644 --- a/backend/schemas.py +++ b/backend/schemas.py @@ -70,9 +70,17 @@ class ShareBaseSchema(BaseModel): expiration_dt: Optional[datetime] = None is_revoked: Optional[bool] = False - @field_serializer('expiration_dt') - def serialize_dt(self, dt: datetime, _info): - return dt.strftime('%Y-%m-%dT%H:%M:%SZ') + @field_serializer('user_id') + def serialize_user_id(self, user_id: str, _info): + if user_id: + return user_id + else: + return "" + + @field_serializer('expiration_dt', when_used='unless-none') + def serialize_expiration_dt(self, dt: datetime, _info): + if dt: + return dt.strftime('%Y-%m-%dT%H:%M:%SZ') class ShareCreateSchema(ShareBaseSchema):