Skip to content

fix: Fix the PostgreSQL enum and generate a new database migration.#35

Merged
Fl1riX merged 1 commit into
mainfrom
fix/db-migration
Jun 2, 2026
Merged

fix: Fix the PostgreSQL enum and generate a new database migration.#35
Fl1riX merged 1 commit into
mainfrom
fix/db-migration

Conversation

@Fl1riX

@Fl1riX Fl1riX commented Jun 2, 2026

Copy link
Copy Markdown
Owner

Summary by Sourcery

Обновлено определение enum для ролей пользователя и приведена схема базы данных в соответствие с текущими доменными моделями посредством новой начальной миграции.

Исправления ошибок:

  • Исправлена конфигурация enum PostgreSQL для поля роли пользователя, чтобы обеспечить согласованное наименование и поведение non-null.

Улучшения:

  • Сгенерирована заново начальная миграция Alembic, чтобы точно отразить текущую схему для user, bans, magic_tokens, services и appointments, включая ограничения и индексы.
Original summary in English

Summary by Sourcery

Update the user role enum definition and align the database schema with the current domain models via a new initial migration.

Bug Fixes:

  • Correct the PostgreSQL enum configuration for the user role field to ensure consistent naming and non-null behavior.

Enhancements:

  • Regenerate the initial Alembic migration to accurately reflect the current user, bans, magic_tokens, services, and appointments schema, including constraints and indexes.

@sourcery-ai

sourcery-ai Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Руководство для рецензента

Обновляет модель User в SQLAlchemy, чтобы определить именованный, не допускающий NULL PostgreSQL enum для поля role, и регенерирует начальную миграцию Alembic, чтобы согласовать схему базы данных (users, bans, magic_tokens, services, appointments) с текущими моделями, заменяя более старые миграции.

Диаграмма отношений сущностей для обновлённой начальной схемы и enum роли пользователя

