瀏覽代碼

feat(sqlalchemy): rebase

Jonathan Rohde 10 月之前
父節點
當前提交
642c352c69

+ 0 - 254
backend/apps/webui/internal/migrations/001_initial_schema.py

@@ -1,254 +0,0 @@
-"""Peewee migrations -- 001_initial_schema.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    # We perform different migrations for SQLite and other databases
-    # This is because SQLite is very loose with enforcing its schema, and trying to migrate other databases like SQLite
-    # will require per-database SQL queries.
-    # Instead, we assume that because external DB support was added at a later date, it is safe to assume a newer base
-    # schema instead of trying to migrate from an older schema.
-    if isinstance(database, pw.SqliteDatabase):
-        migrate_sqlite(migrator, database, fake=fake)
-    else:
-        migrate_external(migrator, database, fake=fake)
-
-
-def migrate_sqlite(migrator: Migrator, database: pw.Database, *, fake=False):
-    @migrator.create_model
-    class Auth(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        email = pw.CharField(max_length=255)
-        password = pw.CharField(max_length=255)
-        active = pw.BooleanField()
-
-        class Meta:
-            table_name = "auth"
-
-    @migrator.create_model
-    class Chat(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        user_id = pw.CharField(max_length=255)
-        title = pw.CharField()
-        chat = pw.TextField()
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "chat"
-
-    @migrator.create_model
-    class ChatIdTag(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        tag_name = pw.CharField(max_length=255)
-        chat_id = pw.CharField(max_length=255)
-        user_id = pw.CharField(max_length=255)
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "chatidtag"
-
-    @migrator.create_model
-    class Document(pw.Model):
-        id = pw.AutoField()
-        collection_name = pw.CharField(max_length=255, unique=True)
-        name = pw.CharField(max_length=255, unique=True)
-        title = pw.CharField()
-        filename = pw.CharField()
-        content = pw.TextField(null=True)
-        user_id = pw.CharField(max_length=255)
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "document"
-
-    @migrator.create_model
-    class Modelfile(pw.Model):
-        id = pw.AutoField()
-        tag_name = pw.CharField(max_length=255, unique=True)
-        user_id = pw.CharField(max_length=255)
-        modelfile = pw.TextField()
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "modelfile"
-
-    @migrator.create_model
-    class Prompt(pw.Model):
-        id = pw.AutoField()
-        command = pw.CharField(max_length=255, unique=True)
-        user_id = pw.CharField(max_length=255)
-        title = pw.CharField()
-        content = pw.TextField()
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "prompt"
-
-    @migrator.create_model
-    class Tag(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        name = pw.CharField(max_length=255)
-        user_id = pw.CharField(max_length=255)
-        data = pw.TextField(null=True)
-
-        class Meta:
-            table_name = "tag"
-
-    @migrator.create_model
-    class User(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        name = pw.CharField(max_length=255)
-        email = pw.CharField(max_length=255)
-        role = pw.CharField(max_length=255)
-        profile_image_url = pw.CharField(max_length=255)
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "user"
-
-
-def migrate_external(migrator: Migrator, database: pw.Database, *, fake=False):
-    @migrator.create_model
-    class Auth(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        email = pw.CharField(max_length=255)
-        password = pw.TextField()
-        active = pw.BooleanField()
-
-        class Meta:
-            table_name = "auth"
-
-    @migrator.create_model
-    class Chat(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        user_id = pw.CharField(max_length=255)
-        title = pw.TextField()
-        chat = pw.TextField()
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "chat"
-
-    @migrator.create_model
-    class ChatIdTag(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        tag_name = pw.CharField(max_length=255)
-        chat_id = pw.CharField(max_length=255)
-        user_id = pw.CharField(max_length=255)
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "chatidtag"
-
-    @migrator.create_model
-    class Document(pw.Model):
-        id = pw.AutoField()
-        collection_name = pw.CharField(max_length=255, unique=True)
-        name = pw.CharField(max_length=255, unique=True)
-        title = pw.TextField()
-        filename = pw.TextField()
-        content = pw.TextField(null=True)
-        user_id = pw.CharField(max_length=255)
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "document"
-
-    @migrator.create_model
-    class Modelfile(pw.Model):
-        id = pw.AutoField()
-        tag_name = pw.CharField(max_length=255, unique=True)
-        user_id = pw.CharField(max_length=255)
-        modelfile = pw.TextField()
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "modelfile"
-
-    @migrator.create_model
-    class Prompt(pw.Model):
-        id = pw.AutoField()
-        command = pw.CharField(max_length=255, unique=True)
-        user_id = pw.CharField(max_length=255)
-        title = pw.TextField()
-        content = pw.TextField()
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "prompt"
-
-    @migrator.create_model
-    class Tag(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        name = pw.CharField(max_length=255)
-        user_id = pw.CharField(max_length=255)
-        data = pw.TextField(null=True)
-
-        class Meta:
-            table_name = "tag"
-
-    @migrator.create_model
-    class User(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        name = pw.CharField(max_length=255)
-        email = pw.CharField(max_length=255)
-        role = pw.CharField(max_length=255)
-        profile_image_url = pw.TextField()
-        timestamp = pw.BigIntegerField()
-
-        class Meta:
-            table_name = "user"
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_model("user")
-
-    migrator.remove_model("tag")
-
-    migrator.remove_model("prompt")
-
-    migrator.remove_model("modelfile")
-
-    migrator.remove_model("document")
-
-    migrator.remove_model("chatidtag")
-
-    migrator.remove_model("chat")
-
-    migrator.remove_model("auth")

+ 0 - 48
backend/apps/webui/internal/migrations/002_add_local_sharing.py

@@ -1,48 +0,0 @@
-"""Peewee migrations -- 002_add_local_sharing.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    migrator.add_fields(
-        "chat", share_id=pw.CharField(max_length=255, null=True, unique=True)
-    )
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_fields("chat", "share_id")

