Skip to content

Feat/infrastructure module - #79

Draft
ShavrinAleksei wants to merge 83 commits into
developfrom
feat/infrastructure-module
Draft

Feat/infrastructure module#79
ShavrinAleksei wants to merge 83 commits into
developfrom
feat/infrastructure-module

Conversation

@ShavrinAleksei

Copy link
Copy Markdown
Contributor

Summary

Зависит от #78
Вперед не мержить

Type

  • Release
  • Feature
  • Fix
  • Security
  • Docs
  • Ops
  • Internal
  • Breaking change

Changes

Verification

  • just check

Docs

  • Docs updated (if needed)

Tests

  • Tests added/updated (if needed)

Changelog

  • Added changelog fragment in changelog.d/

Шаврин Алексей added 30 commits July 21, 2026 16:25
@ShavrinAleksei ShavrinAleksei added this to the v1.0.0 milestone Aug 6, 2026
@ShavrinAleksei ShavrinAleksei self-assigned this Aug 6, 2026
@ShavrinAleksei ShavrinAleksei added the enhancement Changes to application logic, new features, or code updates that affect system behavior. label Aug 6, 2026
@github-project-automation github-project-automation Bot moved this to Todo in Roadmap Aug 6, 2026
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 309 files, which is 209 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c59eec29-fc7a-4f22-9c0f-aabc329f3ad9

📥 Commits

