Строим блог на Areto фреймворк

Модель комментария

Класс Comment определяет модель комментария к статье. Пользователи могут комментировать без авторизации. Но только после проверки модератора комментарий будет опубликован.

Список комментариев к статье

Каждый комментарий имеет несколько состояний:

  • STATUS_PENDING - комментарий ожидает рассмотрения модератором.
  • STATUS_APPROVED - комментарий одобрен.
  • STATUS_REJECTED - комментарий отклонен.

Свойство BEHAVIORS формирует поведения, которые будут назначены модели класса Comment. Поведение определяет совокупность обработчиков различных событий целевой модели и сопутствующий функционал. В данном случае поведение timestamp устанавливает метки времени в атрибуты createdAt, updatedAt во время создания и изменения комментария.

models/Comment.js

'use strict';
const Base = require('areto/db/ActiveRecord');
module.exports = class Comment extends Base {

  static getConstants () {
    return {
      TABLE: 'comment',
      STORED_ATTRS: ['articleId', 'name', 'email', 'ip', 'content', 'status', 'createdAt', 'updatedAt'],
      RULES: [
        [['name','email','content'], 'required'],
        ['name', 'string', {min: 2, max: 32}],
        ['email', 'email'],
        ['content', 'string', {min: 3, max: 512}]
      ],
      BEHAVIORS: {timestamp: require('areto/behaviors/Timestamp')},
      STATUS_PENDING: 'pending',
      STATUS_APPROVED: 'approved',
      STATUS_REJECTED: 'rejected'
    };
  }

  // place methods here
};
module.exports.init(module);
Форма комментирования статьи

По умолчанию комментарий создается в статусе «Ожидает рассмотрения модератором».

models/Comment.js

...
init () {
  super.init();
  this.set('status', this.STATUS_PENDING);
}
...

В качестве заголовка модели установите сам текст комментария.

models/Comment.js

...
getTitle () {
  return this.get('content');
}
...

Методы для проверки статуса комментария.

models/Comment.js

...
isPending () {
  return this.get('status') === this.STATUS_PENDING;
}

isApproved () {
  return this.get('status') === this.STATUS_APPROVED;
}

isRejected () {
  return this.get('status') === this.STATUS_REJECTED;
}
...