From 8251938b2f1a9579a3068147c37b8c55735c01bd Mon Sep 17 00:00:00 2001 From: algizn97 Date: Sun, 12 Oct 2025 12:34:32 +0500 Subject: [PATCH] The database has been converted to SQLite --- .env.sample | 7 +- README.md | 7 +- alembic.ini | 147 ------------------ alembic/README | 1 - alembic/env.py | 90 ----------- alembic/script.py.mako | 28 ---- .../07020b2808d3_fixed_switch_side_type.py | 40 ----- .../09db71875980_updated_user_deals_table.py | 36 ----- ...ed68eddcdb_added_conditional_order_type.py | 40 ----- ...73c71f9_added_fee_for_user_auto_trading.py | 34 ---- ...b49ecd_added_side_for_user_auto_trading.py | 34 ---- ...c_update_last_side_the_conditional_data.py | 32 ---- .../42c66cfe8d4e_updated_martingale_factor.py | 38 ----- .../45977e9d8558_updated_order_quantity.py | 38 ----- ...ba27e80_create_user_conditional_setting.py | 40 ----- ...00faa4f7f_added_user_auto_trading_table.py | 42 ----- ...7c_deleted_position_idx_for_user_deals_.py | 32 ---- .../versions/863d6215e1eb_updated_deals.py | 32 ---- ...added_position_idx_for_user_deals_table.py | 34 ---- ...pdated_user_deals_and_user_conditional_.py | 36 ----- .../acbcc95de48d_updated_userdeals.py | 60 ------- .../baf03ce269e0_added_base_quantity.py | 34 ---- ...2259c_unnecessary_data_has_been_deleted.py | 79 ---------- .../versions/c98b9dc36d15_fixed_auto_trade.py | 38 ----- .../versions/ccdc5764eb4f_added_userdeals.py | 50 ------ ...added_limit_and_trigger_price_for_user_.py | 34 ---- ...c_added_last_side_and_auto_trading_for_.py | 40 ----- .../ef342b38e17b_added_fee_user_deals.py | 32 ---- ...55_added_last_side_the_conditional_data.py | 38 ----- .../versions/f00a94ccdf01_updated_deals.py | 40 ----- .../versions/fd8581c0cc87_updated_leverage.py | 32 ---- app/bybit/open_positions.py | 18 +-- app/bybit/telegram_message_handler.py | 2 +- app/telegram/handlers/settings.py | 4 +- app/telegram/keyboards/inline.py | 3 - config.py | 25 +-- database/__init__.py | 27 +++- database/models.py | 6 +- 38 files changed, 33 insertions(+), 1317 deletions(-) delete mode 100644 alembic.ini delete mode 100644 alembic/README delete mode 100644 alembic/env.py delete mode 100644 alembic/script.py.mako delete mode 100644 alembic/versions/07020b2808d3_fixed_switch_side_type.py delete mode 100644 alembic/versions/09db71875980_updated_user_deals_table.py delete mode 100644 alembic/versions/0eed68eddcdb_added_conditional_order_type.py delete mode 100644 alembic/versions/10bf073c71f9_added_fee_for_user_auto_trading.py delete mode 100644 alembic/versions/2b9572b49ecd_added_side_for_user_auto_trading.py delete mode 100644 alembic/versions/3534adf891fc_update_last_side_the_conditional_data.py delete mode 100644 alembic/versions/42c66cfe8d4e_updated_martingale_factor.py delete mode 100644 alembic/versions/45977e9d8558_updated_order_quantity.py delete mode 100644 alembic/versions/70094ba27e80_create_user_conditional_setting.py delete mode 100644 alembic/versions/73a00faa4f7f_added_user_auto_trading_table.py delete mode 100644 alembic/versions/77197715747c_deleted_position_idx_for_user_deals_.py delete mode 100644 alembic/versions/863d6215e1eb_updated_deals.py delete mode 100644 alembic/versions/8f1476c68efa_added_position_idx_for_user_deals_table.py delete mode 100644 alembic/versions/968f8121104f_updated_user_deals_and_user_conditional_.py delete mode 100644 alembic/versions/acbcc95de48d_updated_userdeals.py delete mode 100644 alembic/versions/baf03ce269e0_added_base_quantity.py delete mode 100644 alembic/versions/c710f4e2259c_unnecessary_data_has_been_deleted.py delete mode 100644 alembic/versions/c98b9dc36d15_fixed_auto_trade.py delete mode 100644 alembic/versions/ccdc5764eb4f_added_userdeals.py delete mode 100644 alembic/versions/d3c85bad8c98_added_limit_and_trigger_price_for_user_.py delete mode 100644 alembic/versions/dbffe818030c_added_last_side_and_auto_trading_for_.py delete mode 100644 alembic/versions/ef342b38e17b_added_fee_user_deals.py delete mode 100644 alembic/versions/ef38c90eed55_added_last_side_the_conditional_data.py delete mode 100644 alembic/versions/f00a94ccdf01_updated_deals.py delete mode 100644 alembic/versions/fd8581c0cc87_updated_leverage.py diff --git a/.env.sample b/.env.sample index 1885292..ea342dd 100644 --- a/.env.sample +++ b/.env.sample @@ -1,6 +1 @@ -BOT_TOKEN=YOUR_BOT_TOKEN -DB_USER=your_username -DB_PASS=your_password -DB_HOST=your_host -DB_PORT=your_port -DB_NAME=your_database \ No newline at end of file +BOT_TOKEN=YOUR_BOT_TOKEN \ No newline at end of file diff --git a/README.md b/README.md index 13f2b44..70599b7 100644 --- a/README.md +++ b/README.md @@ -55,12 +55,7 @@ cp .env.sample .env nvim .env ``` -5. Для применения миграций выполните команду: -```bash -alembic upgrade head -``` - -6. Запустите бота: +5. Запустите бота: ```bash python run.py diff --git a/alembic.ini b/alembic.ini deleted file mode 100644 index 0791816..0000000 --- a/alembic.ini +++ /dev/null @@ -1,147 +0,0 @@ -# A generic, single database configuration. - -[alembic] -# path to migration scripts. -# this is typically a path given in POSIX (e.g. forward slashes) -# format, relative to the token %(here)s which refers to the location of this -# ini file -script_location = %(here)s/alembic - -# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s -# Uncomment the line below if you want the files to be prepended with date and time -# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file -# for all available tokens -# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s - -# sys.path path, will be prepended to sys.path if present. -# defaults to the current working directory. for multiple paths, the path separator -# is defined by "path_separator" below. -prepend_sys_path = . - - -# timezone to use when rendering the date within the migration file -# as well as the filename. -# If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library. -# Any required deps can installed by adding `alembic[tz]` to the pip requirements -# string value is passed to ZoneInfo() -# leave blank for localtime -# timezone = - -# max length of characters to apply to the "slug" field -# truncate_slug_length = 40 - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - -# set to 'true' to allow .pyc and .pyo files without -# a source .py file to be detected as revisions in the -# versions/ directory -# sourceless = false - -# version location specification; This defaults -# to /versions. When using multiple version -# directories, initial revisions must be specified with --version-path. -# The path separator used here should be the separator specified by "path_separator" -# below. -# version_locations = %(here)s/bar:%(here)s/bat:%(here)s/alembic/versions - -# path_separator; This indicates what character is used to split lists of file -# paths, including version_locations and prepend_sys_path within configparser -# files such as alembic.ini. -# The default rendered in new alembic.ini files is "os", which uses os.pathsep -# to provide os-dependent path splitting. -# -# Note that in order to support legacy alembic.ini files, this default does NOT -# take place if path_separator is not present in alembic.ini. If this -# option is omitted entirely, fallback logic is as follows: -# -# 1. Parsing of the version_locations option falls back to using the legacy -# "version_path_separator" key, which if absent then falls back to the legacy -# behavior of splitting on spaces and/or commas. -# 2. Parsing of the prepend_sys_path option falls back to the legacy -# behavior of splitting on spaces, commas, or colons. -# -# Valid values for path_separator are: -# -# path_separator = : -# path_separator = ; -# path_separator = space -# path_separator = newline -# -# Use os.pathsep. Default configuration used for new projects. -path_separator = os - -# set to 'true' to search source files recursively -# in each "version_locations" directory -# new in Alembic version 1.10 -# recursive_version_locations = false - -# the output encoding used when revision files -# are written from script.py.mako -# output_encoding = utf-8 - -# database URL. This is consumed by the user-maintained env.py script only. -# other means of configuring database URLs may be customized within the env.py -# file. -sqlalchemy.url = driver://user:pass@localhost/dbname - - -[post_write_hooks] -# post_write_hooks defines scripts or Python functions that are run -# on newly generated revision scripts. See the documentation for further -# detail and examples - -# format using "black" - use the console_scripts runner, against the "black" entrypoint -# hooks = black -# black.type = console_scripts -# black.entrypoint = black -# black.options = -l 79 REVISION_SCRIPT_FILENAME - -# lint with attempts to fix using "ruff" - use the module runner, against the "ruff" module -# hooks = ruff -# ruff.type = module -# ruff.module = ruff -# ruff.options = check --fix REVISION_SCRIPT_FILENAME - -# Alternatively, use the exec runner to execute a binary found on your PATH -# hooks = ruff -# ruff.type = exec -# ruff.executable = ruff -# ruff.options = check --fix REVISION_SCRIPT_FILENAME - -# Logging configuration. This is also consumed by the user-maintained -# env.py script only. -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARNING -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARNING -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/alembic/README b/alembic/README deleted file mode 100644 index 98e4f9c..0000000 --- a/alembic/README +++ /dev/null @@ -1 +0,0 @@ -Generic single-database configuration. \ No newline at end of file diff --git a/alembic/env.py b/alembic/env.py deleted file mode 100644 index cadad9c..0000000 --- a/alembic/env.py +++ /dev/null @@ -1,90 +0,0 @@ -import asyncio -from logging.config import fileConfig - -from sqlalchemy import pool -from sqlalchemy.engine import Connection -from sqlalchemy.ext.asyncio import async_engine_from_config - -from alembic import context - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -from config import DATABASE_URL -config = context.config -config.set_main_option('sqlalchemy.url', DATABASE_URL) -# Interpret the config file for Python logging. -# This line sets up loggers basically. -if config.config_file_name is not None: - fileConfig(config.config_file_name) - -# add your model's MetaData object here -# for 'autogenerate' support -# from myapp import mymodel -# target_metadata = mymodel.Base.metadata -from database.models import Base -target_metadata = Base.metadata - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - - -def run_migrations_offline() -> None: - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - context.configure( - url=DATABASE_URL, - target_metadata=target_metadata, - literal_binds=True, - dialect_opts={"paramstyle": "named"}, - ) - - with context.begin_transaction(): - context.run_migrations() - - -def do_run_migrations(connection: Connection) -> None: - context.configure(connection=connection, target_metadata=target_metadata) - - with context.begin_transaction(): - context.run_migrations() - - -async def run_async_migrations() -> None: - """In this scenario we need to create an Engine - and associate a connection with the context. - - """ - - connectable = async_engine_from_config( - config.get_section(config.config_ini_section, {}), - prefix="sqlalchemy.", - poolclass=pool.NullPool, - ) - - async with connectable.connect() as connection: - await connection.run_sync(do_run_migrations) - - await connectable.dispose() - - -def run_migrations_online() -> None: - """Run migrations in 'online' mode.""" - - asyncio.run(run_async_migrations()) - - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() diff --git a/alembic/script.py.mako b/alembic/script.py.mako deleted file mode 100644 index 1101630..0000000 --- a/alembic/script.py.mako +++ /dev/null @@ -1,28 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision | comma,n} -Create Date: ${create_date} - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -# revision identifiers, used by Alembic. -revision: str = ${repr(up_revision)} -down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)} -branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} -depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} - - -def upgrade() -> None: - """Upgrade schema.""" - ${upgrades if upgrades else "pass"} - - -def downgrade() -> None: - """Downgrade schema.""" - ${downgrades if downgrades else "pass"} diff --git a/alembic/versions/07020b2808d3_fixed_switch_side_type.py b/alembic/versions/07020b2808d3_fixed_switch_side_type.py deleted file mode 100644 index 2ed28d9..0000000 --- a/alembic/versions/07020b2808d3_fixed_switch_side_type.py +++ /dev/null @@ -1,40 +0,0 @@ -"""fixed switch_side type - -Revision ID: 07020b2808d3 -Revises: c710f4e2259c -Create Date: 2025-10-09 14:36:07.393387 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '07020b2808d3' -down_revision: Union[str, Sequence[str], None] = 'c710f4e2259c' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_additional_settings', 'switch_side', - existing_type=sa.BOOLEAN(), - type_=sa.String(), - existing_nullable=False, - existing_server_default=sa.text('false')) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_additional_settings', 'switch_side', - existing_type=sa.String(), - type_=sa.BOOLEAN(), - existing_nullable=False, - existing_server_default=sa.text('false')) - # ### end Alembic commands ### diff --git a/alembic/versions/09db71875980_updated_user_deals_table.py b/alembic/versions/09db71875980_updated_user_deals_table.py deleted file mode 100644 index 017638f..0000000 --- a/alembic/versions/09db71875980_updated_user_deals_table.py +++ /dev/null @@ -1,36 +0,0 @@ -"""updated user deals table - -Revision ID: 09db71875980 -Revises: 77197715747c -Create Date: 2025-09-29 12:57:39.943294 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '09db71875980' -down_revision: Union[str, Sequence[str], None] = '77197715747c' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('order_quantity', sa.Float(), nullable=True)) - op.create_unique_constraint('uq_user_symbol', 'user_deals', ['user_id', 'symbol']) - op.drop_column('user_deals', 'quantity') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('quantity', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - op.drop_constraint('uq_user_symbol', 'user_deals', type_='unique') - op.drop_column('user_deals', 'order_quantity') - # ### end Alembic commands ### diff --git a/alembic/versions/0eed68eddcdb_added_conditional_order_type.py b/alembic/versions/0eed68eddcdb_added_conditional_order_type.py deleted file mode 100644 index 0353cd1..0000000 --- a/alembic/versions/0eed68eddcdb_added_conditional_order_type.py +++ /dev/null @@ -1,40 +0,0 @@ -"""Added conditional_order_type - -Revision ID: 0eed68eddcdb -Revises: 70094ba27e80 -Create Date: 2025-09-24 13:47:23.282807 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '0eed68eddcdb' -down_revision: Union[str, Sequence[str], None] = '70094ba27e80' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_additional_settings', sa.Column('conditional_order_type', sa.String(), nullable=False)) - op.add_column('user_additional_settings', sa.Column('limit_price', sa.Float(), nullable=False)) - op.add_column('user_additional_settings', sa.Column('trigger_price', sa.Float(), nullable=False)) - op.drop_column('user_conditional_settings', 'trigger_price') - op.drop_column('user_conditional_settings', 'limit_price') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_conditional_settings', sa.Column('limit_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=False)) - op.add_column('user_conditional_settings', sa.Column('trigger_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=False)) - op.drop_column('user_additional_settings', 'trigger_price') - op.drop_column('user_additional_settings', 'limit_price') - op.drop_column('user_additional_settings', 'conditional_order_type') - # ### end Alembic commands ### diff --git a/alembic/versions/10bf073c71f9_added_fee_for_user_auto_trading.py b/alembic/versions/10bf073c71f9_added_fee_for_user_auto_trading.py deleted file mode 100644 index b5e559a..0000000 --- a/alembic/versions/10bf073c71f9_added_fee_for_user_auto_trading.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Added fee for user auto trading - -Revision ID: 10bf073c71f9 -Revises: 2b9572b49ecd -Create Date: 2025-10-02 17:52:05.235523 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '10bf073c71f9' -down_revision: Union[str, Sequence[str], None] = '2b9572b49ecd' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_auto_trading', sa.Column('fee', sa.Float(), nullable=True)) - op.drop_column('user_deals', 'fee') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('fee', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - op.drop_column('user_auto_trading', 'fee') - # ### end Alembic commands ### diff --git a/alembic/versions/2b9572b49ecd_added_side_for_user_auto_trading.py b/alembic/versions/2b9572b49ecd_added_side_for_user_auto_trading.py deleted file mode 100644 index cfaef08..0000000 --- a/alembic/versions/2b9572b49ecd_added_side_for_user_auto_trading.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Added side for user auto trading - -Revision ID: 2b9572b49ecd -Revises: ef342b38e17b -Create Date: 2025-10-02 17:21:20.904797 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '2b9572b49ecd' -down_revision: Union[str, Sequence[str], None] = 'ef342b38e17b' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_auto_trading', sa.Column('side', sa.String(), nullable=True)) - op.drop_constraint(op.f('uq_user_auto_trading_symbol'), 'user_auto_trading', type_='unique') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.create_unique_constraint(op.f('uq_user_auto_trading_symbol'), 'user_auto_trading', ['user_id', 'symbol'], postgresql_nulls_not_distinct=False) - op.drop_column('user_auto_trading', 'side') - # ### end Alembic commands ### diff --git a/alembic/versions/3534adf891fc_update_last_side_the_conditional_data.py b/alembic/versions/3534adf891fc_update_last_side_the_conditional_data.py deleted file mode 100644 index 5bbc3f8..0000000 --- a/alembic/versions/3534adf891fc_update_last_side_the_conditional_data.py +++ /dev/null @@ -1,32 +0,0 @@ -"""update last side the conditional data - -Revision ID: 3534adf891fc -Revises: ef38c90eed55 -Create Date: 2025-09-30 08:39:02.971158 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '3534adf891fc' -down_revision: Union[str, Sequence[str], None] = 'ef38c90eed55' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - pass - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - pass - # ### end Alembic commands ### diff --git a/alembic/versions/42c66cfe8d4e_updated_martingale_factor.py b/alembic/versions/42c66cfe8d4e_updated_martingale_factor.py deleted file mode 100644 index 30b6920..0000000 --- a/alembic/versions/42c66cfe8d4e_updated_martingale_factor.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Updated martingale factor - -Revision ID: 42c66cfe8d4e -Revises: 45977e9d8558 -Create Date: 2025-09-22 17:17:39.779979 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '42c66cfe8d4e' -down_revision: Union[str, Sequence[str], None] = '45977e9d8558' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_additional_settings', 'martingale_factor', - existing_type=sa.INTEGER(), - type_=sa.Float(), - existing_nullable=False) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_additional_settings', 'martingale_factor', - existing_type=sa.Float(), - type_=sa.INTEGER(), - existing_nullable=False) - # ### end Alembic commands ### diff --git a/alembic/versions/45977e9d8558_updated_order_quantity.py b/alembic/versions/45977e9d8558_updated_order_quantity.py deleted file mode 100644 index 0fa2f58..0000000 --- a/alembic/versions/45977e9d8558_updated_order_quantity.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Updated order quantity - -Revision ID: 45977e9d8558 -Revises: fd8581c0cc87 -Create Date: 2025-09-22 16:59:40.415398 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '45977e9d8558' -down_revision: Union[str, Sequence[str], None] = 'fd8581c0cc87' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_additional_settings', 'order_quantity', - existing_type=sa.INTEGER(), - type_=sa.Float(), - existing_nullable=False) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_additional_settings', 'order_quantity', - existing_type=sa.Float(), - type_=sa.INTEGER(), - existing_nullable=False) - # ### end Alembic commands ### diff --git a/alembic/versions/70094ba27e80_create_user_conditional_setting.py b/alembic/versions/70094ba27e80_create_user_conditional_setting.py deleted file mode 100644 index d09e8b0..0000000 --- a/alembic/versions/70094ba27e80_create_user_conditional_setting.py +++ /dev/null @@ -1,40 +0,0 @@ -"""Create User Conditional Setting - -Revision ID: 70094ba27e80 -Revises: 42c66cfe8d4e -Create Date: 2025-09-23 16:47:07.161544 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '70094ba27e80' -down_revision: Union[str, Sequence[str], None] = '42c66cfe8d4e' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('user_conditional_settings', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('limit_price', sa.Float(), nullable=False), - sa.Column('trigger_price', sa.Float(), nullable=False), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('user_id') - ) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('user_conditional_settings') - # ### end Alembic commands ### diff --git a/alembic/versions/73a00faa4f7f_added_user_auto_trading_table.py b/alembic/versions/73a00faa4f7f_added_user_auto_trading_table.py deleted file mode 100644 index 9e0c743..0000000 --- a/alembic/versions/73a00faa4f7f_added_user_auto_trading_table.py +++ /dev/null @@ -1,42 +0,0 @@ -"""added user_auto_trading table - -Revision ID: 73a00faa4f7f -Revises: 968f8121104f -Create Date: 2025-10-01 12:30:21.830851 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '73a00faa4f7f' -down_revision: Union[str, Sequence[str], None] = '968f8121104f' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('user_auto_trading', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('symbol', sa.String(), nullable=True), - sa.Column('auto_trading', sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('user_id', 'symbol', name='uq_user_auto_trading_symbol') - ) - op.drop_column('user_conditional_settings', 'auto_trading') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_conditional_settings', sa.Column('auto_trading', sa.BOOLEAN(), autoincrement=False, nullable=True)) - op.drop_table('user_auto_trading') - # ### end Alembic commands ### diff --git a/alembic/versions/77197715747c_deleted_position_idx_for_user_deals_.py b/alembic/versions/77197715747c_deleted_position_idx_for_user_deals_.py deleted file mode 100644 index 0f4d2a0..0000000 --- a/alembic/versions/77197715747c_deleted_position_idx_for_user_deals_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""deleted position_idx for user deals table - -Revision ID: 77197715747c -Revises: 8f1476c68efa -Create Date: 2025-09-29 12:20:18.928995 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '77197715747c' -down_revision: Union[str, Sequence[str], None] = '8f1476c68efa' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('user_deals', 'position_idx') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('position_idx', sa.INTEGER(), autoincrement=False, nullable=True)) - # ### end Alembic commands ### diff --git a/alembic/versions/863d6215e1eb_updated_deals.py b/alembic/versions/863d6215e1eb_updated_deals.py deleted file mode 100644 index 6863b0b..0000000 --- a/alembic/versions/863d6215e1eb_updated_deals.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Updated Deals - -Revision ID: 863d6215e1eb -Revises: f00a94ccdf01 -Create Date: 2025-09-28 23:13:39.484468 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '863d6215e1eb' -down_revision: Union[str, Sequence[str], None] = 'f00a94ccdf01' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('margin_type', sa.String(), nullable=True)) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('user_deals', 'margin_type') - # ### end Alembic commands ### diff --git a/alembic/versions/8f1476c68efa_added_position_idx_for_user_deals_table.py b/alembic/versions/8f1476c68efa_added_position_idx_for_user_deals_table.py deleted file mode 100644 index 2c51fb0..0000000 --- a/alembic/versions/8f1476c68efa_added_position_idx_for_user_deals_table.py +++ /dev/null @@ -1,34 +0,0 @@ -"""added position_idx for user deals table - -Revision ID: 8f1476c68efa -Revises: 863d6215e1eb -Create Date: 2025-09-29 11:40:46.512160 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '8f1476c68efa' -down_revision: Union[str, Sequence[str], None] = '863d6215e1eb' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('position_idx', sa.Integer(), nullable=True)) - op.drop_constraint(op.f('user_deals_user_id_key'), 'user_deals', type_='unique') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.create_unique_constraint(op.f('user_deals_user_id_key'), 'user_deals', ['user_id'], postgresql_nulls_not_distinct=False) - op.drop_column('user_deals', 'position_idx') - # ### end Alembic commands ### diff --git a/alembic/versions/968f8121104f_updated_user_deals_and_user_conditional_.py b/alembic/versions/968f8121104f_updated_user_deals_and_user_conditional_.py deleted file mode 100644 index 77b4490..0000000 --- a/alembic/versions/968f8121104f_updated_user_deals_and_user_conditional_.py +++ /dev/null @@ -1,36 +0,0 @@ -"""updated user_deals and user_conditional_settings - -Revision ID: 968f8121104f -Revises: dbffe818030c -Create Date: 2025-10-01 11:45:49.073865 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '968f8121104f' -down_revision: Union[str, Sequence[str], None] = 'dbffe818030c' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_conditional_settings', sa.Column('auto_trading', sa.Boolean(), nullable=True)) - op.drop_column('user_deals', 'commission_fee') - op.drop_column('user_deals', 'auto_trading') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('auto_trading', sa.BOOLEAN(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('commission_fee', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.drop_column('user_conditional_settings', 'auto_trading') - # ### end Alembic commands ### diff --git a/alembic/versions/acbcc95de48d_updated_userdeals.py b/alembic/versions/acbcc95de48d_updated_userdeals.py deleted file mode 100644 index 1822547..0000000 --- a/alembic/versions/acbcc95de48d_updated_userdeals.py +++ /dev/null @@ -1,60 +0,0 @@ -"""Updated UserDeals - -Revision ID: acbcc95de48d -Revises: ccdc5764eb4f -Create Date: 2025-09-28 16:57:28.384116 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'acbcc95de48d' -down_revision: Union[str, Sequence[str], None] = 'ccdc5764eb4f' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_conditional_settings', sa.Column('auto_trading', sa.String(), nullable=False)) - op.add_column('user_deals', sa.Column('trading_type', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('conditional_order_type', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('take_profit_percent', sa.Integer(), nullable=True)) - op.add_column('user_deals', sa.Column('stop_loss_percent', sa.Integer(), nullable=True)) - op.add_column('user_deals', sa.Column('max_risk_percent', sa.Integer(), nullable=True)) - op.add_column('user_deals', sa.Column('commission_fee', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('switch_side_mode', sa.String(), nullable=True)) - op.drop_index(op.f('ix_user_deals_deal_series_id'), table_name='user_deals') - op.drop_column('user_deals', 'take_profit') - op.drop_column('user_deals', 'deal_series_id') - op.drop_column('user_deals', 'price') - op.drop_column('user_deals', 'exec_fee') - op.drop_column('user_deals', 'stop_loss') - op.drop_column('user_deals', 'closed_size') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('closed_size', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('stop_loss', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('exec_fee', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('deal_series_id', sa.INTEGER(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('take_profit', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - op.create_index(op.f('ix_user_deals_deal_series_id'), 'user_deals', ['deal_series_id'], unique=False) - op.drop_column('user_deals', 'switch_side_mode') - op.drop_column('user_deals', 'commission_fee') - op.drop_column('user_deals', 'max_risk_percent') - op.drop_column('user_deals', 'stop_loss_percent') - op.drop_column('user_deals', 'take_profit_percent') - op.drop_column('user_deals', 'conditional_order_type') - op.drop_column('user_deals', 'trading_type') - op.drop_column('user_conditional_settings', 'auto_trading') - # ### end Alembic commands ### diff --git a/alembic/versions/baf03ce269e0_added_base_quantity.py b/alembic/versions/baf03ce269e0_added_base_quantity.py deleted file mode 100644 index d2c3bb3..0000000 --- a/alembic/versions/baf03ce269e0_added_base_quantity.py +++ /dev/null @@ -1,34 +0,0 @@ -"""added base_quantity - -Revision ID: baf03ce269e0 -Revises: 07020b2808d3 -Create Date: 2025-10-09 16:49:52.979556 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'baf03ce269e0' -down_revision: Union[str, Sequence[str], None] = '07020b2808d3' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('base_quantity', sa.Float(), nullable=True)) - op.drop_column('user_deals', 'trading_type') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('trading_type', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.drop_column('user_deals', 'base_quantity') - # ### end Alembic commands ### diff --git a/alembic/versions/c710f4e2259c_unnecessary_data_has_been_deleted.py b/alembic/versions/c710f4e2259c_unnecessary_data_has_been_deleted.py deleted file mode 100644 index 455e1ba..0000000 --- a/alembic/versions/c710f4e2259c_unnecessary_data_has_been_deleted.py +++ /dev/null @@ -1,79 +0,0 @@ -"""unnecessary data has been deleted - -Revision ID: c710f4e2259c -Revises: 10bf073c71f9 -Create Date: 2025-10-09 14:17:32.632574 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'c710f4e2259c' -down_revision: Union[str, Sequence[str], None] = '10bf073c71f9' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_additional_settings', - sa.Column('switch_side', sa.Boolean(), nullable=False, server_default=sa.false())) - op.drop_column('user_additional_settings', 'leverage_to_buy') - op.drop_column('user_additional_settings', 'order_type') - op.drop_column('user_additional_settings', 'limit_price') - op.drop_column('user_additional_settings', 'leverage_to_sell') - op.drop_column('user_additional_settings', 'conditional_order_type') - op.add_column('user_auto_trading', sa.Column('total_fee', sa.Float(), nullable=True)) - op.drop_column('user_auto_trading', 'side') - op.drop_column('user_deals', 'switch_side_mode') - op.drop_column('user_deals', 'leverage_to_buy') - op.drop_column('user_deals', 'order_type') - op.drop_column('user_deals', 'limit_price') - op.drop_column('user_deals', 'max_risk_percent') - op.drop_column('user_deals', 'leverage_to_sell') - op.drop_column('user_deals', 'conditional_order_type') - op.alter_column('user_risk_management', 'take_profit_percent', - existing_type=sa.INTEGER(), - type_=sa.Float(), - existing_nullable=False) - op.alter_column('user_risk_management', 'stop_loss_percent', - existing_type=sa.INTEGER(), - type_=sa.Float(), - existing_nullable=False) - op.drop_column('user_risk_management', 'max_risk_percent') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_risk_management', sa.Column('max_risk_percent', sa.INTEGER(), autoincrement=False, nullable=False)) - op.alter_column('user_risk_management', 'stop_loss_percent', - existing_type=sa.Float(), - type_=sa.INTEGER(), - existing_nullable=False) - op.alter_column('user_risk_management', 'take_profit_percent', - existing_type=sa.Float(), - type_=sa.INTEGER(), - existing_nullable=False) - op.add_column('user_deals', sa.Column('conditional_order_type', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('leverage_to_sell', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('max_risk_percent', sa.INTEGER(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('limit_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('order_type', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('leverage_to_buy', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.add_column('user_deals', sa.Column('switch_side_mode', sa.BOOLEAN(), autoincrement=False, nullable=True)) - op.add_column('user_auto_trading', sa.Column('side', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.drop_column('user_auto_trading', 'total_fee') - op.add_column('user_additional_settings', sa.Column('conditional_order_type', sa.VARCHAR(), autoincrement=False, nullable=False)) - op.add_column('user_additional_settings', sa.Column('leverage_to_sell', sa.VARCHAR(), autoincrement=False, nullable=False)) - op.add_column('user_additional_settings', sa.Column('limit_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=False)) - op.add_column('user_additional_settings', sa.Column('order_type', sa.VARCHAR(), server_default=sa.text("'Market'::character varying"), autoincrement=False, nullable=False)) - op.add_column('user_additional_settings', sa.Column('leverage_to_buy', sa.VARCHAR(), autoincrement=False, nullable=False)) - op.drop_column('user_additional_settings', 'switch_side') - # ### end Alembic commands ### diff --git a/alembic/versions/c98b9dc36d15_fixed_auto_trade.py b/alembic/versions/c98b9dc36d15_fixed_auto_trade.py deleted file mode 100644 index 5bd00be..0000000 --- a/alembic/versions/c98b9dc36d15_fixed_auto_trade.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Fixed auto_trade - -Revision ID: c98b9dc36d15 -Revises: acbcc95de48d -Create Date: 2025-09-28 21:33:08.319232 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'c98b9dc36d15' -down_revision: Union[str, Sequence[str], None] = 'acbcc95de48d' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_conditional_settings', 'auto_trading', - existing_type=sa.VARCHAR(), - type_=sa.Boolean(), - existing_nullable=False) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_conditional_settings', 'auto_trading', - existing_type=sa.Boolean(), - type_=sa.VARCHAR(), - existing_nullable=False) - # ### end Alembic commands ### diff --git a/alembic/versions/ccdc5764eb4f_added_userdeals.py b/alembic/versions/ccdc5764eb4f_added_userdeals.py deleted file mode 100644 index 4d697c3..0000000 --- a/alembic/versions/ccdc5764eb4f_added_userdeals.py +++ /dev/null @@ -1,50 +0,0 @@ -"""Added UserDeals - -Revision ID: ccdc5764eb4f -Revises: 0eed68eddcdb -Create Date: 2025-09-25 22:39:17.246594 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'ccdc5764eb4f' -down_revision: Union[str, Sequence[str], None] = '0eed68eddcdb' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_conditional_settings', sa.Column('timer_start', sa.Integer(), nullable=False)) - op.add_column('user_conditional_settings', sa.Column('timer_end', sa.Integer(), nullable=False)) - op.add_column('user_deals', sa.Column('trade_mode', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('order_type', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('leverage', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('leverage_to_buy', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('leverage_to_sell', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('closed_side', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('martingale_factor', sa.Float(), nullable=True)) - op.add_column('user_deals', sa.Column('max_bets_in_series', sa.Integer(), nullable=True)) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('user_deals', 'max_bets_in_series') - op.drop_column('user_deals', 'martingale_factor') - op.drop_column('user_deals', 'closed_side') - op.drop_column('user_deals', 'leverage_to_sell') - op.drop_column('user_deals', 'leverage_to_buy') - op.drop_column('user_deals', 'leverage') - op.drop_column('user_deals', 'order_type') - op.drop_column('user_deals', 'trade_mode') - op.drop_column('user_conditional_settings', 'timer_end') - op.drop_column('user_conditional_settings', 'timer_start') - # ### end Alembic commands ### diff --git a/alembic/versions/d3c85bad8c98_added_limit_and_trigger_price_for_user_.py b/alembic/versions/d3c85bad8c98_added_limit_and_trigger_price_for_user_.py deleted file mode 100644 index c2fc35a..0000000 --- a/alembic/versions/d3c85bad8c98_added_limit_and_trigger_price_for_user_.py +++ /dev/null @@ -1,34 +0,0 @@ -"""added limit and trigger price for user deals - -Revision ID: d3c85bad8c98 -Revises: 09db71875980 -Create Date: 2025-09-29 16:50:36.818798 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'd3c85bad8c98' -down_revision: Union[str, Sequence[str], None] = '09db71875980' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('limit_price', sa.Float(), nullable=True)) - op.add_column('user_deals', sa.Column('trigger_price', sa.Float(), nullable=True)) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('user_deals', 'trigger_price') - op.drop_column('user_deals', 'limit_price') - # ### end Alembic commands ### diff --git a/alembic/versions/dbffe818030c_added_last_side_and_auto_trading_for_.py b/alembic/versions/dbffe818030c_added_last_side_and_auto_trading_for_.py deleted file mode 100644 index eec8b99..0000000 --- a/alembic/versions/dbffe818030c_added_last_side_and_auto_trading_for_.py +++ /dev/null @@ -1,40 +0,0 @@ -"""added last_side and auto_trading for user_deals - -Revision ID: dbffe818030c -Revises: 3534adf891fc -Create Date: 2025-10-01 09:29:55.554101 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'dbffe818030c' -down_revision: Union[str, Sequence[str], None] = '3534adf891fc' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('user_conditional_settings', 'last_side') - op.drop_column('user_conditional_settings', 'auto_trading') - op.add_column('user_deals', sa.Column('last_side', sa.String(), nullable=True)) - op.add_column('user_deals', sa.Column('auto_trading', sa.Boolean(), nullable=True)) - op.drop_column('user_deals', 'side') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('side', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.drop_column('user_deals', 'auto_trading') - op.drop_column('user_deals', 'last_side') - op.add_column('user_conditional_settings', sa.Column('auto_trading', sa.BOOLEAN(), server_default=sa.text('false'), autoincrement=False, nullable=False)) - op.add_column('user_conditional_settings', sa.Column('last_side', sa.VARCHAR(), autoincrement=False, nullable=False)) - # ### end Alembic commands ### diff --git a/alembic/versions/ef342b38e17b_added_fee_user_deals.py b/alembic/versions/ef342b38e17b_added_fee_user_deals.py deleted file mode 100644 index b9e3983..0000000 --- a/alembic/versions/ef342b38e17b_added_fee_user_deals.py +++ /dev/null @@ -1,32 +0,0 @@ -"""added fee user deals - -Revision ID: ef342b38e17b -Revises: 73a00faa4f7f -Create Date: 2025-10-02 15:10:25.456983 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'ef342b38e17b' -down_revision: Union[str, Sequence[str], None] = '73a00faa4f7f' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('user_deals', sa.Column('fee', sa.Float(), nullable=True)) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('user_deals', 'fee') - # ### end Alembic commands ### diff --git a/alembic/versions/ef38c90eed55_added_last_side_the_conditional_data.py b/alembic/versions/ef38c90eed55_added_last_side_the_conditional_data.py deleted file mode 100644 index 39eff8c..0000000 --- a/alembic/versions/ef38c90eed55_added_last_side_the_conditional_data.py +++ /dev/null @@ -1,38 +0,0 @@ -"""added last side the conditional data - -Revision ID: ef38c90eed55 -Revises: d3c85bad8c98 -Create Date: 2025-09-30 08:33:23.415545 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'ef38c90eed55' -down_revision: Union[str, Sequence[str], None] = 'd3c85bad8c98' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - op.add_column('user_conditional_settings', sa.Column('last_side', sa.String(), nullable=True)) - - # Обновляем все существующие строки значением по умолчанию - op.execute( - "UPDATE user_conditional_settings SET last_side = 'default_value' WHERE last_side IS NULL" - ) - - # Устанавливаем ограничение NOT NULL - op.alter_column('user_conditional_settings', 'last_side', nullable=False) - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('user_conditional_settings', 'last_side') - # ### end Alembic commands ### diff --git a/alembic/versions/f00a94ccdf01_updated_deals.py b/alembic/versions/f00a94ccdf01_updated_deals.py deleted file mode 100644 index 9e0309b..0000000 --- a/alembic/versions/f00a94ccdf01_updated_deals.py +++ /dev/null @@ -1,40 +0,0 @@ -"""Updated Deals - -Revision ID: f00a94ccdf01 -Revises: c98b9dc36d15 -Create Date: 2025-09-28 22:25:00.092196 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'f00a94ccdf01' -down_revision: Union[str, Sequence[str], None] = 'c98b9dc36d15' -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('user_deals', 'switch_side_mode', - existing_type=sa.VARCHAR(), - type_=sa.Boolean(), - existing_nullable=True) - op.create_unique_constraint(None, 'user_deals', ['user_id']) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, 'user_deals', type_='unique') - op.alter_column('user_deals', 'switch_side_mode', - existing_type=sa.Boolean(), - type_=sa.VARCHAR(), - existing_nullable=True) - # ### end Alembic commands ### diff --git a/alembic/versions/fd8581c0cc87_updated_leverage.py b/alembic/versions/fd8581c0cc87_updated_leverage.py deleted file mode 100644 index cc9bb37..0000000 --- a/alembic/versions/fd8581c0cc87_updated_leverage.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Updated leverage - -Revision ID: fd8581c0cc87 -Revises: bb586fa9bcd2 -Create Date: 2025-09-22 15:13:21.487402 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = 'fd8581c0cc87' -down_revision: Union[str, Sequence[str], None] = None -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - pass - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - pass - # ### end Alembic commands ### diff --git a/app/bybit/open_positions.py b/app/bybit/open_positions.py index 7b8d3b4..147d4b7 100644 --- a/app/bybit/open_positions.py +++ b/app/bybit/open_positions.py @@ -280,10 +280,6 @@ async def open_positions( price_for_cals = trigger_price if po_trigger_price is not None else price_symbol - tp_multiplier = 1 + (take_profit_percent / 100) - if commission_fee_percent > 0: - tp_multiplier += commission_fee_percent - if margin_type == "ISOLATED_MARGIN": liq_long, liq_short = await get_liquidation_price( tg_id=tg_id, @@ -306,21 +302,15 @@ async def open_positions( stop_loss_price = None else: if side == "Buy": - take_profit_price = price_for_cals * tp_multiplier - stop_loss_price = price_for_cals * (1 - stop_loss_percent / 100) + take_profit_price = price_for_cals * (1 + take_profit_percent / 100) + commission_fee_percent + stop_loss_price = price_for_cals * (1 - stop_loss_percent / 100) - commission_fee_percent else: - take_profit_price = price_for_cals * ( - 1 - (take_profit_percent / 100) - commission_fee_percent - ) - stop_loss_price = trigger_price * (1 + stop_loss_percent / 100) + take_profit_price = price_for_cals * (1 - take_profit_percent / 100) - commission_fee_percent + stop_loss_price = price_for_cals * (1 + stop_loss_percent / 100) + commission_fee_percent take_profit_price = max(take_profit_price, 0) stop_loss_price = max(stop_loss_price, 0) - logger.info("Take profit price: %s", take_profit_price) - logger.info("Stop loss price: %s", stop_loss_price) - logger.info("Commission fee percent: %s", commission_fee_percent) - # Place order order_params = { "category": "linear", diff --git a/app/bybit/telegram_message_handler.py b/app/bybit/telegram_message_handler.py index 9662eab..8071c03 100644 --- a/app/bybit/telegram_message_handler.py +++ b/app/bybit/telegram_message_handler.py @@ -155,7 +155,7 @@ class TelegramMessageHandler: tg_id=tg_id, symbol=symbol, fee=0 ) await rq.set_order_quantity( - tg_id=message.from_user.id, order_quantity=base_quantity + tg_id=tg_id, order_quantity=base_quantity ) else: open_order_text = "\n❗️ Сделка закрылась в минус, открываю новую сделку с увеличенной ставкой.\n" diff --git a/app/telegram/handlers/settings.py b/app/telegram/handlers/settings.py index 27487d4..727b667 100644 --- a/app/telegram/handlers/settings.py +++ b/app/telegram/handlers/settings.py @@ -162,11 +162,9 @@ async def conditions(callback_query: CallbackQuery, state: FSMContext) -> None: ) if conditional_settings_data: start_timer = conditional_settings_data.timer_start or 0 - stop_timer = conditional_settings_data.timer_end or 0 await callback_query.message.edit_text( text="Условия торговли:\n\n" - f"- Таймер для старта: {start_timer} мин.\n" - f"- Таймер для остановки: {stop_timer} мин.\n", + f"- Таймер для старта: {start_timer} мин.\n", reply_markup=kbi.conditions, ) logger.debug( diff --git a/app/telegram/keyboards/inline.py b/app/telegram/keyboards/inline.py index 8635eb2..2bc7d62 100644 --- a/app/telegram/keyboards/inline.py +++ b/app/telegram/keyboards/inline.py @@ -227,9 +227,6 @@ conditions = InlineKeyboardMarkup( inline_keyboard=[ [ InlineKeyboardButton(text="Таймер для старта", callback_data="start_timer"), - InlineKeyboardButton( - text="Таймер для остановки", callback_data="stop_timer" - ), ], [ InlineKeyboardButton(text="Назад", callback_data="main_settings"), diff --git a/config.py b/config.py index d1fc4bd..2becae7 100644 --- a/config.py +++ b/config.py @@ -1,31 +1,10 @@ import os from dotenv import load_dotenv, find_dotenv -import logging.config - -from logger_helper.logger_helper import LOGGING_CONFIG - -logging.config.dictConfig(LOGGING_CONFIG) -logger = logging.getLogger("config") env_path = find_dotenv() - if env_path: load_dotenv(env_path) - logging.info(f"Loaded env from {env_path}") -else: - logging.warning(".env file not found, environment variables won't be loaded") -BOT_TOKEN = os.getenv('BOT_TOKEN') -if not BOT_TOKEN: - logging.error("BOT_TOKEN is not set in environment variables") +BOT_TOKEN = os.getenv("BOT_TOKEN") -DB_USER = os.getenv('DB_USER') -DB_PASS = os.getenv('DB_PASS') -DB_HOST = os.getenv('DB_HOST') -DB_PORT = os.getenv('DB_PORT') -DB_NAME = os.getenv('DB_NAME') - -if not all([DB_USER, DB_PASS, DB_HOST, DB_PORT, DB_NAME]): - logger.error("One or more database environment variables are not set") - -DATABASE_URL = f"postgresql+asyncpg://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}" \ No newline at end of file +DATABASE_URL = f"sqlite+aiosqlite:///database/data/sqlite.db" diff --git a/database/__init__.py b/database/__init__.py index 9c9a679..724fd47 100644 --- a/database/__init__.py +++ b/database/__init__.py @@ -1,19 +1,32 @@ -import logging.config - -from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine, AsyncSession - from database.models import Base - +import logging.config +from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession +from sqlalchemy import event from config import DATABASE_URL + from logger_helper.logger_helper import LOGGING_CONFIG logging.config.dictConfig(LOGGING_CONFIG) logger = logging.getLogger("database") -async_engine = create_async_engine(DATABASE_URL, echo=False) -async_session = async_sessionmaker(async_engine, class_=AsyncSession, expire_on_commit=False) +async_engine = create_async_engine( + DATABASE_URL, + echo=False, + connect_args={"check_same_thread": False} +) +@event.listens_for(async_engine.sync_engine, "connect") +def _enable_foreign_keys(dbapi_connection, connection_record): + cursor = dbapi_connection.cursor() + cursor.execute("PRAGMA foreign_keys=ON") + cursor.close() + +async_session = async_sessionmaker( + async_engine, + class_=AsyncSession, + expire_on_commit=False +) async def init_db(): try: diff --git a/database/models.py b/database/models.py index df8845e..33369c2 100644 --- a/database/models.py +++ b/database/models.py @@ -1,6 +1,6 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.asyncio import AsyncAttrs -from sqlalchemy import Column, ForeignKey, Integer, String, BigInteger, Float, Boolean, UniqueConstraint +from sqlalchemy import Column, ForeignKey, Integer, String, Float, Boolean, UniqueConstraint from sqlalchemy.orm import relationship Base = declarative_base(cls=AsyncAttrs) @@ -11,7 +11,7 @@ class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, autoincrement=True) - tg_id = Column(BigInteger, nullable=False, unique=True) + tg_id = Column(Integer, nullable=False, unique=True) username = Column(String, nullable=False) user_api = relationship("UserApi", @@ -175,4 +175,4 @@ class UserAutoTrading(Base): fee = Column(Float, nullable=True) total_fee = Column(Float, nullable=True) - user = relationship("User", back_populates="user_auto_trading") \ No newline at end of file + user = relationship("User", back_populates="user_auto_trading")