diff options
Diffstat (limited to 'src/db.js')
-rw-r--r-- | src/db.js | 21 |
1 files changed, 15 insertions, 6 deletions
@@ -29,13 +29,14 @@ const write = async (obj) => { switch (obj.type) { case 'introduction': case 'expense': + case 'transfer': roomHash = _getHash(obj.roomId) db.data.rooms[roomHash] ||= { events: [] } db.data.rooms[roomHash].events.push(obj) break default: - throw new Error('Invalid type for db.write()') + throw new Error(`Invalid type "${obj.type}" for db.write()`) break } @@ -118,22 +119,30 @@ const getBalance = async (roomId) => { data.rooms[roomHash].events.forEach((event) => { switch (event.type) { case 'introduction': - balance.userIds.push(event.userId) - balance[event.userId] = { + balance.userIds.push(event.data.userId) + balance[event.data.userId] = { totalSpent: 0, spentForUserId: {}, + sentToUserId: {}, } break case 'expense': - balance[event.userId].totalSpent += event.data.amount + balance[event.data.from].totalSpent += event.data.amount balance.userIds.forEach((userId) => { - balance[event.userId].spentForUserId[userId] ||= 0 - balance[event.userId].spentForUserId[userId] += + balance[event.data.from].spentForUserId[userId] ||= 0 + balance[event.data.from].spentForUserId[userId] += event.data.amount / balance.userIds.length }) break + case 'transfer': + balance[event.data.from].totalSpent += event.data.amount + balance[event.data.from].sentToUserId[event.data.to] ||= 0 + balance[event.data.from].sentToUserId[event.data.to] += + event.data.amount + break + default: break } |