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