+ 0 - 48
backend/apps/webui/internal/migrations/003_add_auth_api_key.py

@@ -1,48 +0,0 @@
-"""Peewee migrations -- 002_add_local_sharing.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    migrator.add_fields(
-        "user", api_key=pw.CharField(max_length=255, null=True, unique=True)
-    )
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_fields("user", "api_key")

+ 0 - 46
backend/apps/webui/internal/migrations/004_add_archived.py

@@ -1,46 +0,0 @@
-"""Peewee migrations -- 002_add_local_sharing.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    migrator.add_fields("chat", archived=pw.BooleanField(default=False))
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_fields("chat", "archived")

+ 0 - 130
backend/apps/webui/internal/migrations/005_add_updated_at.py

@@ -1,130 +0,0 @@
-"""Peewee migrations -- 002_add_local_sharing.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    if isinstance(database, pw.SqliteDatabase):
-        migrate_sqlite(migrator, database, fake=fake)
-    else:
-        migrate_external(migrator, database, fake=fake)
-
-
-def migrate_sqlite(migrator: Migrator, database: pw.Database, *, fake=False):
-    # Adding fields created_at and updated_at to the 'chat' table
-    migrator.add_fields(
-        "chat",
-        created_at=pw.DateTimeField(null=True),  # Allow null for transition
-        updated_at=pw.DateTimeField(null=True),  # Allow null for transition
-    )
-
-    # Populate the new fields from an existing 'timestamp' field
-    migrator.sql(
-        "UPDATE chat SET created_at = timestamp, updated_at = timestamp WHERE timestamp IS NOT NULL"
-    )
-
-    # Now that the data has been copied, remove the original 'timestamp' field
-    migrator.remove_fields("chat", "timestamp")
-
-    # Update the fields to be not null now that they are populated
-    migrator.change_fields(
-        "chat",
-        created_at=pw.DateTimeField(null=False),
-        updated_at=pw.DateTimeField(null=False),
-    )
-
-
-def migrate_external(migrator: Migrator, database: pw.Database, *, fake=False):
-    # Adding fields created_at and updated_at to the 'chat' table
-    migrator.add_fields(
-        "chat",
-        created_at=pw.BigIntegerField(null=True),  # Allow null for transition
-        updated_at=pw.BigIntegerField(null=True),  # Allow null for transition
-    )
-
-    # Populate the new fields from an existing 'timestamp' field
-    migrator.sql(
-        "UPDATE chat SET created_at = timestamp, updated_at = timestamp WHERE timestamp IS NOT NULL"
-    )
-
-    # Now that the data has been copied, remove the original 'timestamp' field
-    migrator.remove_fields("chat", "timestamp")
-
-    # Update the fields to be not null now that they are populated
-    migrator.change_fields(
-        "chat",
-        created_at=pw.BigIntegerField(null=False),
-        updated_at=pw.BigIntegerField(null=False),
-    )
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    if isinstance(database, pw.SqliteDatabase):
-        rollback_sqlite(migrator, database, fake=fake)
-    else:
-        rollback_external(migrator, database, fake=fake)
-
-
-def rollback_sqlite(migrator: Migrator, database: pw.Database, *, fake=False):
-    # Recreate the timestamp field initially allowing null values for safe transition
-    migrator.add_fields("chat", timestamp=pw.DateTimeField(null=True))
-
-    # Copy the earliest created_at date back into the new timestamp field
-    # This assumes created_at was originally a copy of timestamp
-    migrator.sql("UPDATE chat SET timestamp = created_at")
-
-    # Remove the created_at and updated_at fields
-    migrator.remove_fields("chat", "created_at", "updated_at")
-
-    # Finally, alter the timestamp field to not allow nulls if that was the original setting
-    migrator.change_fields("chat", timestamp=pw.DateTimeField(null=False))
-
-
-def rollback_external(migrator: Migrator, database: pw.Database, *, fake=False):
-    # Recreate the timestamp field initially allowing null values for safe transition
-    migrator.add_fields("chat", timestamp=pw.BigIntegerField(null=True))
-
-    # Copy the earliest created_at date back into the new timestamp field
-    # This assumes created_at was originally a copy of timestamp
-    migrator.sql("UPDATE chat SET timestamp = created_at")
-
-    # Remove the created_at and updated_at fields
-    migrator.remove_fields("chat", "created_at", "updated_at")
-
-    # Finally, alter the timestamp field to not allow nulls if that was the original setting
-    migrator.change_fields("chat", timestamp=pw.BigIntegerField(null=False))

+ 0 - 130
backend/apps/webui/internal/migrations/006_migrate_timestamps_and_charfields.py

@@ -1,130 +0,0 @@
-"""Peewee migrations -- 006_migrate_timestamps_and_charfields.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    # Alter the tables with timestamps
-    migrator.change_fields(
-        "chatidtag",
-        timestamp=pw.BigIntegerField(),
-    )
-    migrator.change_fields(
-        "document",
-        timestamp=pw.BigIntegerField(),
-    )
-    migrator.change_fields(
-        "modelfile",
-        timestamp=pw.BigIntegerField(),
-    )
-    migrator.change_fields(
-        "prompt",
-        timestamp=pw.BigIntegerField(),
-    )
-    migrator.change_fields(
-        "user",
-        timestamp=pw.BigIntegerField(),
-    )
-    # Alter the tables with varchar to text where necessary
-    migrator.change_fields(
-        "auth",
-        password=pw.TextField(),
-    )
-    migrator.change_fields(
-        "chat",
-        title=pw.TextField(),
-    )
-    migrator.change_fields(
-        "document",
-        title=pw.TextField(),
-        filename=pw.TextField(),
-    )
-    migrator.change_fields(
-        "prompt",
-        title=pw.TextField(),
-    )
-    migrator.change_fields(
-        "user",
-        profile_image_url=pw.TextField(),
-    )
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    if isinstance(database, pw.SqliteDatabase):
-        # Alter the tables with timestamps
-        migrator.change_fields(
-            "chatidtag",
-            timestamp=pw.DateField(),
-        )
-        migrator.change_fields(
-            "document",
-            timestamp=pw.DateField(),
-        )
-        migrator.change_fields(
-            "modelfile",
-            timestamp=pw.DateField(),
-        )
-        migrator.change_fields(
-            "prompt",
-            timestamp=pw.DateField(),
-        )
-        migrator.change_fields(
-            "user",
-            timestamp=pw.DateField(),
-        )
-    migrator.change_fields(
-        "auth",
-        password=pw.CharField(max_length=255),
-    )
-    migrator.change_fields(
-        "chat",
-        title=pw.CharField(),
-    )
-    migrator.change_fields(
-        "document",
-        title=pw.CharField(),
-        filename=pw.CharField(),
-    )
-    migrator.change_fields(
-        "prompt",
-        title=pw.CharField(),
-    )
-    migrator.change_fields(
-        "user",
-        profile_image_url=pw.CharField(),
-    )