erDiagram
    users {
        int id PK
        enum role
    }

    bans {
        int id PK
        int user_id FK
        int banned_by FK
        int revoked_by FK
    }

    magic_tokens {
        int id PK
        int user_id FK
    }

    services {
        int id PK
        int entrepreneur_id FK
    }

    appointments {
        int id PK
        int service_id FK
        int entrepreneur_id FK
        int user_id FK
    }

    users ||--o{ bans : user_id
    users ||--o{ bans : banned_by
    users ||--o{ bans : revoked_by
    users ||--o{ magic_tokens : user_id
    users ||--o{ services : entrepreneur_id
    users ||--o{ appointments : entrepreneur_id
    users ||--o{ appointments : user_id
    services ||--o{ appointments : service_id
Loading

Изменения на уровне файлов

Изменение Подробности Файлы
Настроить сопоставление User.role на использование корректно именованного PostgreSQL enum и обеспечить запрет NULL-значений.
  • Изменить объявление SQLAlchemy Enum, чтобы включить имя PostgreSQL enum внутрь конструктора Enum, чтобы он создавался как именованный тип в базе данных.
  • Установить для столбца role значение nullable=False, чтобы на уровне базы данных у каждого пользователя было задано значение роли.
  • Сохранить значение роли по умолчанию как 'user' в ORM-сопоставлении.
src/domain/models/user_model.py
Регенерировать и упростить историю миграций Alembic до одной начальной миграции схемы, согласованной с текущими моделями.
  • Добавить новую начальную миграцию Alembic, которая создаёт таблицы users, bans, magic_tokens, services и appointments с соответствующими столбцами, ограничениями, индексами и enum user_role для столбца role.
  • Убедиться, что столбец users.role использует sa.Enum('user', 'admin', 'moderator', name='user_role', nullable=False), соответствующий ORM-модели.
  • Определить уникальные и проверочные ограничения (например, активный бан, уникальность сервиса, уникальность записи на приём) и соответствующие внешние ключи между таблицами.
  • Удалить устаревшие файлы миграций Alembic 024f8a5fcef3_crete_db.py и 4972fe91500d_v0_0_1.py в пользу новой начальной миграции схемы.
alembic/versions/98a1f2f343db_initial_schema.py
alembic/versions/024f8a5fcef3_crete_db.py
alembic/versions/4972fe91500d_v0_0_1.py

Подсказки и команды

Взаимодействие с Sourcery

  • Запустить новый обзор: Оставьте комментарий @sourcery-ai review в pull request.
  • Продолжить обсуждение: Отвечайте напрямую на комментарии обзора от Sourcery.
  • Создать задачу в GitHub из комментария обзора: Попросите Sourcery создать
    issue из комментария обзора, ответив на него. Вы также можете ответить на
    комментарий обзора с @sourcery-ai issue, чтобы создать issue на его основе.
  • Сгенерировать заголовок pull request: Напишите @sourcery-ai где угодно
    в заголовке pull request, чтобы в любой момент сгенерировать заголовок. Вы также можете оставить комментарий
    @sourcery-ai title в pull request, чтобы (пере)сгенерировать заголовок в любой момент.
  • Сгенерировать summary pull request: Напишите @sourcery-ai summary где угодно
    в теле pull request, чтобы в любой момент сгенерировать summary PR ровно в том месте,
    где вы хотите. Вы также можете оставить комментарий @sourcery-ai summary в pull request, чтобы
    (пере)сгенерировать summary в любой момент.
  • Сгенерировать руководство для рецензента: Оставьте комментарий @sourcery-ai guide в pull request,
    чтобы (пере)сгенерировать руководство для рецензента в любой момент.
  • Разрешить все комментарии Sourcery: Оставьте комментарий @sourcery-ai resolve в pull request,
    чтобы пометить все комментарии Sourcery как разрешённые. Полезно, если вы уже
    учли все комментарии и больше не хотите их видеть.
  • Отклонить все обзоры Sourcery: Оставьте комментарий @sourcery-ai dismiss в pull request,
    чтобы отклонить все существующие обзоры Sourcery. Особенно полезно, если вы
    хотите начать заново с новым обзором — не забудьте оставить комментарий
    @sourcery-ai review, чтобы запустить новый обзор!

Настройка работы

Откройте свою панель управления, чтобы:

  • Включать или отключать функции обзора, такие как автоматически сгенерированное Sourcery
    summary pull request, руководство для рецензента и другие.
  • Изменить язык обзора.
  • Добавлять, удалять или редактировать пользовательские инструкции для обзоров.
  • Настраивать прочие параметры обзора.

Получение помощи

Original review guide in English

Reviewer's Guide

Updates the User SQLAlchemy model to define a named, non-nullable PostgreSQL enum for the role field and regenerates the initial Alembic migration to align the database schema (users, bans, magic_tokens, services, appointments) with the current models, replacing older migrations.

Entity relationship diagram for updated initial schema and user role enum

erDiagram
    users {
        int id PK
        enum role
    }

    bans {
        int id PK
        int user_id FK
        int banned_by FK
        int revoked_by FK
    }

    magic_tokens {
        int id PK
        int user_id FK
    }

    services {
        int id PK
        int entrepreneur_id FK
    }

    appointments {
        int id PK
        int service_id FK
        int entrepreneur_id FK
        int user_id FK
    }

    users ||--o{ bans : user_id
    users ||--o{ bans : banned_by
    users ||--o{ bans : revoked_by
    users ||--o{ magic_tokens : user_id
    users ||--o{ services : entrepreneur_id
    users ||--o{ appointments : entrepreneur_id
    users ||--o{ appointments : user_id
    services ||--o{ appointments : service_id
Loading

File-Level Changes

Change Details Files
Adjust User.role mapping to use a properly named PostgreSQL enum and enforce non-nullability.
  • Change SQLAlchemy Enum declaration to include the PostgreSQL enum name inside the Enum constructor so it is created as a named type in the database.
  • Set the role column to nullable=False to enforce that every user has a role value at the database level.
  • Preserve the default role value as 'user' in the ORM mapping.
src/domain/models/user_model.py
Regenerate and simplify the Alembic migration history into a single initial schema migration aligned with current models.
  • Add a new initial Alembic migration that creates users, bans, magic_tokens, services, and appointments tables with appropriate columns, constraints, indexes, and the user_role enum for the role column.
  • Ensure the users.role column uses sa.Enum('user', 'admin', 'moderator', name='user_role', nullable=False) matching the ORM model.
  • Define unique and check constraints (e.g., active ban, service uniqueness, appointment uniqueness) and relevant foreign keys between tables.
  • Remove legacy Alembic migration files 024f8a5fcef3_crete_db.py and 4972fe91500d_v0_0_1.py in favor of the new initial schema migration.
alembic/versions/98a1f2f343db_initial_schema.py
alembic/versions/024f8a5fcef3_crete_db.py
alembic/versions/4972fe91500d_v0_0_1.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@Fl1riX Fl1riX merged commit bb8feac into main Jun 2, 2026
4 checks passed
@Fl1riX Fl1riX deleted the fix/db-migration branch June 2, 2026 17:02

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Привет — я оставил несколько общих замечаний:

  • В новой миграции initial_schema путь понижения версии удаляет таблицу users, но не удаляет соответствующий тип enum PostgreSQL user_role, что может оставить «осиротевшие» типы в базе данных; рассмотрите возможность явного удаления этого enum-типа в downgrade().
Подсказка для AI-агентов
Пожалуйста, исправьте замечания из этого code review:

## Общие комментарии
- В новой миграции `initial_schema` путь понижения версии удаляет таблицу `users`, но не удаляет соответствующий тип enum PostgreSQL `user_role`, что может оставить «осиротевшие» типы в базе данных; рассмотрите возможность явного удаления этого enum-типа в `downgrade()`.

Sourcery бесплатен для open source — если вам нравятся наши обзоры, пожалуйста, подумайте о том, чтобы поделиться ими ✨
Помогите мне стать полезнее! Пожалуйста, нажимайте 👍 или 👎 на каждом комментарии, и я буду использовать этот фидбек, чтобы улучшать ваши обзоры.
Original comment in English

Hey - I've left some high level feedback:

  • In the new initial_schema migration, the downgrade path drops the users table but does not drop the underlying PostgreSQL enum type user_role, which can leave orphaned types in the database; consider explicitly dropping the enum type in downgrade().
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In the new `initial_schema` migration, the downgrade path drops the `users` table but does not drop the underlying PostgreSQL enum type `user_role`, which can leave orphaned types in the database; consider explicitly dropping the enum type in `downgrade()`.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 26835238459

Coverage remained the same at 30.025%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 1209
Covered Lines: 363
Line Coverage: 30.02%
Coverage Strength: 0.6 hits per line

💛 - Coveralls

1 similar comment
@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 26835238459

Coverage remained the same at 30.025%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 1209
Covered Lines: 363
Line Coverage: 30.02%
Coverage Strength: 0.6 hits per line

💛 - Coveralls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant