94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
"""
|
||
Конфигурация уведомлений для модуля Feed.
|
||
|
||
Содержит:
|
||
- NotificationVerbs - глаголы для уведомлений
|
||
- MessageTemplates - шаблоны сообщений
|
||
- ActionURLs - URL-адреса действий
|
||
"""
|
||
|
||
|
||
class NotificationVerbs:
|
||
"""Глаголы (verbs) для уведомлений feed."""
|
||
|
||
NEW_POST = 'feed_new_post'
|
||
POST_COMMENT = 'feed_post_comment'
|
||
POST_REACTION = 'feed_post_reaction'
|
||
|
||
|
||
class MessageTemplates:
|
||
"""Шаблоны сообщений для уведомлений feed."""
|
||
|
||
@staticmethod
|
||
def new_post_company() -> str:
|
||
"""Шаблон для новости компании."""
|
||
return 'Новая публикация компании'
|
||
|
||
@staticmethod
|
||
def new_post_department(department_name: str) -> str:
|
||
"""Шаблон для новости отдела."""
|
||
return f'Новая публикация отдела {department_name}'
|
||
|
||
@staticmethod
|
||
def new_post_employee(author_name: str) -> str:
|
||
"""Шаблон для личной публикации."""
|
||
return f'Новая публикация от {author_name}'
|
||
|
||
@staticmethod
|
||
def comment(author_name: str, comment_text: str) -> str:
|
||
"""Шаблон для комментария к публикации."""
|
||
return f'{author_name} прокомментировал: {comment_text}'
|
||
|
||
@staticmethod
|
||
def comment_title() -> str:
|
||
"""Заголовок для уведомления о комментарии."""
|
||
return 'Новый комментарий к вашей публикации'
|
||
|
||
@staticmethod
|
||
def reaction(user_name: str, post_title: str) -> str:
|
||
"""Шаблон для реакции на публикацию."""
|
||
return f'{user_name} понравилась публикация "{post_title}"'
|
||
|
||
@staticmethod
|
||
def reaction_title() -> str:
|
||
"""Заголовок для уведомления о реакции."""
|
||
return 'Ваша публикация понравилась'
|
||
|
||
|
||
class ActionURLs:
|
||
"""URL-адреса для действий с публикациями."""
|
||
|
||
# Пока все действия ведут на главную страницу
|
||
# TODO: реализовать прямые ссылки на публикации
|
||
FEED_HOME = '/'
|
||
|
||
@staticmethod
|
||
def post_detail(post_id: int) -> str:
|
||
"""
|
||
Возвращает URL-адрес публикации.
|
||
|
||
TODO: реализовать отдельную страницу публикации
|
||
"""
|
||
return f'/?post={post_id}' # Временное решение
|
||
|
||
|
||
def truncate_text(text: str, max_length: int = 100) -> str:
|
||
"""
|
||
Обрезает текст до указанной длины.
|
||
|
||
Args:
|
||
text: Исходный текст
|
||
max_length: Максимальная длина (по умолчанию 100)
|
||
|
||
Returns:
|
||
Обрезанный текст с многоточием если нужно
|
||
"""
|
||
if not text:
|
||
return ''
|
||
|
||
text = text.strip()
|
||
if len(text) <= max_length:
|
||
return text
|
||
|
||
return text[:max_length - 3] + '...'
|