Merge branch 'master' of gitlab.prodcontest.ru:team-15/project

This commit is contained in:
ITQ
2025-03-03 23:53:45 +03:00
5 changed files with 23 additions and 30 deletions
+14 -14
View File
@@ -82,20 +82,20 @@ class CompetitionTask(BaseModel):
def clean(self):
super().clean()
if self.correct_answer_file and self.type not in ["checker", "input"]:
raise ValidationError({
"type": "Если загружен файл правильного ответа, то тип проверки не может быть ручным"
})
elif not self.correct_answer_file and self.type == "review":
# if self.correct_answer_file and self.type not in ["checker", "input"]:
# raise ValidationError({
# "type": "Если загружен файл правильного ответа, то тип проверки не может быть ручным"
# })
if not self.correct_answer_file and self.type != "review":
raise ValidationError({
"correct_answer_file": "Загрузите правильный ответ"
})
if self.answer_file_path and not self.type == "checker":
raise ValidationError({
"type": "Укажите другой тип задания: этот не совместим с путем правильного ответа"
})
elif not self.answer_file_path and self.type == "checker":
# if self.answer_file_path and not self.type == "checker":
# raise ValidationError({
# "type": "Укажите другой тип задания: этот не совместим с путем правильного ответа"
# })
if not self.answer_file_path and self.type == "checker":
raise ValidationError({
"answer_file_path": "Введите путь правильного ответа - это нужно для корректной работы чекера"
})
@@ -104,10 +104,10 @@ class CompetitionTask(BaseModel):
raise ValidationError({
"reviewers": "Загрузите ревьюверов - кто будет проверять задания, если не они?"
})
elif self.reviewers and not self.type == "review":
raise ValidationError({
"type": "Проверьте тип - вы ввели ревьюверов, но задание не является ручным"
})
# elif self.reviewers and not self.type == "review":
# raise ValidationError({
# "type": "Проверьте тип - вы ввели ревьюверов, но задание не является ручным"
# })
def __str__(self):
@@ -55,7 +55,6 @@ export const Header = () => {
<div className="md:hidden">
<Link to="/docs">
<DropdownMenuItem>
<FileText className="h-4 w-4 mr-2" />
Материалы
</DropdownMenuItem>
</Link>
@@ -25,14 +25,7 @@ const TaskContent: React.FC<TaskContentProps> = ({ task }) => {
const attachments = attachmentsQuery.data || [];
const convertToMarkdown = (text: string): string => {
if (!text) return '';
let markdown = text.replace(/\n/g, '\n\n');
return markdown;
};
const markdownText = convertToMarkdown(task.description);
return (
<div className="flex-1 bg-white rounded-lg p-6">
@@ -45,7 +38,7 @@ const TaskContent: React.FC<TaskContentProps> = ({ task }) => {
remarkPlugins={[remarkMath, remarkGfm]}
rehypePlugins={[rehypeKatex]}
>
{markdownText}
{task.description}
</ReactMarkdown>
</div>
@@ -60,7 +60,6 @@ const CompetitionSession = () => {
setTimeout(() => {
window.location.reload();
setIsReloading(false);
}, 2500);
},
onError: (error) => {
@@ -69,7 +68,9 @@ const CompetitionSession = () => {
});
const competition = competitionQuery.data;
const tasks = tasksQuery.data || [];
const tasks = [...(tasksQuery.data || [])].sort((a, b) => {
return a.in_competition_position - b.in_competition_position;
});
const results = resultsQuery.data || [];
const isLoading = tasksQuery.isLoading || competitionQuery.isLoading;
const error = tasksQuery.error || competitionQuery.error
@@ -32,9 +32,9 @@ export function CompetitionCard({
return (
<Card
className={cn("aspect-square h-full w-auto overflow-hidden", className)}
className={cn("h-full w-full overflow-hidden flex flex-col", className)}
>
<div className="relative h-full overflow-hidden">
<div className="h-48 overflow-hidden">
<img
src={competition.image_url ? competition.image_url : '/DANO.png'}
alt={competition.title}
@@ -42,8 +42,8 @@ export function CompetitionCard({
/>
</div>
<CardContent className="p-4">
<div className="flex flex-col gap-2.5">
<CardContent className="p-4 flex-1 flex flex-col">
<div className="flex flex-col gap-2.5 h-full">
<div className="text-muted-foreground flex items-center gap-2 *:text-sm *:font-semibold">
<span>
{competition.type === CompetitionType.COMPETITIVE
@@ -67,7 +67,7 @@ export function CompetitionCard({
</h3>
{competition.type === CompetitionType.COMPETITIVE && (
<div className="text-gray-500 text-sm mt-1">
<div className="text-gray-500 text-sm mt-auto pt-2">
{competition.start_date && (
<div className="flex items-center gap-1.5">
<Clock size={14} />