diff --git a/solution/api/v1/business/schemas.py b/solution/api/v1/business/schemas.py index 2b79e40..58e6b94 100644 --- a/solution/api/v1/business/schemas.py +++ b/solution/api/v1/business/schemas.py @@ -1,8 +1,9 @@ +import re import uuid from typing import ClassVar from ninja import ModelSchema, Schema -from pydantic import EmailStr +from pydantic import EmailStr, field_validator from apps.business.models import Business @@ -23,14 +24,21 @@ class BusinessSignUpOut(Schema): company_id: uuid.UUID -class BusinessSignInIn(ModelSchema): +class BusinessSignInIn(Schema): email: EmailStr + password: str - class Meta: - model = Business - fields: ClassVar[list[str]] = [ - Business.password.field.name, - ] + @field_validator("password") + def validate_password(cls, value: str) -> str: # noqa: N805 + pattern = r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,60}$" # noqa: E501 + if not re.match(pattern, value): + e = ( + "Password must contain at least 8 characters, one uppercase " + "letter, one lowercase letter, one number, and one special " + "character (@$!%*?&)." + ) + raise ValueError(e) + return value class BusinessSignInOut(Schema):