diff --git a/README.md b/README.md
index 81de1ff..2d0ea74 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,24 @@
# Breakups
-Creating a payment chain for bill splitting needs
+Creating a payment chain for bill splitting needs. [Try it](https://breakups-webapp.herokuapp.com/) out now!
[![Dependency Status](https://gemnasium.com/badges/github.com/binhonglee/Breakups.svg)](https://gemnasium.com/github.com/binhonglee/Breakups)
-api domain: `https:\\breakups.herokuapp.com\`
+api domain: `https://breakups.herokuapp.com/`
## API Call Documentations
| Type | Call | Request | Response |
|:-----|:-----|:--------|:---------|
-| `GET` | `help` | - | URL to github repository |
-| `POST` | `total` | [standard](#standard) / [email](#email) | `{ "total": 200 }` |
-| `POST` | `perPerson` | [standard](#standard) / [email](#email) | `{ "perPerson": 30 }` |
-| `POST` | `oweChart` | [standard](#standard) / [email](#email) | [standard](#standard) / [email](#email) |
-| `POST` | `sortedOweChart` | [standard](#standard) / [email](#email) | [standard](#standard) / [email](#email) |
-| `POST` | `paymentChain` | [standard](#standard) / [email](#email) | [chain](#chain) |
-| `POST` | `emailPaymentChain` | [email](#email) | `["Email sent to user1@domain.com", "Email sent to user2@domain.com"]` |
+| `GET` | `/` | - | redirects to [documentation page](https://binhonglee.github.io/Breakups) |
+| `GET` | `/help` | - | redirects to github repository |
+| `GET` | `/webapp` | - | redirects to the [webapp](https://breakups-webapp.herokuapp.com/) |
+| `POST` | `/emailPaymentChain` | [email](#email) | `["Email sent to user1@domain.com", "Email sent to user2@domain.com"]` |
+| `POST` | `/total` | [standard](#standard) / [email](#email) | `{ "total": 200 }` |
+| `POST` | `/oweChart` | [standard](#standard) / [email](#email) | [standard](#standard) / [email](#email) |
+| `POST` | `/paymentChain` | [standard](#standard) / [email](#email) | [chain](#chain) |
+| `POST` | `/perPerson` | [standard](#standard) / [email](#email) | `{ "perPerson": 30 }` |
+| `POST` | `/sortedOweChart` | [standard](#standard) / [email](#email) | [standard](#standard) / [email](#email) |
## Expected Request / Response
diff --git a/index.js b/index.js
index 82793a5..31b2137 100644
--- a/index.js
+++ b/index.js
@@ -18,8 +18,16 @@ app.use(bodyParser.json({
type: 'application/json'
}))
+app.get('/', function (req, res) {
+ res.redirect('https://binhonglee.github.io/Breakups/')
+})
+
app.get('/help', function (req, res) {
- res.send('https://github.com/binhonglee/Breakups')
+ res.redirect('https://github.com/binhonglee/Breakups')
+})
+
+app.get('/webapp', function (req, res) {
+ res.redirect('https://breakups-webapp.herokuapp.com/')
})
app.post('/total', function (req, res) {
@@ -50,7 +58,9 @@ app.post('/sortedOweChart', function (req, res) {
app.post('/paymentChain', function (req, res) {
input = req.body
- res.json(paymentChain(mergeSort(oweChart(input.users))))
+ var sorted1 = mergeSort(oweChart(input.users))
+ var sorted2 = mergeSort(oweChart(input.users))
+ res.json(paymentNetwork(sorted1, sorted2))
})
app.post('/emailPaymentChain', function (req, res) {
@@ -67,8 +77,8 @@ app.post('/emailPaymentChain', function (req, res) {
res.json(emails)
})
-// app.listen(5000)
-app.listen(process.env.PORT)
+app.listen(5000)
+// app.listen(process.env.PORT)
function total (input) {
var total = 0
@@ -129,6 +139,10 @@ function paymentChain (users) {
var stack = 0
for (var i = 0; i < users.length - 1; i++) {
+ while (users[i + 1].amount === 0) {
+ users.splice((i + 1), 1)
+ }
+
var item = {'from': '', 'to': '', 'amount': 0}
item['from'] = users[i].name
item['to'] = users[i + 1].name
@@ -141,6 +155,43 @@ function paymentChain (users) {
return chain
}
+function paymentNetwork (users, backup) {
+ var chain = []
+
+ while (chain.length < users.length && backup.length > 0) {
+ if (backup.length > 0 && backup[0].amount === 0) {
+ backup.splice(0, 1)
+ } else if ((0 !== (backup.length - 1)) && (backup[0].amount === (backup[backup.length - 1].amount * -1))) {
+ chain.push(createItem(backup[0].name, backup[backup.length - 1].name, backup[backup.length - 1].amount))
+ backup.splice((0), 1)
+ backup.splice((backup.length - 1), 1)
+ } else if (backup[0].amount * -1 < (backup[backup.length - 1].amount)) {
+ chain.push(createItem(backup[0].name, backup[backup.length - 1].name, backup[0].amount * -1))
+ backup[backup.length - 1].amount += backup[0].amount
+ backup.splice((0), 1)
+ } else {
+ chain.push(createItem(backup[0].name, backup[backup.length - 1].name, backup[backup.length - 1].amount))
+ backup[0].amount += backup[backup.length - 1].amount
+ backup.splice((backup.length - 1), 1)
+ }
+ }
+
+ if (backup.length > 0) {
+ return paymentChain(users)
+ } else {
+ return chain
+ }
+}
+
+function createItem (from, to, amount) {
+ console.log('from: ' + from + ' to: ' + to + ' amount: ' + amount)
+ var item = {'from': '', 'to': '', 'amount': 0}
+ item['from'] = from
+ item['to'] = to
+ item['amount'] = amount
+ return item
+}
+
function messageCreation (user1, user2, amount) {
var signature = '
Sincerely,
BreakupBills