diff --git a/api/api_methods.py b/api/api_methods.py index 5d9eb78..073a8e8 100755 --- a/api/api_methods.py +++ b/api/api_methods.py @@ -714,14 +714,16 @@ class ApiMedia: params=[ ApiRequestParam(), ApiParamAccessToken(), - ApiParamInt(name="m_id", description="ID медиа", + ApiParamInt(name="media_id", description="ID медиа", value_min=0, value_max=1000000000), ], returns="медиа, в противном случае ошибку") - async def get(request, access_token, m_id): + async def get(request, access_token, media_id): if request.method != "GET": return make_error_object(Exception(API_ERROR_INVALID_REQUEST, "method must be executed http GET method")) - m = await Media.objects.filter(owner=access_token.user, pk=m_id).afirst() + m = await Media.objects.filter(Q(owner=access_token.user) | + Q(owner__account__photo_id=media_id) | + Q(owner__account__profile_background_id=media_id)).filter(pk=media_id).afirst() if m is not None: try: @@ -733,6 +735,30 @@ class ApiMedia: traceback.print_exc() return make_error_object(Exception(API_ERROR_NOT_FOUND, "object in storage not found")) + @staticmethod + @api_method("media.list", + doc="Получение списка всех загруженных медиа для текущего пользователя", + params=[ + ApiParamAccessToken(), + ApiParamInt(name="count", description="Количество объектов, максимум 100, по умолчанию 25", + value_min=1, value_max=100, default=25, required=False), + ApiParamInt(name="offset", description="Смещение списка относительно начала", + value_min=0, value_max=100000, default=0, required=False), + ], returns="Список с объектами media.") + async def get_list(access_token, count, offset): + ms = [item async for item in + Media.objects.filter(owner=access_token.user, ).order_by('upload_datetime')[offset:offset + count] + ] + + res = [{ + 'id': m.id, + 'name': m.original_name, + 'upload_time': int(time.mktime(m.upload_datetime.timetuple())), + 'extension': m.extension + } for m in ms] + + return api_make_response(res) + class DatabaseApi: # TODO переместить сюда форму заказа, список городов