+ 0 - 79
backend/apps/webui/internal/migrations/007_add_user_last_active_at.py

@@ -1,79 +0,0 @@
-"""Peewee migrations -- 002_add_local_sharing.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    # Adding fields created_at and updated_at to the 'user' table
-    migrator.add_fields(
-        "user",
-        created_at=pw.BigIntegerField(null=True),  # Allow null for transition
-        updated_at=pw.BigIntegerField(null=True),  # Allow null for transition
-        last_active_at=pw.BigIntegerField(null=True),  # Allow null for transition
-    )
-
-    # Populate the new fields from an existing 'timestamp' field
-    migrator.sql(
-        'UPDATE "user" SET created_at = timestamp, updated_at = timestamp, last_active_at = timestamp WHERE timestamp IS NOT NULL'
-    )
-
-    # Now that the data has been copied, remove the original 'timestamp' field
-    migrator.remove_fields("user", "timestamp")
-
-    # Update the fields to be not null now that they are populated
-    migrator.change_fields(
-        "user",
-        created_at=pw.BigIntegerField(null=False),
-        updated_at=pw.BigIntegerField(null=False),
-        last_active_at=pw.BigIntegerField(null=False),
-    )
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    # Recreate the timestamp field initially allowing null values for safe transition
-    migrator.add_fields("user", timestamp=pw.BigIntegerField(null=True))
-
-    # Copy the earliest created_at date back into the new timestamp field
-    # This assumes created_at was originally a copy of timestamp
-    migrator.sql('UPDATE "user" SET timestamp = created_at')
-
-    # Remove the created_at and updated_at fields
-    migrator.remove_fields("user", "created_at", "updated_at", "last_active_at")
-
-    # Finally, alter the timestamp field to not allow nulls if that was the original setting
-    migrator.change_fields("user", timestamp=pw.BigIntegerField(null=False))

+ 0 - 53
backend/apps/webui/internal/migrations/008_add_memory.py

@@ -1,53 +0,0 @@
-"""Peewee migrations -- 002_add_local_sharing.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    @migrator.create_model
-    class Memory(pw.Model):
-        id = pw.CharField(max_length=255, unique=True)
-        user_id = pw.CharField(max_length=255)
-        content = pw.TextField(null=False)
-        updated_at = pw.BigIntegerField(null=False)
-        created_at = pw.BigIntegerField(null=False)
-
-        class Meta:
-            table_name = "memory"
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_model("memory")