Reviewing files that changed from the base of the PR and between 713bcfb and eef8fcc.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (309)
  • .env.example
  • .github/workflows/publish-docs.yaml
  • .pre-commit-config.yaml
  • alembic.ini
  • changelog.d/+0df466b4.ops.md
  • changelog.d/+74af07b6.ops.md
  • changelog.d/+babd93df.feat.md
  • changelog.d/+d0wdgm32.feat.md
  • changelog.d/+e1e8ce56.feat.md
  • changelog.d/+ecdfa744.ops.md
  • changelog.d/+fcc99b5f.ops.md
  • docker-compose.yml
  • docs/contributing.md
  • hatch.toml
  • justfile
  • mkdocs.yaml
  • prek.toml
  • pyproject.toml
  • pytest.toml
  • ruff.toml
  • src/app/__init__.py
  • src/app/__meta__.py
  • src/app/interface/__init__.py
  • src/app/interface/http/__init__.py
  • src/app/interface/http/asgi.py
  • src/app/interface/http/controller/__init__.py
  • src/app/interface/http/controller/identity/__init__.py
  • src/app/interface/http/controller/identity/auth.py
  • src/app/interface/http/controller/identity/user.py
  • src/app/interface/http/controller/infrastructure/__init__.py
  • src/app/interface/http/controller/infrastructure/metrics.py
  • src/app/interface/http/controller/parcel/__init__.py
  • src/app/interface/http/controller/parcel/parcel.py
  • src/app/interface/http/controller/system.py
  • src/app/interface/http/controller/topography/__init__.py
  • src/app/interface/http/controller/topography/metrics.py
  • src/app/interface/http/di.py
  • src/app/interface/http/lifespan.py
  • src/app/interface/http/middleware.py
  • src/app/interface/http/router/__init__.py
  • src/app/interface/http/router/api_v1_router.py
  • src/app/interface/http/router/identity.py
  • src/app/interface/http/router/infrastructure.py
  • src/app/interface/http/router/parcel.py
  • src/app/interface/http/router/topography.py
  • src/app/interface/http/schema/__init__.py
  • src/app/interface/http/schema/current_user.py
  • src/app/interface/http/schema/geojson.py
  • src/app/interface/http/schema/identity.py
  • src/app/interface/http/schema/infrastructure.py
  • src/app/interface/http/schema/parcel.py
  • src/app/interface/http/schema/system.py
  • src/app/interface/http/schema/topography.py
  • src/app/interface/http/util/__init__.py
  • src/app/interface/http/util/error_mappings.py
  • src/app/interface/http/util/exception_handlers.py
  • src/app/interface/http/util/guards.py
  • src/app/interface/http/util/response.py
  • src/app/migrations/README
  • src/app/migrations/env.py
  • src/app/migrations/script.py.mako
  • src/app/migrations/versions/identity/0001_5c6fdf8c54b2_add_identity_users_table.py
  • src/app/migrations/versions/parcel/0001_15c4a02c5334_add_parcel_parcels_table.py
  • src/app/migrations/versions/platform/0001_fd780af9c921_create_ci_text_collation.py
  • src/app/migrations/versions/platform/0002_ef70c85c6229_add_postgis_extension.py
  • src/app/migrations/versions/topography/0001_674e5b6df11e_add_topography_metrics_table.py
  • src/app/module/__init__.py
  • src/app/module/identity/__init__.py
  • src/app/module/identity/application/__init__.py
  • src/app/module/identity/application/dto/__init__.py
  • src/app/module/identity/application/dto/command/__init__.py
  • src/app/module/identity/application/dto/command/authenticate_user.py
  • src/app/module/identity/application/dto/command/get_current_user_by_token.py
  • src/app/module/identity/application/dto/command/get_user.py
  • src/app/module/identity/application/dto/command/refresh_token.py
  • src/app/module/identity/application/dto/command/register_user.py
  • src/app/module/identity/application/dto/response/__init__.py
  • src/app/module/identity/application/dto/response/token.py
  • src/app/module/identity/application/dto/response/user.py
  • src/app/module/identity/application/error.py
  • src/app/module/identity/application/port/__init__.py
  • src/app/module/identity/application/port/password_hasher.py
  • src/app/module/identity/application/port/token_service.py
  • src/app/module/identity/application/port/user_repository.py
  • src/app/module/identity/application/use_case/__init__.py
  • src/app/module/identity/application/use_case/authenticate_user.py
  • src/app/module/identity/application/use_case/get_current_user_by_token.py
  • src/app/module/identity/application/use_case/get_user.py
  • src/app/module/identity/application/use_case/refresh_token.py
  • src/app/module/identity/application/use_case/register_user.py
  • src/app/module/identity/di.py
  • src/app/module/identity/domain/__init__.py
  • src/app/module/identity/domain/entity/__init__.py
  • src/app/module/identity/domain/entity/user.py
  • src/app/module/identity/domain/value_object/__init__.py
  • src/app/module/identity/domain/value_object/hashed_password.py
  • src/app/module/identity/domain/value_object/password.py
  • src/app/module/identity/domain/value_object/user_id.py
  • src/app/module/identity/domain/value_object/username.py
  • src/app/module/identity/infrastructure/__init__.py
  • src/app/module/identity/infrastructure/model/__init__.py
  • src/app/module/identity/infrastructure/model/user_model.py
  • src/app/module/identity/infrastructure/repository/__init__.py
  • src/app/module/identity/infrastructure/repository/postgres_user_repository.py
  • src/app/module/identity/infrastructure/security/__init__.py
  • src/app/module/identity/infrastructure/security/bcrypt_password_hasher.py
  • src/app/module/identity/infrastructure/security/jwt_token_service.py
  • src/app/module/identity/interface/__init__.py
  • src/app/module/identity/interface/internal/__init__.py
  • src/app/module/identity/interface/internal/api.py
  • src/app/module/identity/interface/internal/dto.py
  • src/app/module/identity/interface/internal/port.py
  • src/app/module/infrastructure/__init__.py
  • src/app/module/infrastructure/application/__init__.py
  • src/app/module/infrastructure/application/dto/__init__.py
  • src/app/module/infrastructure/application/dto/command/__init__.py
  • src/app/module/infrastructure/application/dto/command/calculate_infrastructure_metrics.py
  • src/app/module/infrastructure/application/dto/command/category_request.py
  • src/app/module/infrastructure/application/dto/command/get_infrastructure_metrics.py
  • src/app/module/infrastructure/application/dto/response/__init__.py
  • src/app/module/infrastructure/application/dto/response/category_info.py
  • src/app/module/infrastructure/application/dto/response/category_metrics.py
  • src/app/module/infrastructure/application/dto/response/infrastructure_metrics.py
  • src/app/module/infrastructure/application/error.py
  • src/app/module/infrastructure/application/port/__init__.py
  • src/app/module/infrastructure/application/port/buffer_service.py
  • src/app/module/infrastructure/application/port/infrastructure_metrics_service.py
  • src/app/module/infrastructure/application/port/local_infrastructure_repository.py
  • src/app/module/infrastructure/application/port/metrics_repository.py
  • src/app/module/infrastructure/application/use_case/__init__.py
  • src/app/module/infrastructure/application/use_case/calculate_infrastructure_metrics.py
  • src/app/module/infrastructure/application/use_case/get_avaliable_categories.py
  • src/app/module/infrastructure/application/use_case/get_infrastructure_metrics.py
  • src/app/module/infrastructure/di.py
  • src/app/module/infrastructure/domain/__init__.py
  • src/app/module/infrastructure/domain/entity/__init__.py
  • src/app/module/infrastructure/domain/entity/hospital_metrics.py
  • src/app/module/infrastructure/domain/entity/infrastructure_metrics.py
  • src/app/module/infrastructure/domain/entity/infrastructure_object.py
  • src/app/module/infrastructure/domain/entity/school_metrics.py
  • src/app/module/infrastructure/domain/entity/shop_metrics.py
  • src/app/module/infrastructure/domain/entity/transit_stop_metrics.py
  • src/app/module/infrastructure/domain/entity/water_body_metrics.py
  • src/app/module/infrastructure/domain/value_object/__init__.py
  • src/app/module/infrastructure/domain/value_object/area.py
  • src/app/module/infrastructure/domain/value_object/buffer.py
  • src/app/module/infrastructure/domain/value_object/buffer_zone.py
  • src/app/module/infrastructure/domain/value_object/category.py
  • src/app/module/infrastructure/domain/value_object/count.py
  • src/app/module/infrastructure/domain/value_object/coverage_ratio.py
  • src/app/module/infrastructure/domain/value_object/distance.py
  • src/app/module/infrastructure/domain/value_object/infrastructure_metrics_id.py
  • src/app/module/infrastructure/domain/value_object/infrastructure_object_id.py
  • src/app/module/infrastructure/domain/value_object/parcel_id.py
  • src/app/module/infrastructure/infrastructure/__init__.py
  • src/app/module/infrastructure/infrastructure/geo/__init__.py
  • src/app/module/infrastructure/infrastructure/geo/shapely_buffer_service.py
  • src/app/module/infrastructure/infrastructure/geo/shapely_infrastructure_metrics_service.py
  • src/app/module/infrastructure/infrastructure/model/__init__.py
  • src/app/module/infrastructure/infrastructure/model/hospital_metrics_model.py
  • src/app/module/infrastructure/infrastructure/model/planet_osm_point_model.py
  • src/app/module/infrastructure/infrastructure/model/planet_osm_polygon_model.py
  • src/app/module/infrastructure/infrastructure/model/school_metrics_model.py
  • src/app/module/infrastructure/infrastructure/model/shop_metrics_model.py
  • src/app/module/infrastructure/infrastructure/model/transit_stop_metrics_model.py
  • src/app/module/infrastructure/infrastructure/model/water_body_metrics_model.py
  • src/app/module/infrastructure/infrastructure/repository/__init__.py
  • src/app/module/infrastructure/infrastructure/repository/postgres_local_infrastructure_repository.py
  • src/app/module/infrastructure/infrastructure/repository/postgres_metrics_repository.py
  • src/app/module/infrastructure/interface/__init__.py
  • src/app/module/infrastructure/interface/internal/__init__.py
  • src/app/module/infrastructure/interface/internal/api.py
  • src/app/module/infrastructure/interface/internal/dto.py
  • src/app/module/infrastructure/interface/internal/port.py
  • src/app/module/parcel/__init__.py
  • src/app/module/parcel/application/__init__.py
  • src/app/module/parcel/application/dto/__init__.py
  • src/app/module/parcel/application/dto/command/__init__.py
  • src/app/module/parcel/application/dto/command/create_parcel.py
  • src/app/module/parcel/application/dto/command/delete_parcel.py
  • src/app/module/parcel/application/dto/command/get_parcel.py
  • src/app/module/parcel/application/dto/command/list_user_parcels.py
  • src/app/module/parcel/application/dto/response/__init__.py
  • src/app/module/parcel/application/dto/response/parcel.py
  • src/app/module/parcel/application/error.py
  • src/app/module/parcel/application/port/__init__.py
  • src/app/module/parcel/application/port/parcel_repository.py
  • src/app/module/parcel/application/port/polygon_service.py
  • src/app/module/parcel/application/use_case/__init__.py
  • src/app/module/parcel/application/use_case/create_parcel.py
  • src/app/module/parcel/application/use_case/delete_parcel.py
  • src/app/module/parcel/application/use_case/get_parcel.py
  • src/app/module/parcel/application/use_case/list_user_parcels.py
  • src/app/module/parcel/di.py
  • src/app/module/parcel/domain/__init__.py
  • src/app/module/parcel/domain/entity/__init__.py
  • src/app/module/parcel/domain/entity/parcel.py
  • src/app/module/parcel/domain/value_object/__init__.py
  • src/app/module/parcel/domain/value_object/owner_id.py
  • src/app/module/parcel/domain/value_object/parcel_id.py
  • src/app/module/parcel/domain/value_object/parcel_name.py
  • src/app/module/parcel/infrastructure/__init__.py
  • src/app/module/parcel/infrastructure/geo/__init__.py
  • src/app/module/parcel/infrastructure/geo/shapely_polygon_service.py
  • src/app/module/parcel/infrastructure/model/__init__.py
  • src/app/module/parcel/infrastructure/model/parcel_model.py
  • src/app/module/parcel/infrastructure/repository/__init__.py
  • src/app/module/parcel/infrastructure/repository/postgres_parcel_repository.py
  • src/app/module/parcel/interface/__init__.py
  • src/app/module/parcel/interface/internal/__init__.py
  • src/app/module/parcel/interface/internal/api.py
  • src/app/module/parcel/interface/internal/dto.py
  • src/app/module/parcel/interface/internal/port.py
  • src/app/module/shared/__init__.py
  • src/app/module/shared/application/__init__.py
  • src/app/module/shared/application/error.py
  • src/app/module/shared/application/use_case/__init__.py
  • src/app/module/shared/application/use_case/base.py
  • src/app/module/shared/domain/__init__.py
  • src/app/module/shared/domain/entity/__init__.py
  • src/app/module/shared/domain/entity/base.py
  • src/app/module/shared/domain/error.py
  • src/app/module/shared/domain/value_object/__init__.py
  • src/app/module/shared/domain/value_object/base.py
  • src/app/module/shared/domain/value_object/bounding_box.py
  • src/app/module/shared/domain/value_object/entity_id.py
  • src/app/module/shared/domain/value_object/geo_point.py
  • src/app/module/shared/domain/value_object/latitude.py
  • src/app/module/shared/domain/value_object/longitude.py
  • src/app/module/shared/domain/value_object/polygon.py
  • src/app/module/shared/interface/internal/__init__.py
  • src/app/module/shared/interface/internal/geojson.py
  • src/app/module/topography/__init__.py
  • src/app/module/topography/application/__init__.py
  • src/app/module/topography/application/dto/__init__.py
  • src/app/module/topography/application/dto/command/__init__.py
  • src/app/module/topography/application/dto/command/calculate_topography_metrics.py
  • src/app/module/topography/application/dto/command/get_topography_metrics.py
  • src/app/module/topography/application/dto/response/__init__.py
  • src/app/module/topography/application/dto/response/topography_metrics.py
  • src/app/module/topography/application/error.py
  • src/app/module/topography/application/port/__init__.py
  • src/app/module/topography/application/port/dem_metrics_service.py
  • src/app/module/topography/application/port/geometry_metrics_service.py
  • src/app/module/topography/application/port/local_dem_repository.py
  • src/app/module/topography/application/port/metrics_repository.py
  • src/app/module/topography/application/use_case/__init__.py
  • src/app/module/topography/application/use_case/calculate_topography_metrics.py
  • src/app/module/topography/application/use_case/get_topography_metrics.py
  • src/app/module/topography/di.py
  • src/app/module/topography/domain/__init__.py
  • src/app/module/topography/domain/entity/__init__.py
  • src/app/module/topography/domain/entity/topography_metrics.py
  • src/app/module/topography/domain/value_object/__init__.py
  • src/app/module/topography/domain/value_object/metric/__init__.py
  • src/app/module/topography/domain/value_object/metric/area.py
  • src/app/module/topography/domain/value_object/metric/aspect_direction.py
  • src/app/module/topography/domain/value_object/metric/compactness_index.py
  • src/app/module/topography/domain/value_object/metric/elevation.py
  • src/app/module/topography/domain/value_object/metric/elongation_index.py
  • src/app/module/topography/domain/value_object/metric/parcel_id.py
  • src/app/module/topography/domain/value_object/metric/percentage.py
  • src/app/module/topography/domain/value_object/metric/perimeter.py
  • src/app/module/topography/domain/value_object/metric/slope.py
  • src/app/module/topography/domain/value_object/metric/slope_distribution.py
  • src/app/module/topography/domain/value_object/metric/slope_percentiles.py
  • src/app/module/topography/domain/value_object/metric/topography_metrics_id.py
  • src/app/module/topography/domain/value_object/raster/__init__.py
  • src/app/module/topography/domain/value_object/raster/raster_data.py
  • src/app/module/topography/domain/value_object/raster/raster_data_array.py
  • src/app/module/topography/domain/value_object/raster/raster_resolution.py
  • src/app/module/topography/infrastructure/__init__.py
  • src/app/module/topography/infrastructure/dem/__init__.py
  • src/app/module/topography/infrastructure/dem/numpy_dem_metrics_service.py
  • src/app/module/topography/infrastructure/dem/s3_dem_repository.py
  • src/app/module/topography/infrastructure/geo/__init__.py
  • src/app/module/topography/infrastructure/geo/shapely_geometry_metrics_service.py
  • src/app/module/topography/infrastructure/model/__init__.py
  • src/app/module/topography/infrastructure/model/topography_metrics_model.py
  • src/app/module/topography/infrastructure/repository/__init__.py
  • src/app/module/topography/infrastructure/repository/postgres_metrics_repository.py
  • src/app/module/topography/infrastructure/repository/s3_local_dem_repository.py
  • src/app/module/topography/interface/__init__.py
  • src/app/module/topography/interface/internal/__init__.py
  • src/app/module/topography/interface/internal/api.py
  • src/app/module/topography/interface/internal/dto.py
  • src/app/module/topography/interface/internal/port.py
  • src/app/platform/config/loaders.py
  • src/app/platform/config/models.py
  • src/app/platform/constants.py
  • src/app/platform/database/__init__.py
  • src/app/platform/database/base.py
  • src/app/platform/database/engine.py
  • src/app/platform/database/repository.py
  • src/app/platform/database/session.py
  • src/app/platform/di.py
  • src/app/platform/logging.py
  • src/app/platform/storage/__init__.py
  • src/app/platform/storage/client.py
  • src/app/platform/storage/repository.py
  • src/app/platform/storage/session.py
  • tests/integration/conftest.py
  • tests/integration/interface/http/controller/test_system.py
  • tests/test_version.py
  • tests/unit/application/use_case/test_base_use_case.py
  • tests/unit/domain/entity/test_base_entity.py
  • tests/unit/domain/value_object/test_base.py
  • tests/unit/domain/value_object/test_entity_id.py
  • zensical.toml

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment on lines +62 to +68
return CalculateTopographyMetricsUseCase(
external_dem_repository=external_dem_repository,
local_dem_repository=local_dem_repository,
dem_metrics_service=dem_metrics_service,
geometry_metrics_service=geometry_metrics_service,
metrics_repository=metrics_repository,
)
lifespan) and ``S3Config`` via dependency injection.
"""
app_config = load_app_config()
return S3LocalDemRepository(s3_client=s3_client, s3_config=app_config.s3)


if TYPE_CHECKING:
from geoalchemy2 import Geometry, WKBElement

from __future__ import annotations

from typing import TYPE_CHECKING, Any, TypeVar, cast, override


if TYPE_CHECKING:
from geoalchemy2 import Geometry, WKBElement
from collections.abc import Sequence

# revision identifiers, used by Alembic.
revision: str = "5c6fdf8c54b2"


# revision identifiers, used by Alembic.
revision: str = "15c4a02c5334"

# revision identifiers, used by Alembic.
revision: str = "15c4a02c5334"
down_revision: str | Sequence[str] | None = None
# revision identifiers, used by Alembic.
revision: str = "15c4a02c5334"
down_revision: str | Sequence[str] | None = None
branch_labels: str | Sequence[str] | None = None
revision: str = "15c4a02c5334"
down_revision: str | Sequence[str] | None = None
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
@ShavrinAleksei
ShavrinAleksei changed the base branch from main to develop August 6, 2026 13:20
@ShavrinAleksei
ShavrinAleksei marked this pull request as draft August 6, 2026 13:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Changes to application logic, new features, or code updates that affect system behavior.

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

1 participant