| 51 | } |
| 52 | |
| 53 | async function addContestFile(domainId: string, tid: ObjectId, filename: string, filepath: string) { |
| 54 | const tdoc = await ContestModel.get(domainId, tid); |
| 55 | await StorageModel.put(`contest/${domainId}/${tid}/${filename}`, filepath, 1); |
| 56 | const meta = await StorageModel.getMeta(`contest/${domainId}/${tid}/${filename}`); |
| 57 | const payload = { _id: filename, name: filename, ..._.pick(meta, ['size', 'lastModified', 'etag']) }; |
| 58 | if (!meta) return false; |
| 59 | await ContestModel.edit(domainId, tid, { files: [...(tdoc.files || []), payload] }); |
| 60 | return true; |
| 61 | } |
| 62 | |
| 63 | function fixFileName(fileName: string) { |
| 64 | if (fileName.endsWith('.in') || fileName.endsWith('.out')) { |