+ Приведены все функции приложения в рабочий вид
+ Наведен порядок в файлах проекта + Наведен порядок в документации + Настроены скрипты установки, развертки и так далее, расширен MakeFile
This commit is contained in:
@@ -83,38 +83,127 @@ class PublicUserGroupsView(APIView):
|
||||
# 1. Ищем пользователя
|
||||
user = get_object_or_404(User, username=username)
|
||||
|
||||
# 2. Берём его группы со ссылками
|
||||
groups_qs = LinkGroup.objects.filter(owner=user).prefetch_related('links')
|
||||
# 2. Получаем настройки дизайна пользователя
|
||||
from customization.models import DesignSettings
|
||||
try:
|
||||
design_settings = DesignSettings.objects.get(user=user)
|
||||
# Заменяем Docker URL на localhost для клиента
|
||||
background_image_url = None
|
||||
if design_settings.background_image:
|
||||
background_image_url = request.build_absolute_uri(design_settings.background_image.url)
|
||||
# Заменяем различные варианты внутренних Docker URL
|
||||
background_image_url = background_image_url.replace('http://web:8000', 'http://localhost:8000')
|
||||
background_image_url = background_image_url.replace('http://links-web-1:8000', 'http://localhost:8000')
|
||||
background_image_url = background_image_url.replace('http://backend:8000', 'http://localhost:8000')
|
||||
|
||||
design_data = {
|
||||
'theme_color': design_settings.theme_color,
|
||||
'background_image': background_image_url,
|
||||
'dashboard_layout': design_settings.dashboard_layout,
|
||||
'groups_default_expanded': design_settings.groups_default_expanded,
|
||||
'show_group_icons': design_settings.show_group_icons,
|
||||
'show_link_icons': design_settings.show_link_icons,
|
||||
'dashboard_background_color': design_settings.dashboard_background_color,
|
||||
'font_family': design_settings.font_family,
|
||||
'header_text_color': getattr(design_settings, 'header_text_color', '#000000'),
|
||||
'group_text_color': getattr(design_settings, 'group_text_color', '#333333'),
|
||||
'link_text_color': getattr(design_settings, 'link_text_color', '#666666'),
|
||||
'cover_overlay_enabled': getattr(design_settings, 'cover_overlay_enabled', False),
|
||||
'cover_overlay_color': getattr(design_settings, 'cover_overlay_color', '#000000'),
|
||||
'cover_overlay_opacity': getattr(design_settings, 'cover_overlay_opacity', 0.5),
|
||||
}
|
||||
except DesignSettings.DoesNotExist:
|
||||
# Настройки по умолчанию
|
||||
design_data = {
|
||||
'theme_color': '#ffffff',
|
||||
'background_image': None,
|
||||
'dashboard_layout': 'list',
|
||||
'groups_default_expanded': True,
|
||||
'show_group_icons': True,
|
||||
'show_link_icons': True,
|
||||
'dashboard_background_color': '#f8f9fa',
|
||||
'font_family': 'sans-serif',
|
||||
}
|
||||
|
||||
# 3. Берём только публичные группы со ссылками
|
||||
groups_qs = LinkGroup.objects.filter(
|
||||
owner=user,
|
||||
is_public=True # Показываем только публичные группы
|
||||
).prefetch_related('links')
|
||||
|
||||
# Формируем URL аватара и обложки с заменой Docker URL
|
||||
avatar_url = None
|
||||
if user.avatar:
|
||||
avatar_url = request.build_absolute_uri(user.avatar.url)
|
||||
# Заменяем различные варианты внутренних Docker URL
|
||||
avatar_url = avatar_url.replace('http://web:8000', 'http://localhost:8000')
|
||||
avatar_url = avatar_url.replace('http://links-web-1:8000', 'http://localhost:8000')
|
||||
avatar_url = avatar_url.replace('http://backend:8000', 'http://localhost:8000')
|
||||
|
||||
cover_url = None
|
||||
if user.cover:
|
||||
cover_url = request.build_absolute_uri(user.cover.url)
|
||||
# Заменяем различные варианты внутренних Docker URL
|
||||
cover_url = cover_url.replace('http://web:8000', 'http://localhost:8000')
|
||||
cover_url = cover_url.replace('http://links-web-1:8000', 'http://localhost:8000')
|
||||
cover_url = cover_url.replace('http://backend:8000', 'http://localhost:8000')
|
||||
|
||||
result = {
|
||||
"username": user.username,
|
||||
"full_name": user.full_name,
|
||||
"bio": user.bio,
|
||||
"avatar": avatar_url,
|
||||
"cover": cover_url,
|
||||
"design_settings": design_data,
|
||||
"groups": []
|
||||
}
|
||||
|
||||
for grp in groups_qs:
|
||||
# icon у группы (абсолютный URL)
|
||||
# icon у группы (абсолютный URL с заменой Docker URL)
|
||||
grp_icon_url = None
|
||||
if grp.icon:
|
||||
grp_icon_url = request.build_absolute_uri(grp.icon.url)
|
||||
# Заменяем различные варианты внутренних Docker URL
|
||||
grp_icon_url = grp_icon_url.replace('http://web:8000', 'http://localhost:8000')
|
||||
grp_icon_url = grp_icon_url.replace('http://links-web-1:8000', 'http://localhost:8000')
|
||||
grp_icon_url = grp_icon_url.replace('http://backend:8000', 'http://localhost:8000')
|
||||
|
||||
# background_image у группы
|
||||
grp_bg_url = None
|
||||
if grp.background_image:
|
||||
grp_bg_url = request.build_absolute_uri(grp.background_image.url)
|
||||
# Заменяем различные варианты внутренних Docker URL
|
||||
grp_bg_url = grp_bg_url.replace('http://web:8000', 'http://localhost:8000')
|
||||
grp_bg_url = grp_bg_url.replace('http://links-web-1:8000', 'http://localhost:8000')
|
||||
grp_bg_url = grp_bg_url.replace('http://backend:8000', 'http://localhost:8000')
|
||||
|
||||
grp_data = {
|
||||
"id": grp.id,
|
||||
"name": grp.name,
|
||||
"icon": grp_icon_url,
|
||||
"description": grp.description,
|
||||
"icon_url": grp_icon_url, # Используем icon_url для консистентности с API
|
||||
"background_image": grp_bg_url,
|
||||
"header_color": grp.header_color,
|
||||
"is_favorite": grp.is_favorite,
|
||||
"links": [],
|
||||
}
|
||||
|
||||
for ln in grp.links.all():
|
||||
# icon у ссылки
|
||||
# icon у ссылки с заменой Docker URL
|
||||
ln_icon_url = None
|
||||
if ln.icon:
|
||||
ln_icon_url = request.build_absolute_uri(ln.icon.url)
|
||||
# Заменяем различные варианты внутренних Docker URL
|
||||
ln_icon_url = ln_icon_url.replace('http://web:8000', 'http://localhost:8000')
|
||||
ln_icon_url = ln_icon_url.replace('http://links-web-1:8000', 'http://localhost:8000')
|
||||
ln_icon_url = ln_icon_url.replace('http://backend:8000', 'http://localhost:8000')
|
||||
|
||||
grp_data["links"].append({
|
||||
"id": ln.id,
|
||||
"title": ln.title,
|
||||
"url": ln.url,
|
||||
"icon": ln_icon_url,
|
||||
"icon_url": ln_icon_url, # Используем icon_url для консистентности
|
||||
"description": ln.description,
|
||||
})
|
||||
|
||||
result["groups"].append(grp_data)
|
||||
|
||||
Reference in New Issue
Block a user