2026-03-27 22:20:25 +08:00
|
|
|
import {
|
|
|
|
|
Injectable,
|
|
|
|
|
NotFoundException,
|
|
|
|
|
} from '@nestjs/common';
|
|
|
|
|
import { PrismaService } from '../../prisma/prisma.service';
|
|
|
|
|
import { CreateAttachmentDto } from './dto/create-attachment.dto';
|
|
|
|
|
import { UpdateAttachmentDto } from './dto/update-attachment.dto';
|
|
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
export class AttachmentsService {
|
|
|
|
|
constructor(private prisma: PrismaService) {}
|
|
|
|
|
|
|
|
|
|
async create(createAttachmentDto: CreateAttachmentDto, creatorId?: number) {
|
|
|
|
|
// 验证活动是否存在
|
|
|
|
|
const contest = await this.prisma.contest.findUnique({
|
|
|
|
|
where: { id: createAttachmentDto.contestId },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!contest) {
|
|
|
|
|
throw new NotFoundException('活动不存在');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const data: any = {
|
|
|
|
|
...createAttachmentDto,
|
|
|
|
|
size: createAttachmentDto.size || '0',
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (creatorId) {
|
|
|
|
|
data.creator = creatorId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return this.prisma.contestAttachment.create({
|
|
|
|
|
data,
|
|
|
|
|
include: {
|
|
|
|
|
contest: true,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async findAll(contestId: number) {
|
|
|
|
|
return this.prisma.contestAttachment.findMany({
|
|
|
|
|
where: {
|
|
|
|
|
contestId,
|
|
|
|
|
validState: 1,
|
|
|
|
|
},
|
|
|
|
|
orderBy: {
|
|
|
|
|
createTime: 'desc',
|
|
|
|
|
},
|
|
|
|
|
include: {
|
|
|
|
|
contest: {
|
|
|
|
|
select: {
|
|
|
|
|
id: true,
|
|
|
|
|
contestName: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async findOne(id: number) {
|
|
|
|
|
const attachment = await this.prisma.contestAttachment.findFirst({
|
|
|
|
|
where: {
|
|
|
|
|
id,
|
|
|
|
|
validState: 1,
|
|
|
|
|
},
|
|
|
|
|
include: {
|
|
|
|
|
contest: true,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!attachment) {
|
|
|
|
|
throw new NotFoundException('附件不存在');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return attachment;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async update(id: number, updateAttachmentDto: UpdateAttachmentDto, modifierId?: number) {
|
|
|
|
|
const attachment = await this.findOne(id);
|
|
|
|
|
|
|
|
|
|
const data: any = { ...updateAttachmentDto };
|
|
|
|
|
|
|
|
|
|
if (modifierId) {
|
|
|
|
|
data.modifier = modifierId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return this.prisma.contestAttachment.update({
|
|
|
|
|
where: { id },
|
|
|
|
|
data,
|
|
|
|
|
include: {
|
|
|
|
|
contest: true,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async remove(id: number) {
|
|
|
|
|
await this.findOne(id);
|
|
|
|
|
|
|
|
|
|
// 软删除
|
|
|
|
|
return this.prisma.contestAttachment.update({
|
|
|
|
|
where: { id },
|
|
|
|
|
data: {
|
|
|
|
|
validState: 2,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|