From 57ed2d6d2a8044ea4d7bf632e6d76f8383f41c91 Mon Sep 17 00:00:00 2001 From: gitfresnel <151745312+gitfresnel@users.noreply.github.com> Date: Wed, 26 Mar 2025 20:44:56 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D1=8D=D0=BA=D1=81=D0=BA=D0=BB=D1=8E=D0=B7?= =?UTF-8?q?=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- migrations/versions/f8c57101c0f6_init.py | 2 +- userdata_api/models/db.py | 1 + userdata_api/routes/user.py | 3 +-- userdata_api/schemas/param.py | 2 ++ userdata_api/utils/user.py | 11 ++++++----- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/migrations/versions/f8c57101c0f6_init.py b/migrations/versions/f8c57101c0f6_init.py index 59a0ef0..9812c07 100644 --- a/migrations/versions/f8c57101c0f6_init.py +++ b/migrations/versions/f8c57101c0f6_init.py @@ -1,7 +1,7 @@ """Init Revision ID: f8c57101c0f6 -Revises: +Revises: Create Date: 2023-05-09 12:48:25.550608 """ diff --git a/userdata_api/models/db.py b/userdata_api/models/db.py index 049dcfd..2ba3da5 100644 --- a/userdata_api/models/db.py +++ b/userdata_api/models/db.py @@ -57,6 +57,7 @@ class Param(BaseDbModel): а параметры эти могут лежать в категории "контакты" """ + is_public: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False) visible_in_user_response: Mapped[bool] = mapped_column(Boolean, default=True) name: Mapped[str] = mapped_column(String) category_id: Mapped[int] = mapped_column(Integer, ForeignKey(Category.id)) diff --git a/userdata_api/routes/user.py b/userdata_api/routes/user.py index e74b10d..3b64f0a 100644 --- a/userdata_api/routes/user.py +++ b/userdata_api/routes/user.py @@ -18,7 +18,6 @@ @user.get("/{id}", response_model=UserInfoGet) async def get_user_info( id: int, - additional_data: list[int] = Query(default=[]), user: dict[str, Any] = Depends(UnionAuth(scopes=[], allow_none=False, auto_error=True)), ) -> UserInfoGet: """ @@ -37,7 +36,7 @@ async def get_user_info( } """ - return UserInfoGet.model_validate(await get(id, user, additional_data)) + return UserInfoGet.model_validate(await get(id, user)) @user.post("/{id}", response_model=StatusResponseModel) diff --git a/userdata_api/schemas/param.py b/userdata_api/schemas/param.py index f0c8df3..7a4bc01 100644 --- a/userdata_api/schemas/param.py +++ b/userdata_api/schemas/param.py @@ -6,6 +6,7 @@ class ParamPost(Base): + is_public: bool = False visible_in_user_response: bool = True name: constr(min_length=1) is_required: bool @@ -15,6 +16,7 @@ class ParamPost(Base): class ParamPatch(Base): + is_public: bool = False visible_in_user_response: bool = True name: constr(min_length=1) | None = None is_required: bool | None = None diff --git a/userdata_api/utils/user.py b/userdata_api/utils/user.py index a65b285..d26328b 100644 --- a/userdata_api/utils/user.py +++ b/userdata_api/utils/user.py @@ -113,7 +113,7 @@ async def get_users_info( user_ids: list[int], category_ids: list[int] | None, user: dict[str, int | list[dict[str, str | int]]], - additional_data: list[int], + additional_data: list[int] | None = None, ) -> list[dict[str, str | None]]: """. Возвращает информацию о данных пользователей в указанных категориях @@ -123,6 +123,8 @@ async def get_users_info( :param user: Сессия выполняющего запрос данных :return: Список словарей содержащих id пользователя, категорию, параметр категории и значение этого параметра у пользователя """ + if additional_data is None: + additional_data = [] is_single_user = category_ids is None scope_names = [scope["name"] for scope in user["session_scopes"]] param_dict: dict[Param, dict[int, list[Info] | Info | None] | None] = {} @@ -152,6 +154,7 @@ async def get_users_info( info.category.read_scope and info.category.read_scope not in scope_names and (not is_single_user or info.owner_id != user["id"]) + and not info.param.is_public ): continue if info.param not in param_dict: @@ -229,9 +232,7 @@ async def get_users_info_batch( return UsersInfoGet(items=await get_users_info(user_ids, category_ids, user, additional_data)) -async def get_user_info( - user_id: int, user: dict[str, int | list[dict[str, str | int]]], additional_data: list[int] -) -> UserInfoGet: +async def get_user_info(user_id: int, user: dict[str, int | list[dict[str, str | int]]]) -> UserInfoGet: """Возвращает информауию о пользователе в соотетствии с переданным токеном. Пользователь может прочитать любую информацию о себе @@ -243,7 +244,7 @@ async def get_user_info( :return: Список словарей содержащих категорию, параметр категории и значение этого параметра у пользователя """ - result = await get_users_info([user_id], None, user, additional_data) + result = await get_users_info([user_id], None, user) for value in result: del value["user_id"] return UserInfoGet(items=result) From 951180c251b0ef2757496652a90d09934121a3a7 Mon Sep 17 00:00:00 2001 From: gitfresnel <151745312+gitfresnel@users.noreply.github.com> Date: Wed, 26 Mar 2025 20:56:35 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D1=8D=D0=BA=D1=81=D0=BA=D0=BB=D1=8E=D0=B7?= =?UTF-8?q?=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...911d58459b_add_is_public_field_to_param.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 migrations/versions/fc911d58459b_add_is_public_field_to_param.py diff --git a/migrations/versions/fc911d58459b_add_is_public_field_to_param.py b/migrations/versions/fc911d58459b_add_is_public_field_to_param.py new file mode 100644 index 0000000..14e8f7d --- /dev/null +++ b/migrations/versions/fc911d58459b_add_is_public_field_to_param.py @@ -0,0 +1,29 @@ +"""add_is_public_field_to_param + +Revision ID: fc911d58459b +Revises: 5a6490c55c81 +Create Date: 2025-03-11 21:38:50.699014 + +""" + +import sqlalchemy as sa +from alembic import op + + +# revision identifiers, used by Alembic. +revision = 'fc911d58459b' +down_revision = '5a6490c55c81' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('param', sa.Column('is_public', sa.Boolean(), nullable=False, server_default=sa.false())) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('param', 'is_public') + # ### end Alembic commands ### From 614527b670b4e53204a7ab9c3385999bce97f40a Mon Sep 17 00:00:00 2001 From: gitfresnel <151745312+gitfresnel@users.noreply.github.com> Date: Fri, 28 Mar 2025 22:08:31 +0300 Subject: [PATCH 3/6] Delete migrations/versions/f8c57101c0f6_init.py --- migrations/versions/f8c57101c0f6_init.py | 85 ------------------------ 1 file changed, 85 deletions(-) delete mode 100644 migrations/versions/f8c57101c0f6_init.py diff --git a/migrations/versions/f8c57101c0f6_init.py b/migrations/versions/f8c57101c0f6_init.py deleted file mode 100644 index 9812c07..0000000 --- a/migrations/versions/f8c57101c0f6_init.py +++ /dev/null @@ -1,85 +0,0 @@ -"""Init - -Revision ID: f8c57101c0f6 -Revises: -Create Date: 2023-05-09 12:48:25.550608 - -""" - -import sqlalchemy as sa -from alembic import op - - -revision = 'f8c57101c0f6' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - op.create_table( - 'category', - sa.Column('name', sa.String(), nullable=False), - sa.Column('read_scope', sa.String(), nullable=True), - sa.Column('update_scope', sa.String(), nullable=True), - sa.Column('create_ts', sa.DateTime(), nullable=False), - sa.Column('modify_ts', sa.DateTime(), nullable=False), - sa.Column('is_deleted', sa.Boolean(), nullable=False), - sa.Column('id', sa.Integer(), nullable=False), - sa.PrimaryKeyConstraint('id'), - ) - op.create_table( - 'source', - sa.Column('name', sa.String(), nullable=False), - sa.Column('trust_level', sa.Integer(), nullable=False), - sa.Column('create_ts', sa.DateTime(), nullable=False), - sa.Column('modify_ts', sa.DateTime(), nullable=False), - sa.Column('is_deleted', sa.Boolean(), nullable=False), - sa.Column('id', sa.Integer(), nullable=False), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('name'), - ) - op.create_table( - 'param', - sa.Column('name', sa.String(), nullable=False), - sa.Column('category_id', sa.Integer(), nullable=False), - sa.Column('is_required', sa.Boolean(), nullable=False), - sa.Column('changeable', sa.Boolean(), nullable=False), - sa.Column('type', sa.Enum('ALL', 'LAST', 'MOST_TRUSTED', name='viewtype', native_enum=False), nullable=False), - sa.Column('create_ts', sa.DateTime(), nullable=False), - sa.Column('modify_ts', sa.DateTime(), nullable=False), - sa.Column('is_deleted', sa.Boolean(), nullable=False), - sa.Column('id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint( - ['category_id'], - ['category.id'], - ), - sa.PrimaryKeyConstraint('id'), - ) - op.create_table( - 'info', - sa.Column('param_id', sa.Integer(), nullable=False), - sa.Column('source_id', sa.Integer(), nullable=False), - sa.Column('owner_id', sa.Integer(), nullable=False), - sa.Column('value', sa.String(), nullable=False), - sa.Column('create_ts', sa.DateTime(), nullable=False), - sa.Column('modify_ts', sa.DateTime(), nullable=False), - sa.Column('is_deleted', sa.Boolean(), nullable=False), - sa.Column('id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint( - ['param_id'], - ['param.id'], - ), - sa.ForeignKeyConstraint( - ['source_id'], - ['source.id'], - ), - sa.PrimaryKeyConstraint('id'), - ) - - -def downgrade(): - op.drop_table('info') - op.drop_table('param') - op.drop_table('source') - op.drop_table('category') From f6dcb0d21620e83fa3508417cd73b3597e2244c0 Mon Sep 17 00:00:00 2001 From: gitfresnel <151745312+gitfresnel@users.noreply.github.com> Date: Fri, 28 Mar 2025 22:11:12 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D1=8D=D0=BA=D1=81=D0=BA=D0=BB=D1=8E=D0=B7?= =?UTF-8?q?=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../versions/fc911d58459b_add_is_public_field_to_param.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/migrations/versions/fc911d58459b_add_is_public_field_to_param.py b/migrations/versions/fc911d58459b_add_is_public_field_to_param.py index 14e8f7d..89c903b 100644 --- a/migrations/versions/fc911d58459b_add_is_public_field_to_param.py +++ b/migrations/versions/fc911d58459b_add_is_public_field_to_param.py @@ -18,9 +18,8 @@ def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### op.add_column('param', sa.Column('is_public', sa.Boolean(), nullable=False, server_default=sa.false())) - # ### end Alembic commands ### + def downgrade(): From 8ec13d7db3e483c71bece72b442d22f8188d3ade Mon Sep 17 00:00:00 2001 From: gitfresnel <151745312+gitfresnel@users.noreply.github.com> Date: Fri, 28 Mar 2025 22:14:05 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D1=8D=D0=BA=D1=81=D0=BA=D0=BB=D1=8E=D0=B7?= =?UTF-8?q?=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- migrations/versions/fc911d58459b_add_is_public_field_to_param.py | 1 - 1 file changed, 1 deletion(-) diff --git a/migrations/versions/fc911d58459b_add_is_public_field_to_param.py b/migrations/versions/fc911d58459b_add_is_public_field_to_param.py index 89c903b..8f17465 100644 --- a/migrations/versions/fc911d58459b_add_is_public_field_to_param.py +++ b/migrations/versions/fc911d58459b_add_is_public_field_to_param.py @@ -21,7 +21,6 @@ def upgrade(): op.add_column('param', sa.Column('is_public', sa.Boolean(), nullable=False, server_default=sa.false())) - def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.drop_column('param', 'is_public') From 7da198e876ced5f6972595ddbf26a77b6fbb5751 Mon Sep 17 00:00:00 2001 From: gitfresnel <151745312+gitfresnel@users.noreply.github.com> Date: Fri, 28 Mar 2025 22:23:47 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D1=8D=D0=BA=D1=81=D0=BA=D0=BB=D1=8E=D0=B7?= =?UTF-8?q?=D0=B8=D0=B2=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- migrations/versions/f8c57101c0f6_init.py | 85 ++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 migrations/versions/f8c57101c0f6_init.py diff --git a/migrations/versions/f8c57101c0f6_init.py b/migrations/versions/f8c57101c0f6_init.py new file mode 100644 index 0000000..9812c07 --- /dev/null +++ b/migrations/versions/f8c57101c0f6_init.py @@ -0,0 +1,85 @@ +"""Init + +Revision ID: f8c57101c0f6 +Revises: +Create Date: 2023-05-09 12:48:25.550608 + +""" + +import sqlalchemy as sa +from alembic import op + + +revision = 'f8c57101c0f6' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + 'category', + sa.Column('name', sa.String(), nullable=False), + sa.Column('read_scope', sa.String(), nullable=True), + sa.Column('update_scope', sa.String(), nullable=True), + sa.Column('create_ts', sa.DateTime(), nullable=False), + sa.Column('modify_ts', sa.DateTime(), nullable=False), + sa.Column('is_deleted', sa.Boolean(), nullable=False), + sa.Column('id', sa.Integer(), nullable=False), + sa.PrimaryKeyConstraint('id'), + ) + op.create_table( + 'source', + sa.Column('name', sa.String(), nullable=False), + sa.Column('trust_level', sa.Integer(), nullable=False), + sa.Column('create_ts', sa.DateTime(), nullable=False), + sa.Column('modify_ts', sa.DateTime(), nullable=False), + sa.Column('is_deleted', sa.Boolean(), nullable=False), + sa.Column('id', sa.Integer(), nullable=False), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('name'), + ) + op.create_table( + 'param', + sa.Column('name', sa.String(), nullable=False), + sa.Column('category_id', sa.Integer(), nullable=False), + sa.Column('is_required', sa.Boolean(), nullable=False), + sa.Column('changeable', sa.Boolean(), nullable=False), + sa.Column('type', sa.Enum('ALL', 'LAST', 'MOST_TRUSTED', name='viewtype', native_enum=False), nullable=False), + sa.Column('create_ts', sa.DateTime(), nullable=False), + sa.Column('modify_ts', sa.DateTime(), nullable=False), + sa.Column('is_deleted', sa.Boolean(), nullable=False), + sa.Column('id', sa.Integer(), nullable=False), + sa.ForeignKeyConstraint( + ['category_id'], + ['category.id'], + ), + sa.PrimaryKeyConstraint('id'), + ) + op.create_table( + 'info', + sa.Column('param_id', sa.Integer(), nullable=False), + sa.Column('source_id', sa.Integer(), nullable=False), + sa.Column('owner_id', sa.Integer(), nullable=False), + sa.Column('value', sa.String(), nullable=False), + sa.Column('create_ts', sa.DateTime(), nullable=False), + sa.Column('modify_ts', sa.DateTime(), nullable=False), + sa.Column('is_deleted', sa.Boolean(), nullable=False), + sa.Column('id', sa.Integer(), nullable=False), + sa.ForeignKeyConstraint( + ['param_id'], + ['param.id'], + ), + sa.ForeignKeyConstraint( + ['source_id'], + ['source.id'], + ), + sa.PrimaryKeyConstraint('id'), + ) + + +def downgrade(): + op.drop_table('info') + op.drop_table('param') + op.drop_table('source') + op.drop_table('category')