def get_all_messages( user_id: int, locale: str, page: int, page_size=10, sort_by=None, sort_direction=None, message_type=None, from_username=None, project=None, task_id=None, ): """ Get all messages for user """ sort_column = Message.__table__.columns.get(sort_by) if sort_column is None: sort_column = Message.date sort_column = ( sort_column.asc() if sort_direction.lower() == "asc" else sort_column.desc() ) query = Message.query if project is not None: query = query.filter(Message.project_id == project) if task_id is not None: query = query.filter(Message.task_id == task_id) if message_type: message_type_filters = map(int, message_type.split(",")) query = query.filter(Message.message_type.in_(message_type_filters)) if from_username is not None: query = query.join(Message.from_user).filter( User.username.ilike(from_username + "%") ) results = ( query.filter(Message.to_user_id == user_id) .order_by(sort_column) .paginate(page, page_size, True) ) # if results.total == 0: # raise NotFound() messages_dto = MessagesDTO() for item in results.items: message_dto = None if isinstance(item, tuple): message_dto = item[0].as_dto() message_dto.project_title = item[1].name else: message_dto = item.as_dto() if item.project_id is not None: message_dto.project_title = item.project.get_project_title(locale) messages_dto.user_messages.append(message_dto) messages_dto.pagination = Pagination(results) return messages_dto
def get_all_messages(user_id: int) -> MessagesDTO: """ Gets all messages to the user """ user_messages = Message.query.filter(Message.to_user_id == user_id).all() if len(user_messages) == 0: raise NotFound() messages_dto = MessagesDTO() for message in user_messages: messages_dto.user_messages.append(message.as_dto()) return messages_dto