DROP TABLE IF EXISTS articles_tags;
DROP TABLE IF EXISTS articles_contributors;
DROP TABLE IF EXISTS articles_authors;
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),
    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),
    summary TEXT NOT NULL,
    published BOOL NOT NULL,
    rejected BOOL NOT NULL,
    creator_id INT NOT NULL,
    issue_id INT NOT NULL,
    edited_id INT NOT NULL,
    clicks INT NOT NULL,
    is_in_issue BOOL NOT NULL,
    auto_generated BOOL NOT NULL,
    uuid VARCHAR(36) NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (creator_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_authors (
    article_id INT NOT NULL,
    author_id INT NOT NULL,
    PRIMARY KEY (article_id, author_id),
    FOREIGN KEY (article_id) REFERENCES articles (id),
    FOREIGN KEY (author_id) REFERENCES users (id)
);

CREATE TABLE articles_contributors (
    article_id INT NOT NULL,
    contributor_id INT NOT NULL,
    PRIMARY KEY (article_id, contributor_id),
    FOREIGN KEY (article_id) REFERENCES articles (id),
    FOREIGN KEY (contributor_id) REFERENCES users (id)
);

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