diff --git a/TODO.md b/TODO.md index b903698..284fcb9 100644 --- a/TODO.md +++ b/TODO.md @@ -18,13 +18,35 @@ - Мыло - Пароль - Айди приглашения - - Роли (админ, модер, участник) и права доступа + - Роли + - Новичок + - Может оценивать посты, но не более n в день + - Может создавать посты, но не более n в день + - Может удалять свои посты + - Может устанавливать себе аватарку + - Проверенный + - Нет лимитов на оценку постов + - Нет лимитов на создание постов + - Может редактировать свои посты + - Может оставлять комментарии + - Модератор + - Может банить проверенных и новичков + - Может удалять чужие посты + - Может устанавливать блокировку редактирования поста + - Может создавать инвайты + - Администратор + - Доступ к детальной стате, управлению БД и БКК + - Может банить кого угодно + - Может удалять чьи угодно аккаунты + - Может редактировать чужие посты - Аватарки - Бан - Полное удаление - Удаление всех постов - Статистика по аккаунту - Статистика по всем аккаунтам + - Приглашения + - Регистрация по приглашению автоматически даёт роль "проверенный" - Пост с картинкой - Рекодирование пикчи в низкое разрешение для превью - Описание diff --git a/docs/DB.md b/docs/DB.md index 911b3f0..976e80a 100644 --- a/docs/DB.md +++ b/docs/DB.md @@ -22,17 +22,51 @@ mysql -u e949 -p ```mysql USE e949; +CREATE TABLE users ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier of user', + created_at TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'When account was created', + login VARCHAR(255) NOT NULL COMMENT 'User login', + email VARCHAR(255) NULL COMMENT 'User e-mail address', + password_hash BINARY(32) NOT NULL COMMENT 'User password hash', + salt VARCHAR(8) NOT NULL COMMENT 'User salt, used for password hash', + avatar_path VARCHAR(255) NULL COMMENT 'Path or URL to avatar picture', + role ENUM('newbie', 'verified', 'mod', 'admin') NOT NULL COMMENT 'Assigned role', + banned BOOL NOT NULL DEFAULT FALSE COMMENT 'If user is banned', + invite_id CHAR(32) NULL COMMENT 'Invite ID used for account registration' +); CREATE TABLE posts ( - id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier of post', - author_id BIGINT UNSIGNED NOT NULL COMMENT 'Identifier of post author', - comment_section_id BIGINT UNSIGNED NULL COMMENT 'Identifier of post comment section', - posted_at TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'When post was published', + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier of post', + author_id INT UNSIGNED NOT NULL COMMENT 'Identifier of post author', + comment_section_id INT UNSIGNED NULL COMMENT 'Identifier of post comment section', + created_at TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'When post was published', tags VARCHAR(2048) NOT NULL COMMENT 'Comma-delimited list of post tags', title VARCHAR(8192) NULL COMMENT 'Caption for the post', votes_up INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Amount of positive reactions', votes_down INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Amount of negative reactions', - views BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Amount of post views', - pic_path VARCHAR(256) NOT NULL COMMENT 'Path or URL of picture', - preview_path VARCHAR(256) NULL COMMENT 'Path or URL of preview version of picture' - ); + views INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Amount of post views', + pic_path VARCHAR(255) NOT NULL COMMENT 'Path or URL of picture', + preview_path VARCHAR(255) NULL COMMENT 'Path or URL of preview version of picture' + comments_enabled BOOL NOT NULL COMMENT 'If comments are enabled', + edit_lock BOOL NOT NULL DEFAULT FALSE COMMENT 'If redaction of post is locked for anyone, except mods and admins' +); +CREATE TABLE comments ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier of comment', + author_id INT UNSIGNED NOT NULL COMMENT 'Identifier of comment author', + comment_section_id INT UNSIGNED NOT NULL COMMENT 'Identifier of comment section to which the comment belongs', + created_at TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'When comment was published', + contents VARCHAR(8192) NOT NULL COMMENT 'Text of comment', + needs_check BOOL NOT NULL DEFAULT FALSE COMMENT 'If comment needs approval of moderation' +); +CREATE TABLE actions ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier of action', + author_id INT UNSIGNED NULL COMMENT 'ID of user, who performed action', + created_at TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'When action was performed', + category ENUM('acc_mod', 'publ_mod', 'post', 'comment', 'admin', 'other') NOT NULL COMMENT 'Category of performed action: accounts/publications moderation, etc.', + description VARCHAR(8192) NOT NULL COMMENT 'Description of action' +); +CREATE TABLE invites ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier of invite', + author_id INT UNSIGNED NULL COMMENT 'ID of user, who created invite', + uses_last SMALLINT UNSIGNED NOT NULL COMMENT 'Remaining uses of invite' +); ``` \ No newline at end of file