Skip to content

Commit

Permalink
обновление полей модели Task
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreyHlim committed Aug 24, 2024
1 parent 6e7db95 commit 8155a4f
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 30 deletions.
42 changes: 15 additions & 27 deletions app/api_docs_responses/task.py
Original file line number Diff line number Diff line change
@@ -1,74 +1,58 @@
from app.api_docs_responses.utils_docs import (
get_200_docs, get_201_docs, get_204_docs, get_400_docs, get_401_docs,
get_404_docs,
get_403_docs, get_404_docs,
)

tasks_with_all_fields = {
'id': 0,
'difficult': 1,
'name': 'Название задачи',
'description': 'Описание задачи',
'time': '1',
'solvers': 2,
}

tasks_without_description = {
'id': 0,
'name': 'Название задачи',
}

content_tasks = {
content_task = {
'application/json': {
'examples': {
'tasks_with_all_fields': {
'summary': 'Задача со всеми заполненными полями',
'value': [tasks_with_all_fields],
},
'tasks_without_description': {
'summary': 'Задача без описания',
'value': [tasks_without_description],
}
}
}
}

content_task = {
'application/json': {
'examples': {
'task_with_all_fields': {
'summary': 'Задача со всеми заполненными полями',
'value': tasks_with_all_fields,
},
'task_without_description': {
'summary': 'Задача без описания',
'value': tasks_without_description,
}
}
}
}

get_tasks_response = {
**get_200_docs(content_tasks),
**get_200_docs(content_task),
**get_401_docs(),
**get_403_docs('Forbidden', 'Нужны права admin.'),
}

get_task_response = {
**get_200_docs(content_task),
**get_401_docs(),
**get_403_docs('Forbidden', 'Нужны права admin.'),
}

create_task_response = {
**get_201_docs(content_task),
**get_401_docs(),
**get_403_docs('Forbidden', 'Нужны права admin.'),
}

update_task_response = {
**get_200_docs(content_task),
**get_401_docs(),
**get_400_docs('Объект tasks с таким именем уже существует!'),
**get_403_docs('Forbidden', 'Нужны права admin.'),
**get_404_docs('Объект tasks не найден.'),
}

delete_task_response = {
**get_204_docs(),
**get_401_docs(),
**get_403_docs('Forbidden', 'Нужны права admin.'),
**get_404_docs('Объект tasks не найден.'),
}

Expand All @@ -84,6 +68,7 @@
Returns:
- HTTP 200 OK: Если список задач успешно получен.
- HTTP 401 Unauthorized: Если пользователь не авторизован.
- HTTP 403 Forbidden: Если прав недостаточно.
"""
)

Expand All @@ -99,6 +84,7 @@
Returns:
- HTTP 200 OK: Если задача успешно получена.
- HTTP 401 Unauthorized: Если пользователь не авторизован.
- HTTP 403 Forbidden: Если прав недостаточно.
"""
)

Expand All @@ -116,6 +102,7 @@
- HTTP 400 Bad Request: Если попытка создания задачи невозможна,
потому что задача с таким именем уже создан.
- HTTP 401 Unauthorized: Если пользователь не авторизован.
- HTTP 403 Forbidden: Если прав недостаточно.
"""
)

Expand Down Expand Up @@ -154,6 +141,7 @@
Returns:
- HTTP 204 No Content: Если задача успешно удалена.
- HTTP 401 Unauthorized: Если пользователь не авторизован.
- HTTP 403 Forbidden: Если прав недостаточно.
- HTTP 404 Not Found: Если задача с `task_id` не существует.
"""
)
55 changes: 55 additions & 0 deletions app/api_docs_responses/utils_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,61 @@
'value': {}
}
}
TASK_CREATE_VALUE = {
'all_data': {
'summary': 'Все обязательные поля задачи заполнены.',
'value': {
'name': 'Имя',
'description': 'Описание',
'difficult': 1
}
},
'not_description_data': {
'summary': 'Задача без указания описания.',
'value': {'name': 'Имя', 'difficult': 1}
},
'not_difficult_data': {
'summary': 'Задача без указания сложности.',
'value': {'name': 'Имя', 'description': 'Описание'}
},
'empty_data': {
'summary': 'Без данных.',
'description': 'Validation Error 422',
'value': {}
}
}
TASK_UPDATE_VALUE = {
'task_with_all_fields': {
'summary': 'Обновить все поля задачи.',
'value': {
'difficult': 1,
'name': 'Название задачи',
'description': 'Описание задачи',
'time': '8',
'solvers': 8
},
},
'tasks_new_name': {
'summary': 'Обновить только название задачи.',
'value': {'name': 'Новое название задачи'},
},
'tasks_new_description': {
'summary': 'Обновить только описание задачи.',
'value': {'description': 'Новое описание задачи'},
},
'tasks_new_difficult': {
'summary': 'Обновить только сложность задачи.',
'value': {'difficult': 8},
},
'tasks_new_time': {
'summary': 'Обновить только среднее время решения задачи.',
'value': {'time': '8'},
},
'tasks_new_solvers': {
'summary': 'Обновить только количество пользователей решивших задачу.',
'value': {'solvers': 8},
}
}
PROFILE_UPDATE_VALUE = {
'first_name': 'Имя',
'last_name': 'Фамилия',
Expand Down
11 changes: 10 additions & 1 deletion app/models/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from sqlalchemy import (
Column, ForeignKey, Integer, String, Table, Text, UniqueConstraint,
)
from sqlalchemy.orm import Mapped, relationship
from sqlalchemy.orm import Mapped, relationship, validates

from app.core.config import settings
from app.core.db import Base
Expand All @@ -28,10 +28,19 @@ class Task(Base):
name: str = Column(
String(length=settings.max_length_string), unique=True, nullable=False
)
difficult: int = Column(Integer, nullable=False)
description: str = Column(Text)
courses: Mapped[list[Course]] = relationship(
secondary=task_course_association, back_populates='tasks'
)
time: str = Column(String, default='0')
solvers: int = Column(Integer, nullable=False, default=0)

@validates('difficult')
def validate_difficult(self, key, value):
if value not in range(1, 10):
raise ValueError('Диапазон сложности задач: [1, 9]')
return value

def __repr__(self):
return self.name
11 changes: 9 additions & 2 deletions app/schemas/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@
class TaskCreate(BaseModel):
name: str
description: Optional[str]
difficult: int


class TaskRead(BaseModel):
id: int
name: Optional[str]
id: int = Field(serialization_alias='key')
difficult: int
name: Optional[str] = Field(serialization_alias='title')
description: Optional[str]
time: Optional[str]
solvers: int

class Config:
from_attributes = True
Expand All @@ -20,3 +24,6 @@ class Config:
class TaskUpdate(BaseModel):
name: Optional[str] = Field(None)
description: Optional[str] = Field(None)
difficult: Optional[int] = Field(None)
time: Optional[str] = Field(None)
solvers: Optional[int] = Field(None)

0 comments on commit 8155a4f

Please sign in to comment.