"""Initial migration Revision ID: 4a1fb28d1c5e Revises: Create Date: 2023-09-25 15:00:00.000000 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = "4a1fb28d1c5e" down_revision = None branch_labels = None depends_on = None def upgrade() -> None: # Create users table op.create_table( "users", sa.Column("id", sa.Integer(), nullable=False), sa.Column("email", sa.String(), nullable=False), sa.Column("username", sa.String(), nullable=False), sa.Column("hashed_password", sa.String(), nullable=False), sa.Column("full_name", sa.String(), nullable=True), sa.Column("is_active", sa.Boolean(), nullable=True), sa.Column("is_admin", sa.Boolean(), nullable=True), sa.Column("created_at", sa.DateTime(), nullable=True), sa.Column("updated_at", sa.DateTime(), nullable=True), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_users_email"), "users", ["email"], unique=True) op.create_index(op.f("ix_users_id"), "users", ["id"], unique=False) op.create_index(op.f("ix_users_username"), "users", ["username"], unique=True) # Create authors table op.create_table( "authors", sa.Column("id", sa.Integer(), nullable=False), sa.Column("name", sa.String(), nullable=False), sa.Column("biography", sa.Text(), nullable=True), sa.Column("birthdate", sa.DateTime(), nullable=True), sa.Column("created_at", sa.DateTime(), nullable=True), sa.Column("updated_at", sa.DateTime(), nullable=True), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_authors_id"), "authors", ["id"], unique=False) op.create_index(op.f("ix_authors_name"), "authors", ["name"], unique=False) # Create categories table op.create_table( "categories", sa.Column("id", sa.Integer(), nullable=False), sa.Column("name", sa.String(), nullable=False), sa.Column("description", sa.Text(), nullable=True), sa.Column("created_at", sa.DateTime(), nullable=True), sa.Column("updated_at", sa.DateTime(), nullable=True), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_categories_id"), "categories", ["id"], unique=False) op.create_index(op.f("ix_categories_name"), "categories", ["name"], unique=True) # Create books table op.create_table( "books", sa.Column("id", sa.Integer(), nullable=False), sa.Column("title", sa.String(), nullable=False), sa.Column("isbn", sa.String(), nullable=False), sa.Column("description", sa.Text(), nullable=True), sa.Column("price", sa.Float(), nullable=False), sa.Column("cover_image_url", sa.String(), nullable=True), sa.Column("publication_date", sa.DateTime(), nullable=True), sa.Column("publisher", sa.String(), nullable=True), sa.Column("language", sa.String(), nullable=True), sa.Column("page_count", sa.Integer(), nullable=True), sa.Column("stock_quantity", sa.Integer(), nullable=True), sa.Column("created_at", sa.DateTime(), nullable=True), sa.Column("updated_at", sa.DateTime(), nullable=True), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_books_id"), "books", ["id"], unique=False) op.create_index(op.f("ix_books_isbn"), "books", ["isbn"], unique=True) op.create_index(op.f("ix_books_title"), "books", ["title"], unique=False) # Create orders table op.create_table( "orders", sa.Column("id", sa.Integer(), nullable=False), sa.Column("user_id", sa.Integer(), nullable=False), sa.Column("total_amount", sa.Float(), nullable=False), sa.Column( "status", sa.Enum( "pending", "processing", "shipped", "delivered", "cancelled", name="orderstatus", ), nullable=True, ), sa.Column("shipping_address", sa.String(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=True), sa.Column("updated_at", sa.DateTime(), nullable=True), sa.ForeignKeyConstraint( ["user_id"], ["users.id"], ), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_orders_id"), "orders", ["id"], unique=False) # Create order_items table op.create_table( "order_items", sa.Column("id", sa.Integer(), nullable=False), sa.Column("order_id", sa.Integer(), nullable=False), sa.Column("book_id", sa.Integer(), nullable=False), sa.Column("quantity", sa.Integer(), nullable=False), sa.Column("unit_price", sa.Float(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=True), sa.Column("updated_at", sa.DateTime(), nullable=True), sa.ForeignKeyConstraint( ["book_id"], ["books.id"], ), sa.ForeignKeyConstraint( ["order_id"], ["orders.id"], ), sa.PrimaryKeyConstraint("id"), ) op.create_index(op.f("ix_order_items_id"), "order_items", ["id"], unique=False) # Create association tables op.create_table( "book_author", sa.Column("book_id", sa.Integer(), nullable=False), sa.Column("author_id", sa.Integer(), nullable=False), sa.ForeignKeyConstraint( ["author_id"], ["authors.id"], ), sa.ForeignKeyConstraint( ["book_id"], ["books.id"], ), sa.PrimaryKeyConstraint("book_id", "author_id"), ) op.create_table( "book_category", sa.Column("book_id", sa.Integer(), nullable=False), sa.Column("category_id", sa.Integer(), nullable=False), sa.ForeignKeyConstraint( ["book_id"], ["books.id"], ), sa.ForeignKeyConstraint( ["category_id"], ["categories.id"], ), sa.PrimaryKeyConstraint("book_id", "category_id"), ) def downgrade() -> None: # Drop association tables op.drop_table("book_category") op.drop_table("book_author") # Drop order_items table op.drop_index(op.f("ix_order_items_id"), table_name="order_items") op.drop_table("order_items") # Drop orders table op.drop_index(op.f("ix_orders_id"), table_name="orders") op.drop_table("orders") # Drop books table op.drop_index(op.f("ix_books_title"), table_name="books") op.drop_index(op.f("ix_books_isbn"), table_name="books") op.drop_index(op.f("ix_books_id"), table_name="books") op.drop_table("books") # Drop categories table op.drop_index(op.f("ix_categories_name"), table_name="categories") op.drop_index(op.f("ix_categories_id"), table_name="categories") op.drop_table("categories") # Drop authors table op.drop_index(op.f("ix_authors_name"), table_name="authors") op.drop_index(op.f("ix_authors_id"), table_name="authors") op.drop_table("authors") # Drop users table op.drop_index(op.f("ix_users_username"), table_name="users") op.drop_index(op.f("ix_users_id"), table_name="users") op.drop_index(op.f("ix_users_email"), table_name="users") op.drop_table("users")