Skip to content

Latest commit

 

History

History
109 lines (85 loc) · 5.4 KB

laba.md

File metadata and controls

109 lines (85 loc) · 5.4 KB

Лабораторная работа

Реализовать вебсайт с бекендом и фронтендом. Вебсайт реализует функциональность форума (живой пример https://www.phpbbguru.net/community/).

Результат закоммитить на github.com и прислать ссылку.

Функциональные требования

  • Гость может зарегистрироваться и логиниться. Формы логина и регистрации валидируются (пустое нельзя отправить), минимальный размер логина и пароля 6 символов. После логина пользователь попадает на главную страницу.

  • На главной странице отображается список тем (новые сверху). У каждой темы отображается логин автора и дата создания. Отображается кнопка "Создать тему", ведущая на экран создания темы. Отображается форма поиска, при нажатии на кнопку [🔎] отображается отфильтрованный список.

  • Создание новой темы. Пользователь заполняет тему (макс. 255 символов) и текст (1кб). Поля обязательные. После успешного создания пользователь попадает на главную страницу.

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

Бекенд

  • Бекенд может быть написан на любом удобном языке и фреймворке (я предпочитаю Node.js + Express.js).
  • Бекенд должен использовать БД. Выбор базы обуславливается тем, что можно запустить на компе в колледже. Удалось запустить:
  • Бекенд должен быть написан в формате REST API.
  • Должны быть следующие роуты:
    • Регистрация.
    • Аутентификация.
    • Темы.
    • Сообщения.
Структура базы
CREATE TABLE IF NOT EXISTS users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  login TEXT NOT NULL,
  password TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS tokens (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  userId INTEGER NOT NULL,
  token TEXT NOT NULL,
  FOREIGN KEY(userId) REFERENCES users(id)
);

CREATE TABLE IF NOT EXISTS topics (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  theme TEXT NOT NULL,
  authorId INTEGER NOT NULL,
  createdAt INTEGER NOT NULL,
  FOREIGN KEY(authorId) REFERENCES users(id)
);

CREATE TABLE IF NOT EXISTS messages (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  body TEXT NOT NULL,
  topicId INTEGER NOT NULL,
  authorId INTEGER NOT NULL,
  createdAt INTEGER NOT NULL,
  FOREIGN KEY(authorId) REFERENCES users(id),
  FOREIGN KEY(topicId) REFERENCES topics(id)
);    

image

Альтернативные варианты тем:

  • Чат с логином/регистрацией и комнатами. Можно использовать AES-шифрование.
  • Сервис хранения анонимных записок с самоуничтожением при просмотре.
  • Сайт с шутками по типу bash.org.ru. На главной странице отображаются самые новые шутки (чем ниже, тем старше).

Сверху отображается текущий логин пользователя (если он залогинен).

Шутке можно поставить оценку [+] или [-], при этом её общая оценка изменяется. Один пользователь может проголосовать 1 раз.

На этой же странице можно отправить новую шутку (форма внизу, пустое отправить нелья). При успешной отправке новая шутка появляется сверху, она же самая новая.

  • Своя тема.

Альтернативную тему можно выбрать после согласования. Основные требования:

  • Бекенд и фронтенд.
  • Должны быть реализованы логин/регистрация.
  • На бекенде хранение в базе/файле (что проще).