]>
Commit | Line | Data |
---|---|---|
8ebf2a5d C |
1 | class LiveQuotaStore { |
2 | ||
3 | private static instance: LiveQuotaStore | |
4 | ||
5 | private readonly livesPerUser = new Map<number, { liveId: number, size: number }[]>() | |
6 | ||
7 | private constructor () { | |
8 | } | |
9 | ||
10 | addNewLive (userId: number, liveId: number) { | |
11 | if (!this.livesPerUser.has(userId)) { | |
12 | this.livesPerUser.set(userId, []) | |
13 | } | |
14 | ||
15 | const currentUserLive = { liveId, size: 0 } | |
16 | const livesOfUser = this.livesPerUser.get(userId) | |
17 | livesOfUser.push(currentUserLive) | |
18 | } | |
19 | ||
20 | removeLive (userId: number, liveId: number) { | |
21 | const newLivesPerUser = this.livesPerUser.get(userId) | |
22 | .filter(o => o.liveId !== liveId) | |
23 | ||
24 | this.livesPerUser.set(userId, newLivesPerUser) | |
25 | } | |
26 | ||
27 | addQuotaTo (userId: number, liveId: number, size: number) { | |
28 | const lives = this.livesPerUser.get(userId) | |
29 | const live = lives.find(l => l.liveId === liveId) | |
30 | ||
31 | live.size += size | |
32 | } | |
33 | ||
34 | getLiveQuotaOf (userId: number) { | |
35 | const currentLives = this.livesPerUser.get(userId) | |
36 | if (!currentLives) return 0 | |
37 | ||
38 | return currentLives.reduce((sum, obj) => sum + obj.size, 0) | |
39 | } | |
40 | ||
41 | static get Instance () { | |
42 | return this.instance || (this.instance = new this()) | |
43 | } | |
44 | } | |
45 | ||
46 | export { | |
47 | LiveQuotaStore | |
48 | } |