Implement duty schedule import functionality and enhance user management

- Added a new command `/import_duty_schedule` for importing duty schedules via JSON, restricted to admin users.
- Introduced a two-step import process: specifying handover time and uploading a JSON file.
- Updated the database schema to allow `telegram_user_id` to be nullable for user creation by full name.
- Implemented repository functions for user management, including `get_or_create_user_by_full_name` and `delete_duties_in_range`.
- Enhanced README documentation with details on the new import command and JSON format requirements.
- Added comprehensive tests for the duty schedule parser and integration tests for the import functionality.
This commit is contained in:
2026-02-17 21:45:23 +03:00
parent 120d609b2e
commit ef5dbca5df
13 changed files with 678 additions and 8 deletions

View File

@@ -0,0 +1,35 @@
"""Users: telegram_user_id nullable (for import by full_name)
Revision ID: 002
Revises: 001
Create Date: 2025-02-17
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
revision: str = "002"
down_revision: Union[str, None] = "001"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
with op.batch_alter_table("users", schema=None) as batch_op:
batch_op.alter_column(
"telegram_user_id",
existing_type=sa.BigInteger(),
nullable=True,
)
def downgrade() -> None:
with op.batch_alter_table("users", schema=None) as batch_op:
batch_op.alter_column(
"telegram_user_id",
existing_type=sa.BigInteger(),
nullable=False,
)