|
1 | 1 | from datetime import datetime |
2 | 2 | from typing import Any, ClassVar, Self |
3 | 3 |
|
4 | | -from pydantic import EmailStr, Field, HttpUrl, PrivateAttr, SecretStr, computed_field, field_validator, model_validator |
| 4 | +from pydantic import EmailStr, Field, HttpUrl, PrivateAttr, SecretStr, model_validator |
5 | 5 | from sqlalchemy.ext.asyncio.session import AsyncSession |
6 | 6 |
|
7 | 7 | from futuramaapi.core import feature_flags, settings |
|
11 | 11 | TemplateBodyMixin, |
12 | 12 | ) |
13 | 13 | from futuramaapi.repositories import ModelDoesNotExistError |
14 | | -from futuramaapi.repositories.models import AuthSessionModel, LinkModel, UserModel |
15 | | -from futuramaapi.routers.exceptions import ModelExistsError, ModelNotFoundError |
| 14 | +from futuramaapi.repositories.models import AuthSessionModel, UserModel |
| 15 | +from futuramaapi.routers.exceptions import ModelNotFoundError |
16 | 16 | from futuramaapi.routers.rest.tokens.schemas import DecodedUserToken |
17 | 17 |
|
18 | 18 |
|
@@ -55,37 +55,6 @@ class UserPasswordError(UserBaseError): ... |
55 | 55 | class UserAlreadyActivatedError(UserBaseError): ... |
56 | 56 |
|
57 | 57 |
|
58 | | -class UserUpdateRequest(BaseModel): |
59 | | - name: str | None = Field( |
60 | | - min_length=1, |
61 | | - max_length=64, |
62 | | - default=None, |
63 | | - ) |
64 | | - surname: str | None = Field( |
65 | | - min_length=1, |
66 | | - max_length=64, |
67 | | - default=None, |
68 | | - ) |
69 | | - middle_name: str | None = Field( |
70 | | - default=None, |
71 | | - min_length=1, |
72 | | - max_length=64, |
73 | | - ) |
74 | | - password: SecretStr | None = Field( |
75 | | - default=None, |
76 | | - min_length=8, |
77 | | - max_length=128, |
78 | | - ) |
79 | | - is_subscribed: bool | None = None |
80 | | - |
81 | | - @field_validator("password", mode="after") |
82 | | - @classmethod |
83 | | - def hash_password(cls, value: SecretStr | None, /) -> SecretStr | None: |
84 | | - if value is None: |
85 | | - return None |
86 | | - return SecretStr(cls.hasher.encode(value.get_secret_value())) |
87 | | - |
88 | | - |
89 | 58 | class UserActivateRequest(BaseModel): |
90 | 59 | is_confirmed: bool |
91 | 60 |
|
@@ -211,51 +180,3 @@ async def reset_password( |
211 | 180 | "password": password.get_secret_value(), |
212 | 181 | }, |
213 | 182 | ) |
214 | | - |
215 | | - |
216 | | -class Link(BaseModel, BaseModelDatabaseMixin): |
217 | | - model: ClassVar[type[LinkModel]] = LinkModel |
218 | | - |
219 | | - url: HttpUrl = Field( |
220 | | - examples=[ |
221 | | - "https://example.com", |
222 | | - ], |
223 | | - ) |
224 | | - shortened: str = Field( |
225 | | - examples=[ |
226 | | - "LWlWthH", |
227 | | - ], |
228 | | - ) |
229 | | - created_at: datetime |
230 | | - counter: int |
231 | | - path_prefix: ClassVar[str] = "s" |
232 | | - |
233 | | - @computed_field( # type: ignore[misc] |
234 | | - examples=[ |
235 | | - settings.build_url(path=f"{path_prefix}/LWlWthH", is_static=False).unicode_string(), |
236 | | - ], |
237 | | - return_type=str, |
238 | | - ) |
239 | | - @property |
240 | | - def shortened_url(self) -> str: |
241 | | - return settings.build_url(path=f"{self.path_prefix}/{self.shortened}", is_static=False).unicode_string() |
242 | | - |
243 | | - @classmethod |
244 | | - async def create( |
245 | | - cls, |
246 | | - session: AsyncSession, |
247 | | - data: BaseModel, |
248 | | - /, |
249 | | - extra_fields: dict[ |
250 | | - str, |
251 | | - Any, |
252 | | - ] |
253 | | - | None = None, |
254 | | - ) -> Self: |
255 | | - for _ in range(3): |
256 | | - try: |
257 | | - return await super().create(session, data, extra_fields=extra_fields) |
258 | | - except ModelExistsError: |
259 | | - continue |
260 | | - |
261 | | - raise ModelExistsError() from None |
0 commit comments