core: files: 添加文件列表缓存

This commit is contained in:
undefined committed 2021-01-25 00:23:02 +08:00
1 parent 9e92891fb2
commit 3c4256be84
12 files changed
+64 -96

No files matched your search

-44
View File
@@ -1,57 +1,14 @@
/* eslint-disable camelcase */
import fs from 'fs';
import { BadRequestError } from '../error';
import { PRIV } from '../model/builtin';
import * as system from '../model/system';
import * as user from '../model/user';
import db from '../service/db';
import {
Route, Handler, Types, param,
} from '../service/server';
import storage from '../service/storage';
const coll = db.collection('status');
class FileUploadHandler extends Handler {
async getQuota() {
let quota = system.get('user.quota');
if (this.user.hasPriv(PRIV.PRIV_UNLIMITED_QUOTA)) {
quota = 2 ** 63 - 1;
}
return quota;
}
async get() {
this.response.template = 'fs_upload.html';
this.response.body = { fdoc: null, usage: this.user.usage, quota: await this.getQuota() };
}
@param('title', Types.String)
@param('redirect', Types.String, true)
async post(domainId: string, title: string, redirect?: string) {
if (!this.request.files.file) throw new BadRequestError();
const quota = await this.getQuota();
const lfdoc = await fs.promises.stat(this.request.files.file.path);
const ufid = `user/${this.user._id}/${title}`;
const udoc = await user.inc(this.user._id, 'usage', lfdoc.size);
try {
await storage.put(ufid, this.request.files.file.path);
} catch (e) {
await user.inc(this.user._id, 'usage', -lfdoc.size);
throw e;
}
this.response.template = 'fs_upload.html';
if (redirect) {
this.response.redirect = redirect.includes('?')
? `${redirect}&ufid=${ufid}`
: `${redirect}?ufid=${ufid}`;
}
this.response.body = {
ufid, usage: udoc.usage, quota,
};
}
}
class StatusHandler extends Handler {
async get() {
const stats = await coll.find().sort({ type: 1, updateAt: -1 }).toArray();
@@ -125,7 +82,6 @@ class SwitchLanguageHandler extends Handler {
}
export async function apply() {
Route('file_upload', '/upload', FileUploadHandler, PRIV.PRIV_CREATE_FILE);
Route('status', '/status', StatusHandler);
Route('status_update', '/status/update', StatusUpdateHandler);
Route('check_in', '/checkin', CheckInHandler, PRIV.PRIV_USER_PROFILE);