Skip to content

Commit 248df33

Browse files
Refactor: Исправлены datetime объекты с timezone в CRUD и моделях. Обновлена валидация схем вопросов (min_length вместо min_items).
1 parent 5afa265 commit 248df33

3 files changed

Lines changed: 11 additions & 9 deletions

File tree

src/crud/crud_research.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import json
2-
from datetime import datetime
2+
from datetime import datetime, timezone
33
from typing import Any, Dict, List, Optional
44
from uuid import UUID
55

@@ -76,7 +76,7 @@ async def update_research_type(
7676
if field in update_data:
7777
setattr(research_type_db, field, update_data[field])
7878

79-
research_type_db.updated_at = datetime.utcnow()
79+
research_type_db.updated_at = datetime.now(timezone.utc)
8080

8181
try:
8282
session.add(research_type_db)
@@ -163,7 +163,7 @@ async def update_instance(
163163

164164
# Если статус меняется на завершенный, устанавливаем время завершения
165165
if update_data.get('status') == 'COMPLETED' and not instance_db.completed_at:
166-
update_data['completed_at'] = datetime.utcnow()
166+
update_data['completed_at'] = datetime.now(timezone.utc)
167167

168168
for field in instance_data:
169169
if field in update_data:

src/models/research.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime
1+
from datetime import datetime, timezone
22
from uuid import UUID
33

44
from sqlalchemy import Enum, ForeignKey, Text
@@ -41,8 +41,10 @@ class ResearchType(BaseTabitModel):
4141
ForeignKey('companyuser.id', ondelete='SET NULL'),
4242
nullable=True,
4343
)
44-
created_at: Mapped[datetime] = mapped_column(default=datetime.utcnow)
45-
updated_at: Mapped[datetime] = mapped_column(default=datetime.utcnow, onupdate=datetime.utcnow)
44+
created_at: Mapped[datetime] = mapped_column(default=datetime.now(timezone.utc))
45+
updated_at: Mapped[datetime] = mapped_column(
46+
default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc)
47+
)
4648

4749
def __repr__(self):
4850
return (
@@ -84,7 +86,7 @@ class ResearchInstance(BaseTabitModel):
8486
status: Mapped[SurveysStatus] = mapped_column(
8587
Enum(SurveysStatus), default=SurveysStatus.IN_PROGRESS
8688
)
87-
started_at: Mapped[datetime] = mapped_column(default=datetime.utcnow)
89+
started_at: Mapped[datetime] = mapped_column(default=datetime.now(timezone.utc))
8890
completed_at: Mapped[datetime] = mapped_column(nullable=True)
8991
answers: Mapped[str] = mapped_column(Text, nullable=True) # JSON строка с ответами
9092

src/schemas/research.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class ResearchTypeBaseSchema(BaseModel):
3232

3333
title: str = Field(..., min_length=1, max_length=255, description='Заголовок опроса')
3434
description: Optional[str] = Field(None, max_length=1000, description='Описание опроса')
35-
questions: List[QuestionSchema] = Field(..., min_items=1, description='Список вопросов')
35+
questions: List[QuestionSchema] = Field(..., min_length=1, description='Список вопросов')
3636
is_active: bool = Field(default=True, description='Активен ли тип опроса')
3737

3838
@field_validator('questions')
@@ -70,7 +70,7 @@ class ResearchTypeUpdateSchema(BaseModel):
7070

7171
title: Optional[str] = Field(None, min_length=1, max_length=255)
7272
description: Optional[str] = Field(None, max_length=1000)
73-
questions: Optional[List[QuestionSchema]] = Field(None, min_items=1)
73+
questions: Optional[List[QuestionSchema]] = Field(None, min_length=1)
7474
is_active: Optional[bool] = None
7575

7676
model_config = ConfigDict(extra='forbid')

0 commit comments

Comments
 (0)