DROP TABLE IF EXISTS articles_tags;
DROP TABLE IF EXISTS tags;
DROP TABLE IF EXISTS articles;
DROP TABLE IF EXISTS issues;
DROP TABLE IF EXISTS users;

CREATE TABLE users (
    id          INT         AUTO_INCREMENT,
    username    VARCHAR(15) NOT NULL UNIQUE,
    password    VARCHAR(60) NOT NULL,
    first_name  VARCHAR(50) NOT NULL,
    last_name   VARCHAR(50) NOT NULL,
    role        INT         NOT NULL,
    PRIMARY KEY(id)
);

CREATE TABLE issues (
    id          INT     AUTO_INCREMENT,
    published   BOOL    NOT NULL,
    PRIMARY KEY(id)
);

CREATE TABLE articles (
    id          INT             AUTO_INCREMENT,
    title       VARCHAR(255)    NOT NULL,
    created     TIMESTAMP       DEFAULT CURRENT_TIMESTAMP,
    description TEXT            NOT NULL,
    content     TEXT            NOT NULL,
    published   BOOL            NOT NULL,
    rejected    BOOL            NOT NULL,
    author_id   INT             NOT NULL,
    issue_id    INT             NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY(author_id) REFERENCES users(id),
    FOREIGN KEY(issue_id) REFERENCES issues(id)
);

CREATE TABLE tags (
    id      INT         AUTO_INCREMENT,
    name    VARCHAR(50) NOT NULL UNIQUE,
    PRIMARY KEY(id)
);

CREATE TABLE articles_tags (
    article_id  INT,
    tag_id      INT,
    PRIMARY KEY(article_id, tag_id),
    FOREIGN KEY(article_id) REFERENCES articles(id),
    FOREIGN KEY(tag_id) REFERENCES tags(id)
);