Skip to content

Commit 5694eff

Browse files
committed
fix: import path
1 parent 91f707c commit 5694eff

13 files changed

Lines changed: 143 additions & 85 deletions

src/modules/authorization/infrastructure/models/permission_model.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
from uuid import UUID
22

3-
from sqlalchemy import String, UniqueConstraint, Index
3+
from sqlalchemy import Index, String, UniqueConstraint
44
from sqlalchemy.orm import Mapped, mapped_column, relationship
55

6+
from src.modules.authorization.infrastructure.models.resource_model import (
7+
AuthorizationResourceModel,
8+
)
9+
from src.modules.authorization.infrastructure.models.role_permission_model import (
10+
RolePermissionModel,
11+
)
612
from src.shared.database.mixin.timestamp import SoftDeleteMixin, TimeStampMixin
713
from src.shared.database.model import Base
814

915

1016
class PermissionModel(Base, TimeStampMixin, SoftDeleteMixin):
1117
"""Permission definition for RBAC system.
12-
18+
1319
Permissions represent specific actions on resources.
1420
Linked to authorization_resources for resource management.
1521
"""
22+
1623
__tablename__ = "permissions"
1724
__table_args__ = (
1825
UniqueConstraint("resource", "action", name="uq_permissions_resource_action"),
@@ -27,7 +34,7 @@ class PermissionModel(Base, TimeStampMixin, SoftDeleteMixin):
2734
resource: Mapped[str] = mapped_column(String(100), nullable=False)
2835
action: Mapped[str] = mapped_column(String(100), nullable=False)
2936
description: Mapped[str | None] = mapped_column(String(255), nullable=True)
30-
37+
3138
# Relationships
3239
roles: Mapped[list["RolePermissionModel"]] = relationship(
3340
back_populates="permission",

src/modules/authorization/infrastructure/models/resource_model.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1-
from sqlalchemy import String, Index
1+
from sqlalchemy import Index, String
22
from sqlalchemy.orm import Mapped, mapped_column, relationship
33

4+
from src.modules.authorization.infrastructure.models.permission_model import (
5+
PermissionModel,
6+
)
47
from src.shared.database.mixin.timestamp import SoftDeleteMixin, TimeStampMixin
58
from src.shared.database.model import Base
69

710

811
class AuthorizationResourceModel(Base, TimeStampMixin, SoftDeleteMixin):
912
"""Authorization resource definition for grouping permissions.
10-
13+
1114
Resources represent domain entities that permissions act upon.
1215
Examples: users, todos, documents, reports.
1316
"""
17+
1418
__tablename__ = "authorization_resources"
15-
__table_args__ = (
16-
Index("ix_authorization_resources_key", "key", unique=True),
17-
)
19+
__table_args__ = (Index("ix_authorization_resources_key", "key", unique=True),)
1820

1921
key: Mapped[str] = mapped_column(String(100), unique=True, nullable=False)
2022
name: Mapped[str] = mapped_column(String(150), nullable=False)
2123
description: Mapped[str | None] = mapped_column(String(255), nullable=True)
22-
24+
2325
# Relationships
2426
permissions: Mapped[list["PermissionModel"]] = relationship(
2527
back_populates="authorization_resource",

src/modules/authorization/infrastructure/models/role_model.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
1-
from sqlalchemy import String, Index
1+
from sqlalchemy import Index, String
22
from sqlalchemy.orm import Mapped, mapped_column, relationship
33

4+
from src.modules.authorization.infrastructure.models.role_permission_model import (
5+
RolePermissionModel,
6+
)
7+
from src.modules.authorization.infrastructure.models.user_has_role_model import (
8+
UserHasRoleModel,
9+
)
410
from src.shared.database.mixin.timestamp import SoftDeleteMixin, TimeStampMixin
511
from src.shared.database.model import Base
612

713

814
class RoleModel(Base, TimeStampMixin, SoftDeleteMixin):
915
"""Role definition for RBAC system.
10-
16+
1117
Roles group permissions and can be assigned to users.
1218
"""
19+
1320
__tablename__ = "roles"
14-
__table_args__ = (
15-
Index("ix_roles_name", "name", unique=True),
16-
)
21+
__table_args__ = (Index("ix_roles_name", "name", unique=True),)
1722

1823
name: Mapped[str] = mapped_column(String(100), unique=True, nullable=False)
1924
description: Mapped[str | None] = mapped_column(String(255), nullable=True)
20-
25+
2126
# Relationships
2227
permissions: Mapped[list["RolePermissionModel"]] = relationship(
2328
back_populates="role",

src/modules/authorization/infrastructure/models/role_permission_model.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
from uuid import UUID
22

3-
from sqlalchemy import String, UniqueConstraint, Index
3+
from sqlalchemy import Index, UniqueConstraint
44
from sqlalchemy.orm import Mapped, mapped_column, relationship
55

6-
from src.shared.database.mixin.timestamp import SoftDeleteMixin, TimeStampMixin
6+
from src.modules.authorization.infrastructure.models.permission_model import (
7+
PermissionModel,
8+
)
9+
from src.modules.authorization.infrastructure.models.role_model import RoleModel
710
from src.shared.database.model import Base
811

912

1013
class RolePermissionModel(Base):
1114
"""Junction table for role-to-permission assignments.
12-
15+
1316
Many-to-many relationship between roles and permissions.
1417
"""
18+
1519
__tablename__ = "role_permissions"
1620
__table_args__ = (
1721
UniqueConstraint(
@@ -25,7 +29,7 @@ class RolePermissionModel(Base):
2529

2630
role_id: Mapped[UUID] = mapped_column(nullable=False)
2731
permission_id: Mapped[UUID] = mapped_column(nullable=False)
28-
32+
2933
# Relationships
3034
role: Mapped["RoleModel"] = relationship(
3135
back_populates="permissions",

src/modules/authorization/infrastructure/models/user_has_role_model.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,32 @@
11
from uuid import UUID
22

3-
from sqlalchemy import UniqueConstraint, Index
3+
from sqlalchemy import Index, UniqueConstraint
44
from sqlalchemy.orm import Mapped, mapped_column, relationship
55

6+
from src.modules.authorization.infrastructure.models.role_model import RoleModel
7+
from src.modules.user.infrastructure.models.user_model import UserModel
68
from src.shared.database.model import Base
79

810

911
class UserHasRoleModel(Base):
1012
"""Junction table for user-to-role assignments.
11-
13+
1214
Many-to-many relationship between users and roles.
1315
Supports RBAC by linking users to their assigned roles.
1416
"""
17+
1518
__tablename__ = "user_has_roles"
1619
__table_args__ = (
17-
UniqueConstraint("user_id", "role_id", name="uq_user_has_roles_user_id_role_id"),
20+
UniqueConstraint(
21+
"user_id", "role_id", name="uq_user_has_roles_user_id_role_id"
22+
),
1823
Index("ix_user_has_roles_user_id", "user_id"),
1924
Index("ix_user_has_roles_role_id", "role_id"),
2025
)
2126

2227
user_id: Mapped[UUID] = mapped_column(nullable=False)
2328
role_id: Mapped[UUID] = mapped_column(nullable=False)
24-
29+
2530
# Relationships
2631
user: Mapped["UserModel"] = relationship(
2732
back_populates="role_assignments",

src/modules/user/infrastructure/models/refresh_token_model.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
import uuid
21
from datetime import datetime
32

4-
from sqlalchemy import Boolean, DateTime, String, Index
3+
from sqlalchemy import Boolean, DateTime, Index, String
54
from sqlalchemy.orm import Mapped, mapped_column, relationship
65

6+
from src.modules.user.infrastructure.models.user_model import UserModel
77
from src.shared.database.mixin.timestamp import SoftDeleteMixin, TimeStampMixin
88
from src.shared.database.model import Base
99

1010

1111
class UserSessionModel(Base, TimeStampMixin, SoftDeleteMixin):
1212
"""User session management for tracking active sessions.
13-
13+
1414
One-to-many relationship with users table.
1515
Stores refresh tokens, device info, and login history.
1616
"""
17+
1718
__tablename__ = "user_sessions"
1819
__table_args__ = (
1920
Index("ix_user_sessions_user_id", "user_id"),
@@ -27,26 +28,30 @@ class UserSessionModel(Base, TimeStampMixin, SoftDeleteMixin):
2728
String(36), # UUID as string for FK
2829
nullable=False,
2930
)
30-
31+
3132
# Session Token (hashed for security)
3233
refresh_token_hash: Mapped[str] = mapped_column(String(255), nullable=False)
33-
34+
3435
# Session Expiry
35-
expires_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
36-
36+
expires_at: Mapped[datetime] = mapped_column(
37+
DateTime(timezone=True), nullable=False
38+
)
39+
3740
# Device and Location Info
3841
device_info: Mapped[str | None] = mapped_column(String(500), nullable=True)
39-
ip_address: Mapped[str | None] = mapped_column(String(45), nullable=True) # IPv6 compatible
42+
ip_address: Mapped[str | None] = mapped_column(
43+
String(45), nullable=True
44+
) # IPv6 compatible
4045
user_agent: Mapped[str | None] = mapped_column(String(1000), nullable=True)
41-
46+
4247
# Session Status
4348
is_revoked: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
4449
revoked_at: Mapped[datetime | None] = mapped_column(
4550
DateTime(timezone=True),
4651
nullable=True,
4752
)
4853
revoked_reason: Mapped[str | None] = mapped_column(String(255), nullable=True)
49-
54+
5055
# Relationship
5156
user: Mapped["UserModel"] = relationship(
5257
back_populates="sessions",

src/modules/user/infrastructure/models/user_address_model.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
from sqlalchemy import String, Boolean, Index
1+
from sqlalchemy import Boolean, Index, String
22
from sqlalchemy.orm import Mapped, mapped_column, relationship
33

4+
from src.modules.user.infrastructure.models.user_model import UserModel
45
from src.shared.database.mixin.timestamp import SoftDeleteMixin, TimeStampMixin
56
from src.shared.database.model import Base
67

78

89
class UserAddressModel(Base, TimeStampMixin, SoftDeleteMixin):
910
"""User addresses supporting multiple locations.
10-
11+
1112
One-to-many relationship with users table.
1213
Supports home, billing, shipping, and custom address labels.
1314
"""
15+
1416
__tablename__ = "user_addresses"
1517
__table_args__ = (
1618
Index("ix_user_addresses_user_id", "user_id"),
@@ -23,28 +25,28 @@ class UserAddressModel(Base, TimeStampMixin, SoftDeleteMixin):
2325
String(36), # UUID as string for FK
2426
nullable=False,
2527
)
26-
28+
2729
# Address Label (home, billing, shipping, work, etc.)
2830
label: Mapped[str] = mapped_column(String(100), nullable=False)
29-
31+
3032
# Address Lines
3133
line1: Mapped[str] = mapped_column(String(255), nullable=False)
3234
line2: Mapped[str | None] = mapped_column(String(255), nullable=True)
3335
line3: Mapped[str | None] = mapped_column(String(255), nullable=True)
34-
36+
3537
# City and State
3638
city: Mapped[str] = mapped_column(String(100), nullable=False)
3739
state: Mapped[str | None] = mapped_column(String(100), nullable=True)
38-
40+
3941
# Postal Code
4042
postal_code: Mapped[str] = mapped_column(String(20), nullable=False)
41-
43+
4244
# Country (ISO 3166-1 alpha-2)
4345
country: Mapped[str] = mapped_column(String(2), nullable=False)
44-
46+
4547
# Flags
4648
is_default: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
47-
49+
4850
# Relationship
4951
user: Mapped["UserModel"] = relationship(
5052
back_populates="addresses",

src/modules/user/infrastructure/models/user_contact_model.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from enum import Enum
22

3-
from sqlalchemy import String, Boolean, Index
3+
from sqlalchemy import Boolean, Index, String
44
from sqlalchemy.orm import Mapped, mapped_column, relationship
55

6+
from src.modules.user.infrastructure.models.user_model import UserModel
67
from src.shared.database.mixin.timestamp import SoftDeleteMixin, TimeStampMixin
78
from src.shared.database.model import Base
89

@@ -18,10 +19,11 @@ class ContactType(str, Enum):
1819

1920
class UserContactModel(Base, TimeStampMixin, SoftDeleteMixin):
2021
"""User contact methods supporting multiple channels.
21-
22+
2223
One-to-many relationship with users table.
2324
Allows users to have multiple contact methods (phones, alternate emails).
2425
"""
26+
2527
__tablename__ = "user_contacts"
2628
__table_args__ = (
2729
Index("ix_user_contacts_user_id", "user_id"),
@@ -33,15 +35,15 @@ class UserContactModel(Base, TimeStampMixin, SoftDeleteMixin):
3335
String(36), # UUID as string for FK
3436
nullable=False,
3537
)
36-
38+
3739
# Contact Information
3840
contact_type: Mapped[str] = mapped_column(String(50), nullable=False)
3941
value: Mapped[str] = mapped_column(String(255), nullable=False)
40-
42+
4143
# Flags
4244
is_primary: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
4345
is_verified: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
44-
46+
4547
# Relationship
4648
user: Mapped["UserModel"] = relationship(
4749
back_populates="contacts",

0 commit comments

Comments
 (0)