adding media related code

This commit is contained in:
Hirad 2025-07-23 11:53:15 +03:30
parent b803afe70c
commit f4c77481e7
8 changed files with 310 additions and 43 deletions

View file

@ -1,10 +1,11 @@
from typing import Optional, List
from synclean.api.users import UserAPI
from synclean.models.enums import UserMediaOrderBy, Direction, UserOrderBy
from synclean.models.pagination import UserMediaPaginationParams, UserPaginationParams
from synclean.models.user import UserList
from synclean.models.user_media import UserMediaList
from synclean.models.enums import UserMediaStatsOrderBy, Direction, UserOrderBy, UserMediaOrderBy
from synclean.models.pagination import UserMediaStatsPaginationParams, UserPaginationParams, UserMediaPaginationParams
from synclean.models.user import UserList, User
from synclean.models.user_media import UserMediaList, MediaItem
from synclean.models.user_media_stats import UserMediaStatsList, UserMediaStats
class UserService:
@ -18,11 +19,11 @@ class UserService:
order_by: str,
direction: str,
search: Optional[str]
) -> UserMediaList | None:
order_by_enum = UserMediaOrderBy(order_by)
) -> UserMediaStatsList | None:
order_by_enum = UserMediaStatsOrderBy(order_by)
direction_enum = Direction(direction)
pagination_params = UserMediaPaginationParams(limit, offset, order_by_enum, direction_enum, search)
pagination_params = UserMediaStatsPaginationParams(limit, offset, order_by_enum, direction_enum, search)
users = self.user_api.get_users_list_by_media(pagination_params)
if users:
@ -46,5 +47,71 @@ class UserService:
return users
return None
def get_user_details_by_id(self, user_id: str):
pass
def get_user_details_by_id(self, user_id: str) -> User | None:
user_details = self.user_api.get_user_details_by_name(user_id)
if user_details:
return user_details
print("No user found")
return None
def get_user_media_stats_by_id(self, user_id: str) -> UserMediaStats | None:
if user_id.startswith('@'):
user_id = user_id[1:]
if ':' in user_id:
user_id = user_id.split(':')[0]
user_media = self.user_api.get_user_media_stats_by_id(user_id)
if user_media:
return user_media
return None
def get_user_media_by_id(
self,
user_id: str,
limit: int,
offset: int,
order_by: str,
direction: str
) -> UserMediaList | None:
order_by_enum = UserMediaOrderBy(order_by)
direction_enum = Direction(direction)
pagination = UserMediaPaginationParams(limit, offset, order_by_enum, direction_enum)
user_media = self.user_api.get_media_by_user_id(user_id, pagination)
if user_media:
return user_media
return None
def get_user_media_by_type(
self,
user_id: str,
limit: int,
offset: int,
order_by: str,
direction: str,
media_type: str
) -> dict[str, List[MediaItem]] | None:
order_by_enum = UserMediaOrderBy(order_by)
direction_enum = Direction(direction)
pagination = UserMediaPaginationParams(limit, offset, order_by_enum, direction_enum)
user_media = self.user_api.get_all_user_media(user_id, pagination)
if user_media:
filtered_media = [media for media in user_media if media.media_type.startswith(media_type)]
if filtered_media:
total_size = sum(media.media_length for media in filtered_media)
media_by_type = {
"media": filtered_media,
"total_size": total_size,
"total_count": len(filtered_media)
}
return media_by_type
else:
return None
return None
def delete_user_media(self, avatar: str):
pass