Re-organize functions of kredits service

This commit is contained in:
2020-06-27 14:01:05 +02:00
parent 3b127b0e81
commit 4a9dd5ff09
+65 -61
View File
@@ -38,50 +38,6 @@ export default Service.extend({
contributorsNeedSync: false, contributorsNeedSync: false,
contributionsNeedSync: false, contributionsNeedSync: false,
contributionsUnconfirmed: computed('contributions.[]', 'currentBlock', function() {
return this.contributions.filter(contribution => {
return contribution.confirmedAt > this.currentBlock;
});
}),
contributionsConfirmed: computed('contributions.[]', 'currentBlock', function() {
return this.contributions
.filterBy('vetoed', false)
.filter(contribution => {
return contribution.confirmedAt <= this.currentBlock;
});
}),
kreditsByContributor: computed('contributionsUnconfirmed.@each.vetoed', 'contributors.[]', function() {
const contributionsUnconfirmed = this.contributionsUnconfirmed.filterBy('vetoed', false);
const contributionsGrouped = groupBy(contributionsUnconfirmed, 'contributorId');
const contributorsWithUnconfirmed = contributionsGrouped.map(c => c.value.toString());
const contributorsWithOnlyConfirmed = this.contributors.reject(c => contributorsWithUnconfirmed.includes(c.id))
const kreditsByContributor = contributionsGrouped.map(c => {
const amountUnconfirmed = c.items.mapBy('amount').reduce((a, b) => a + b);
const contributor = this.contributors.findBy('id', c.value.toString());
return EmberObject.create({
contributor: contributor,
amountUnconfirmed: amountUnconfirmed,
amountConfirmed: contributor.totalKreditsEarned,
amountTotal: contributor.totalKreditsEarned + amountUnconfirmed
})
});
contributorsWithOnlyConfirmed.forEach(c => {
kreditsByContributor.push(EmberObject.create({
contributor: c,
amountUnconfirmed: 0,
amountConfirmed: c.totalKreditsEarned,
amountTotal: c.totalKreditsEarned
}));
})
return kreditsByContributor;
}),
init () { init () {
this._super(...arguments); this._super(...arguments);
this.set('contributors', []); this.set('contributors', []);
@@ -168,6 +124,22 @@ export default Service.extend({
}); });
}, },
getCurrentUser: computed('kredits.provider', 'currentUserAccounts.[]', function() {
if (isEmpty(this.currentUserAccounts)) {
return Promise.resolve();
}
return this.kredits.Contributor
.functions.getContributorIdByAddress(this.currentUserAccounts.firstObject)
.then((id) => {
// check if the user is a contributor or not
if (id === 0) {
return Promise.resolve();
} else {
return this.kredits.Contributor.getById(id);
}
});
}),
totalSupply: computed(function() { totalSupply: computed(function() {
return this.kredits.Token.functions.totalSupply().then(total => { return this.kredits.Token.functions.totalSupply().then(total => {
return formatKredits(total); return formatKredits(total);
@@ -179,6 +151,51 @@ export default Service.extend({
.then(total => total.toNumber()); .then(total => total.toNumber());
}), }),
kreditsByContributor: computed('contributionsUnconfirmed.@each.vetoed', 'contributors.[]', function() {
const contributionsUnconfirmed = this.contributionsUnconfirmed.filterBy('vetoed', false);
const contributionsGrouped = groupBy(contributionsUnconfirmed, 'contributorId');
const contributorsWithUnconfirmed = contributionsGrouped.map(c => c.value.toString());
const contributorsWithOnlyConfirmed = this.contributors.reject(c => contributorsWithUnconfirmed.includes(c.id))
const kreditsByContributor = contributionsGrouped.map(c => {
const amountUnconfirmed = c.items.mapBy('amount').reduce((a, b) => a + b);
const contributor = this.contributors.findBy('id', c.value.toString());
return EmberObject.create({
contributor: contributor,
amountUnconfirmed: amountUnconfirmed,
amountConfirmed: contributor.totalKreditsEarned,
amountTotal: contributor.totalKreditsEarned + amountUnconfirmed
})
});
contributorsWithOnlyConfirmed.forEach(c => {
kreditsByContributor.push(EmberObject.create({
contributor: c,
amountUnconfirmed: 0,
amountConfirmed: c.totalKreditsEarned,
amountTotal: c.totalKreditsEarned
}));
})
return kreditsByContributor;
}),
contributionsUnconfirmed: computed('contributions.[]', 'currentBlock', function() {
return this.contributions.filter(contribution => {
return contribution.confirmedAt > this.currentBlock;
});
}),
contributionsConfirmed: computed('contributions.[]', 'currentBlock', function() {
return this.contributions
.filterBy('vetoed', false)
.filter(contribution => {
return contribution.confirmedAt <= this.currentBlock;
});
}),
async loadInitialData () { async loadInitialData () {
const numCachedContributors = await this.browserCache.contributors.length(); const numCachedContributors = await this.browserCache.contributors.length();
if (numCachedContributors > 0) { if (numCachedContributors > 0) {
@@ -336,7 +353,7 @@ export default Service.extend({
}).group('contributionTasks'), }).group('contributionTasks'),
fetchNewContributions: task(function * () { fetchNewContributions: task(function * () {
const count = yield this.kredits.Contribution.functions.contributionsCount(); const count = yield this.kredits.Contribution.count();
const lastKnownContributionId = Math.max.apply(null, this.contributions.mapBy('id')); const lastKnownContributionId = Math.max.apply(null, this.contributions.mapBy('id'));
const toFetch = count - lastKnownContributionId; const toFetch = count - lastKnownContributionId;
@@ -406,23 +423,10 @@ export default Service.extend({
}); });
}, },
getCurrentUser: computed('kredits.provider', 'currentUserAccounts.[]', function() { //
if (isEmpty(this.currentUserAccounts)) {
return Promise.resolve();
}
return this.kredits.Contributor
.functions.getContributorIdByAddress(this.currentUserAccounts.firstObject)
.then((id) => {
// check if the user is a contributor or not
if (id === 0) {
return Promise.resolve();
} else {
return this.kredits.Contributor.getById(id);
}
});
}),
// Contract events // Contract events
//
addContractEventHandlers () { addContractEventHandlers () {
this.kredits.Contributor this.kredits.Contributor
.on('ContributorProfileUpdated', this.handleContributorChange.bind(this)) .on('ContributorProfileUpdated', this.handleContributorChange.bind(this))