+ 0 - 61
backend/apps/webui/internal/migrations/009_add_models.py

@@ -1,61 +0,0 @@
-"""Peewee migrations -- 009_add_models.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    @migrator.create_model
-    class Model(pw.Model):
-        id = pw.TextField(unique=True)
-        user_id = pw.TextField()
-        base_model_id = pw.TextField(null=True)
-
-        name = pw.TextField()
-
-        meta = pw.TextField()
-        params = pw.TextField()
-
-        created_at = pw.BigIntegerField(null=False)
-        updated_at = pw.BigIntegerField(null=False)
-
-        class Meta:
-            table_name = "model"
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_model("model")

+ 0 - 130
backend/apps/webui/internal/migrations/010_migrate_modelfiles_to_models.py

@@ -1,130 +0,0 @@
-"""Peewee migrations -- 009_add_models.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-import json
-
-from utils.misc import parse_ollama_modelfile
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    # Fetch data from 'modelfile' table and insert into 'model' table
-    migrate_modelfile_to_model(migrator, database)
-    # Drop the 'modelfile' table
-    migrator.remove_model("modelfile")
-
-
-def migrate_modelfile_to_model(migrator: Migrator, database: pw.Database):
-    ModelFile = migrator.orm["modelfile"]
-    Model = migrator.orm["model"]
-
-    modelfiles = ModelFile.select()
-
-    for modelfile in modelfiles:
-        # Extract and transform data in Python
-
-        modelfile.modelfile = json.loads(modelfile.modelfile)
-        meta = json.dumps(
-            {
-                "description": modelfile.modelfile.get("desc"),
-                "profile_image_url": modelfile.modelfile.get("imageUrl"),
-                "ollama": {"modelfile": modelfile.modelfile.get("content")},
-                "suggestion_prompts": modelfile.modelfile.get("suggestionPrompts"),
-                "categories": modelfile.modelfile.get("categories"),
-                "user": {**modelfile.modelfile.get("user", {}), "community": True},
-            }
-        )
-
-        info = parse_ollama_modelfile(modelfile.modelfile.get("content"))
-
-        # Insert the processed data into the 'model' table
-        Model.create(
-            id=f"ollama-{modelfile.tag_name}",
-            user_id=modelfile.user_id,
-            base_model_id=info.get("base_model_id"),
-            name=modelfile.modelfile.get("title"),
-            meta=meta,
-            params=json.dumps(info.get("params", {})),
-            created_at=modelfile.timestamp,
-            updated_at=modelfile.timestamp,
-        )
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    recreate_modelfile_table(migrator, database)
-    move_data_back_to_modelfile(migrator, database)
-    migrator.remove_model("model")
-
-
-def recreate_modelfile_table(migrator: Migrator, database: pw.Database):
-    query = """
-    CREATE TABLE IF NOT EXISTS modelfile (
-        user_id TEXT,
-        tag_name TEXT,
-        modelfile JSON,
-        timestamp BIGINT
-    )
-    """
-    migrator.sql(query)
-
-
-def move_data_back_to_modelfile(migrator: Migrator, database: pw.Database):
-    Model = migrator.orm["model"]
-    Modelfile = migrator.orm["modelfile"]
-
-    models = Model.select()
-
-    for model in models:
-        # Extract and transform data in Python
-        meta = json.loads(model.meta)
-
-        modelfile_data = {
-            "title": model.name,
-            "desc": meta.get("description"),
-            "imageUrl": meta.get("profile_image_url"),
-            "content": meta.get("ollama", {}).get("modelfile"),
-            "suggestionPrompts": meta.get("suggestion_prompts"),
-            "categories": meta.get("categories"),
-            "user": {k: v for k, v in meta.get("user", {}).items() if k != "community"},
-        }
-
-        # Insert the processed data back into the 'modelfile' table
-        Modelfile.create(
-            user_id=model.user_id,
-            tag_name=model.id,
-            modelfile=modelfile_data,
-            timestamp=model.created_at,
-        )

