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(255)    NOT NULL UNIQUE,
    password            VARCHAR(60)     NOT NULL,
    first_name          VARCHAR(255)    NOT NULL,
    last_name           VARCHAR(255)    NOT NULL,
    email               VARCHAR(255)    NOT NULL,
    -- profile_pic_link    VARCHAR(255)    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,
    banner_link     VARCHAR(255)    NOT NULL,
    summary         TEXT            NOT NULL,
    content_link    VARCHAR(255)    NOT NULL,
    published       BOOL            NOT NULL,
    rejected        BOOL            NOT NULL,
    author_id       INT             NOT NULL,
    issue_id        INT             NOT NULL,
    edited_id       INT,
    is_in_issue     BOOL            NOT NULL,
    auto_generated  BOOL            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)
);