cowbell/splittypie

View on GitHub
app/models/user.js

Summary

Maintainability
A
0 mins
Test Coverage
import { get, computed } from "@ember/object";
import ModelMixin from "splittypie/mixins/model-mixin";
import Model from "ember-data/model";
import attr from "ember-data/attr";
import { belongsTo } from "ember-data/relationships";

export default Model.extend(ModelMixin, {
    name: attr("string"),
    event: belongsTo("event", { async: false }),
    balance: computed("event.transactions.[]", function () {
        const transactions = get(this, "event.transactions");
        const paidTransactions = transactions.filterBy("payer", this);
        const owedTransactions = transactions.filter(t => get(t, "participants").includes(this));
        const paidMoney = paidTransactions.reduce(
            (acc, t) => acc + parseFloat(get(t, "amount")),
            0
        );
        const owedMoney = owedTransactions.reduce(
            (acc, t) => acc + (parseFloat(get(t, "amount")) / get(t, "participants").length),
            0
        );

        return (paidMoney - owedMoney).toFixed(2);
    }),
});