mirror of
https://gitlab.com/megazordpobeda/DataRush.git
synced 2026-05-22 23:17:09 +00:00
Merge branch 'master' of gitlab.prodcontest.ru:team-15/project
This commit is contained in:
@@ -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} />
|
||||
|
||||
Reference in New Issue
Block a user