+ 0 - 48
backend/apps/webui/internal/migrations/011_add_user_settings.py

@@ -1,48 +0,0 @@
-"""Peewee migrations -- 002_add_local_sharing.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    # Adding fields settings to the 'user' table
-    migrator.add_fields("user", settings=pw.TextField(null=True))
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    # Remove the settings field
-    migrator.remove_fields("user", "settings")

+ 0 - 61
backend/apps/webui/internal/migrations/012_add_tools.py

@@ -1,61 +0,0 @@
-"""Peewee migrations -- 009_add_models.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    @migrator.create_model
-    class Tool(pw.Model):
-        id = pw.TextField(unique=True)
-        user_id = pw.TextField()
-
-        name = pw.TextField()
-        content = pw.TextField()
-        specs = pw.TextField()
-
-        meta = pw.TextField()
-
-        created_at = pw.BigIntegerField(null=False)
-        updated_at = pw.BigIntegerField(null=False)
-
-        class Meta:
-            table_name = "tool"
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_model("tool")

+ 0 - 48
backend/apps/webui/internal/migrations/013_add_user_info.py

@@ -1,48 +0,0 @@
-"""Peewee migrations -- 002_add_local_sharing.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    # Adding fields info to the 'user' table
-    migrator.add_fields("user", info=pw.TextField(null=True))
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    # Remove the settings field
-    migrator.remove_fields("user", "info")

+ 0 - 55
backend/apps/webui/internal/migrations/014_add_files.py

@@ -1,55 +0,0 @@
-"""Peewee migrations -- 009_add_models.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    @migrator.create_model
-    class File(pw.Model):
-        id = pw.TextField(unique=True)
-        user_id = pw.TextField()
-        filename = pw.TextField()
-        meta = pw.TextField()
-        created_at = pw.BigIntegerField(null=False)
-
-        class Meta:
-            table_name = "file"
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_model("file")

+ 0 - 61
backend/apps/webui/internal/migrations/015_add_functions.py

