Как реализовать систему комментариев php и vue3?

Что есть сейчас:
Эндпоинт для комментариев, который отдает по n (стандартно 10) комментариев, отвечающих условиям запроса, общее число число комментариев и две ссылки для пагинации на следующие и предыдущие n комментариев.
Комментарии связанны друг с другом через nulluble ключ parentId. Каждый комментарий содержит поле, указывающее на количество всех потомков, независимо от уровня вложенности и коллекцию самих потомков, которые подгружаются по необходимости (код коллекции ниже).
На фронте я получаю первые n корневых комментариев (где parentId null) и по нажатию на кнопку подгружаю следующие.
export class Collection<T> extends ArrayCollection<T>
{
    protected query: Query<T>|null;

    protected countResults: Number|null;
    public isLoading: boolean;

    constructor(query: Query<T> = null) {
        super();
        this.query = query
        this.countResults = null
        this.isLoading = false
    }

    async load(): Promise<void> {
        if (this.isLoading) return ;
        this.isLoading = true

        if (this.hasMore) {
            const result = await this.query.execute()

            if (result) {
                this.query = result.next
                this.countResults = result.count
                this.push(... result.results)
            } else {
                this.query = null
            }
        }

        this.isLoading = false;
    }

    get hasMore() {
        return this.query !== null
    }

    get count(): Number
    {
        if (!this.countResults) return 0
        return this.countResults
    }

    async loadAll(): Promise<void> {
        while (this.hasMore) await this.load()
    }
}

При добавлении нового комментария он прилетает с сервера по вебсокетам обратно во фронт и добавляется в соответствующую коллекцию (зависит от уровня вложенности). Но при загрузке всех комментариев из одной коллекции это ведет к удвоению новых комментариев на фронте, т.к. он уже прилетел по сокетам.
Плюс не знаю как лучше подгружать дочерние комментарии грузить коллекцию по уровням или рекурсией тянуть все дочерние комментарии ( и как тогда быть с пагинацией и рендорингом).
  • Вопрос задан
  • 824 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы