summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/drive.ts
blob: 138adffad2dc2ca19d632136009e12dc63299709 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import DriveFile from '../../../models/drive-file';
import define from '../define';
import fetchMeta from '../../../misc/fetch-meta';

export const meta = {
	desc: {
		'ja-JP': 'ドライブの情報を取得します。',
		'en-US': 'Get drive information.'
	},

	tags: ['drive', 'account'],

	requireCredential: true,

	kind: 'drive-read',

	res: {
		type: 'object',
		properties: {
			capacity: {
				type: 'number'
			},
			usage: {
				type: 'number'
			}
		}
	}
};

export default define(meta, async (ps, user) => {
	const instance = await fetchMeta();

	// Calculate drive usage
	const usage = await DriveFile.aggregate([{
		$match: {
			'metadata.userId': user._id,
			'metadata.deletedAt': { $exists: false }
		}
	}, {
		$project: {
			length: true
		}
	}, {
		$group: {
			_id: null,
			usage: { $sum: '$length' }
		}
	}])
	.then((aggregates: any[]) => {
		if (aggregates.length > 0) {
			return aggregates[0].usage;
		}
		return 0;
	});

	return {
		capacity: 1024 * 1024 * instance.localDriveCapacityMb,
		usage: usage
	};
});