"""create_all_tables

Revision ID: 2c58fea0169e
Revises: 
Create Date: 2026-05-22 16:33:37.253990

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '2c58fea0169e'
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('datasets',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('filename', sa.String(length=255), nullable=False),
    sa.Column('filepath', sa.String(length=500), nullable=False),
    sa.Column('type', sa.String(length=50), nullable=True),
    sa.Column('rows', sa.Integer(), nullable=True),
    sa.Column('columns', sa.Integer(), nullable=True),
    sa.Column('uploaded_at', sa.DateTime(), nullable=True),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('jurusan',
    sa.Column('Id_Jurusan', sa.Integer(), nullable=False),
    sa.Column('nama_jurusan', sa.String(length=100), nullable=False),
    sa.Column('NIP_kaprodi', sa.String(length=20), nullable=True),
    sa.PrimaryKeyConstraint('Id_Jurusan')
    )
    op.create_table('models',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('type', sa.Enum('stress', 'motivasi'), nullable=False),
    sa.Column('algorithm', sa.String(length=50), nullable=False),
    sa.Column('version', sa.String(length=20), nullable=False),
    sa.Column('accuracy', sa.Float(), nullable=True),
    sa.Column('precision_score', sa.Float(), nullable=True),
    sa.Column('recall_score', sa.Float(), nullable=True),
    sa.Column('f1_score', sa.Float(), nullable=True),
    sa.Column('file_path', sa.String(length=255), nullable=False),
    sa.Column('is_active', sa.Boolean(), nullable=True),
    sa.Column('data_count', sa.Integer(), nullable=True),
    sa.Column('qcut_thresholds', sa.Text(), nullable=True),
    sa.Column('artifact_metadata', sa.Text(), nullable=True),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('users',
    sa.Column('Id_User', sa.Integer(), nullable=False),
    sa.Column('username', sa.String(length=50), nullable=False),
    sa.Column('password', sa.String(length=255), nullable=False),
    sa.Column('role', sa.Enum('admin', 'dosen', 'mahasiswa'), nullable=False),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.PrimaryKeyConstraint('Id_User'),
    sa.UniqueConstraint('username')
    )
    op.create_table('dosen',
    sa.Column('NIP', sa.String(length=20), nullable=False),
    sa.Column('nama_dosen', sa.String(length=100), nullable=False),
    sa.Column('jabatan', sa.String(length=100), nullable=True),
    sa.Column('Id_User', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['Id_User'], ['users.Id_User'], ),
    sa.PrimaryKeyConstraint('NIP'),
    sa.UniqueConstraint('Id_User')
    )
    op.create_table('training_history',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('model_id', sa.Integer(), nullable=True),
    sa.Column('data_size', sa.Integer(), nullable=True),
    sa.Column('duration', sa.Float(), nullable=True),
    sa.Column('status', sa.Enum('queued', 'running', 'completed', 'failed'), nullable=False),
    sa.Column('error_message', sa.Text(), nullable=True),
    sa.Column('metrics', sa.Text(), nullable=True),
    sa.Column('progress_message', sa.Text(), nullable=True),
    sa.Column('dataset_filename', sa.String(length=255), nullable=True),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.Column('task_id', sa.String(length=100), nullable=True),
    sa.ForeignKeyConstraint(['model_id'], ['models.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('mahasiswa',
    sa.Column('NIM', sa.String(length=20), nullable=False),
    sa.Column('nama_mahasiswa', sa.String(length=100), nullable=False),
    sa.Column('kelas', sa.String(length=20), nullable=True),
    sa.Column('id_jurusan', sa.Integer(), nullable=True),
    sa.Column('IPK', sa.Numeric(precision=3, scale=2), nullable=True),
    sa.Column('NIP_doswal', sa.String(length=20), nullable=True),
    sa.Column('Id_User', sa.Integer(), nullable=False),
    sa.Column('foto_profil', sa.String(length=255), nullable=True),
    sa.Column('angkatan', sa.String(length=10), nullable=True),
    sa.Column('gender', sa.String(length=10), nullable=True),
    sa.Column('usia', sa.Integer(), nullable=True),
    sa.Column('freq_olahraga', sa.String(length=20), nullable=True),
    sa.Column('durasi_tidur', sa.String(length=20), nullable=True),
    sa.ForeignKeyConstraint(['Id_User'], ['users.Id_User'], ),
    sa.ForeignKeyConstraint(['NIP_doswal'], ['dosen.NIP'], ),
    sa.ForeignKeyConstraint(['id_jurusan'], ['jurusan.Id_Jurusan'], ),
    sa.PrimaryKeyConstraint('NIM'),
    sa.UniqueConstraint('Id_User')
    )
    op.create_table('catatan_konseling',
    sa.Column('Id_catatan', sa.Integer(), nullable=False),
    sa.Column('NIM', sa.String(length=20), nullable=False),
    sa.Column('NIP', sa.String(length=20), nullable=False),
    sa.Column('isi_catatan', sa.Text(), nullable=False),
    sa.Column('tanggal_catat', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['NIM'], ['mahasiswa.NIM'], ),
    sa.ForeignKeyConstraint(['NIP'], ['dosen.NIP'], ),
    sa.PrimaryKeyConstraint('Id_catatan')
    )
    op.create_table('diary_entries',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('nim', sa.String(length=20), nullable=False),
    sa.Column('date', sa.Date(), nullable=False),
    sa.Column('title', sa.String(length=255), nullable=True),
    sa.Column('content', sa.Text(), nullable=False),
    sa.Column('created_at', sa.TIMESTAMP(), nullable=True),
    sa.Column('updated_at', sa.TIMESTAMP(), nullable=True),
    sa.ForeignKeyConstraint(['nim'], ['mahasiswa.NIM'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('mood_entries',
    sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
    sa.Column('nim', sa.String(length=20), nullable=False),
    sa.Column('date', sa.Date(), nullable=False),
    sa.Column('mood_value', sa.Integer(), nullable=False),
    sa.Column('created_at', sa.TIMESTAMP(), nullable=True),
    sa.Column('updated_at', sa.TIMESTAMP(), nullable=True),
    sa.ForeignKeyConstraint(['nim'], ['mahasiswa.NIM'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('riwayat_skrining',
    sa.Column('Id_skrining', sa.Integer(), nullable=False),
    sa.Column('NIM', sa.String(length=20), nullable=False),
    sa.Column('tanggal_skrining', sa.DateTime(), nullable=True),
    sa.Column('input_jawaban', sa.Text(), nullable=True),
    sa.Column('tingkat_stres', sa.Enum('Rendah', 'Sedang', 'Tinggi'), nullable=True),
    sa.Column('tingkat_motivasi', sa.Enum('Rendah', 'Sedang', 'Tinggi'), nullable=True),
    sa.Column('saran', sa.Text(), nullable=True),
    sa.Column('score_stress', sa.Integer(), nullable=True),
    sa.Column('score_sdi', sa.Float(), nullable=True),
    sa.ForeignKeyConstraint(['NIM'], ['mahasiswa.NIM'], ),
    sa.PrimaryKeyConstraint('Id_skrining')
    )
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('riwayat_skrining')
    op.drop_table('mood_entries')
    op.drop_table('diary_entries')
    op.drop_table('catatan_konseling')
    op.drop_table('mahasiswa')
    op.drop_table('training_history')
    op.drop_table('dosen')
    op.drop_table('users')
    op.drop_table('models')
    op.drop_table('jurusan')
    op.drop_table('datasets')
    # ### end Alembic commands ###