@@ -1,61 +0,0 @@
-"""Peewee migrations -- 009_add_models.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    @migrator.create_model
-    class Function(pw.Model):
-        id = pw.TextField(unique=True)
-        user_id = pw.TextField()
-
-        name = pw.TextField()
-        type = pw.TextField()
-
-        content = pw.TextField()
-        meta = pw.TextField()
-
-        created_at = pw.BigIntegerField(null=False)
-        updated_at = pw.BigIntegerField(null=False)
-
-        class Meta:
-            table_name = "function"
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_model("function")

+ 0 - 50
backend/apps/webui/internal/migrations/016_add_valves_and_is_active.py

@@ -1,50 +0,0 @@
-"""Peewee migrations -- 009_add_models.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    migrator.add_fields("tool", valves=pw.TextField(null=True))
-    migrator.add_fields("function", valves=pw.TextField(null=True))
-    migrator.add_fields("function", is_active=pw.BooleanField(default=False))
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_fields("tool", "valves")
-    migrator.remove_fields("function", "valves")
-    migrator.remove_fields("function", "is_active")

+ 0 - 49
backend/apps/webui/internal/migrations/017_add_user_oauth_sub.py

@@ -1,49 +0,0 @@
-"""Peewee migrations -- 017_add_user_oauth_sub.py.
-
-Some examples (model - class or model name)::
-
-    > Model = migrator.orm['table_name']            # Return model in current state by name
-    > Model = migrator.ModelClass                   # Return model in current state by name
-
-    > migrator.sql(sql)                             # Run custom SQL
-    > migrator.run(func, *args, **kwargs)           # Run python function with the given args
-    > migrator.create_model(Model)                  # Create a model (could be used as decorator)
-    > migrator.remove_model(model, cascade=True)    # Remove a model
-    > migrator.add_fields(model, **fields)          # Add fields to a model
-    > migrator.change_fields(model, **fields)       # Change fields
-    > migrator.remove_fields(model, *field_names, cascade=True)
-    > migrator.rename_field(model, old_field_name, new_field_name)
-    > migrator.rename_table(model, new_table_name)
-    > migrator.add_index(model, *col_names, unique=False)
-    > migrator.add_not_null(model, *field_names)
-    > migrator.add_default(model, field_name, default)
-    > migrator.add_constraint(model, name, sql)
-    > migrator.drop_index(model, *col_names)
-    > migrator.drop_not_null(model, *field_names)
-    > migrator.drop_constraints(model, *constraints)
-
-"""
-
-from contextlib import suppress
-
-import peewee as pw
-from peewee_migrate import Migrator
-
-
-with suppress(ImportError):
-    import playhouse.postgres_ext as pw_pext
-
-
-def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your migrations here."""
-
-    migrator.add_fields(
-        "user",
-        oauth_sub=pw.TextField(null=True, unique=True),
-    )
-
-
-def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
-    """Write your rollback migrations here."""
-
-    migrator.remove_fields("user", "oauth_sub")

+ 0 - 21
backend/apps/webui/internal/migrations/README.md

@@ -1,21 +0,0 @@
-# Database Migrations
-
-This directory contains all the database migrations for the web app.
-Migrations are done using the [`peewee-migrate`](https://github.com/klen/peewee_migrate) library.
-
-Migrations are automatically ran at app startup.
-
-## Creating a migration
-
-Have you made a change to the schema of an existing model?
-You will need to create a migration file to ensure that existing databases are updated for backwards compatibility.
-
-1. Have a database file (`webui.db`) that has the old schema prior to any of your changes.
-2. Make your changes to the models.
-3. From the `backend` directory, run the following command:
-   ```bash
-   pw_migrate create --auto --auto-source apps.webui.models --database sqlite:///${SQLITE_DB} --directory apps/web/internal/migrations ${MIGRATION_NAME}
-   ```
-   - `$SQLITE_DB` should be the path to the database file.
-   - `$MIGRATION_NAME` should be a descriptive name for the migration.
-4. The migration file will be created in the `apps/web/internal/migrations` directory.

+ 2 - 0
backend/migrations/versions/7e5b5dc7342b_init.py

@@ -176,8 +176,10 @@ def upgrade() -> None:
             sa.Column("api_key", sa.String(), nullable=True),
             sa.Column("settings", apps.webui.internal.db.JSONField(), nullable=True),
             sa.Column("info", apps.webui.internal.db.JSONField(), nullable=True),
+            sa.Column('oauth_sub', sa.Text(), nullable=True),
             sa.PrimaryKeyConstraint("id"),
             sa.UniqueConstraint("api_key"),
+            sa.UniqueConstraint("oauth_sub"),
         )
     # ### end Alembic commands ###