diff --git a/src/iam/schemas.py b/src/iam/schemas.py index fca76de..baf7ae3 100644 --- a/src/iam/schemas.py +++ b/src/iam/schemas.py @@ -3,7 +3,6 @@ Pydantic models for the IAM module Models follow the nomenclature of: - Sub-models: "Schema" -- Mixins: "Mixin" - Models: "" ie "IAMGetGroupPermissionsResponse" """ @@ -11,10 +10,14 @@ from typing import Optional, Annotated from pydantic import EmailStr, ConfigDict, Field -from src.service.schemas import ServiceIDMixin -from src.organisation.schemas import OrgIDMixin -from src.schemas import CustomBaseModel -from src.user.schemas import UserIDMixin +from src.schemas import ( + CustomBaseModel, + ServiceIDMixin, + OrgIDMixin, + UserIDMixin, + PermIDMixin, + GroupIDMixin, +) class UserSchema(CustomBaseModel): @@ -39,14 +42,6 @@ class GroupSchema(CustomBaseModel): name: str -class GroupIDMixin(CustomBaseModel): - group_id: int = Field(gt=0) - - -class PermIDMixin(CustomBaseModel): - permission_id: int = Field(gt=0) - - class IAMGetGroupPermissionsResponse(CustomBaseModel): permissions: list[PermissionSchema] diff --git a/src/organisation/schemas.py b/src/organisation/schemas.py index 9f120f3..c474544 100644 --- a/src/organisation/schemas.py +++ b/src/organisation/schemas.py @@ -3,25 +3,19 @@ Pydantic models for organisation module Models follow the nomenclature of: - Sub-models: "Schema" -- Mixins: "Mixin" - Models: "" ie "OrgPostOrgRequest" """ from typing import Optional -from pydantic import EmailStr, ConfigDict, Field +from pydantic import EmailStr, ConfigDict -from src.schemas import CustomBaseModel +from src.schemas import CustomBaseModel, OrgIDMixin, UserIDMixin from src.contact.schemas import ContactModel -from src.user.schemas import UserIDMixin from src.organisation.constants import Status, ContactType -class OrgIDMixin(CustomBaseModel): - organisation_id: int = Field(gt=0) - - class Questionnaire(CustomBaseModel): question_one: Optional[str] = None question_two: Optional[str] = None diff --git a/src/schemas.py b/src/schemas.py index 484031b..e281fd5 100644 --- a/src/schemas.py +++ b/src/schemas.py @@ -6,7 +6,7 @@ Exports: - ResourceName """ -from pydantic import BaseModel +from pydantic import BaseModel, Field from typing import Optional @@ -19,3 +19,24 @@ class ResourceName(CustomBaseModel): organisation: str resource: str instance: Optional[str] = None + + +### Mixins ### +class OrgIDMixin(CustomBaseModel): + organisation_id: int = Field(gt=0) + + +class GroupIDMixin(CustomBaseModel): + group_id: int = Field(gt=0) + + +class PermIDMixin(CustomBaseModel): + permission_id: int = Field(gt=0) + + +class ServiceIDMixin(CustomBaseModel): + service_id: int = Field(gt=0) + + +class UserIDMixin(CustomBaseModel): + user_id: int = Field(gt=0) diff --git a/src/service/schemas.py b/src/service/schemas.py index 47d47f5..531951f 100644 --- a/src/service/schemas.py +++ b/src/service/schemas.py @@ -3,17 +3,12 @@ Pydantic models for service module Models follow the nomenclature of: - Sub-models: "Schema" -- Mixins: "Mixin" - Models: "" ie "ServiceGetServiceResponse" """ -from pydantic import ConfigDict, Field +from pydantic import ConfigDict -from src.schemas import CustomBaseModel - - -class ServiceIDMixin(CustomBaseModel): - service_id: int = Field(gt=0) +from src.schemas import CustomBaseModel, ServiceIDMixin class ServiceSchema(CustomBaseModel): diff --git a/src/user/dependencies.py b/src/user/dependencies.py index 9d2fe02..b2f2152 100644 --- a/src/user/dependencies.py +++ b/src/user/dependencies.py @@ -15,7 +15,7 @@ from src.user.models import User from src.auth.service import claims_dependency from src.database import db_dependency -from src.user.schemas import UserIDMixin +from src.schemas import UserIDMixin async def get_user_model_claims(claims: claims_dependency, db: db_dependency): diff --git a/src/user/schemas.py b/src/user/schemas.py index 74b58dd..114239f 100644 --- a/src/user/schemas.py +++ b/src/user/schemas.py @@ -3,13 +3,9 @@ Pydantic models for the user module """ from typing import Optional -from pydantic import Field, EmailStr +from pydantic import EmailStr -from src.schemas import CustomBaseModel - - -class UserIDMixin(CustomBaseModel): - user_id: int = Field(gt=0) +from src.schemas import CustomBaseModel, OrgIDMixin class OIDCClaims(CustomBaseModel): @@ -52,13 +48,7 @@ class UserResponse(CustomBaseModel): groups: Optional[dict[str, list[dict[str, str | int]]]] = None -class OrgResponse(CustomBaseModel): - org_id: int - name: str - - -class UserPostInvitationRequest(CustomBaseModel): - organisation_id: int +class UserPostInvitationRequest(OrgIDMixin): user_email: EmailStr