Advertisement
Guest User

Untitled

a guest
Aug 15th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. import * as functions from 'firebase-functions';
  2. import * as admin from 'firebase-admin';
  3.  
  4. admin.initializeApp();
  5.  
  6. export const onNewTransit = functions.database.ref('/transits/{transitId}/')
  7. .onCreate(async (snapshot, context) => {
  8.  
  9. const transit = snapshot.val()
  10. const root = snapshot.ref.root
  11.  
  12. console.log("New transit: " + transit.id + " adddress: " + transit.place.address)
  13.  
  14. return setHanging(transit.id)
  15.  
  16. // if (transit.status !== "NEW") {
  17. // if (transit.status === "NEW_TIME") {
  18. // return setHanging(transit.id)
  19. // } else {
  20. // console.log("Wrong status " + transit.status)
  21. // return snapshot.val()
  22. // }
  23. // }
  24.  
  25. // const drivers = await getDrivers(root)
  26.  
  27. // console.log("Queue: " + drivers[0])
  28.  
  29. // if (drivers.length !== 0) {
  30.  
  31. // const driver = drivers[0]
  32. // drivers.splice(0, 1)
  33. // // admin.database().ref('/drivers/' + driver.uid + '/currentTransitId').set(transit.id)
  34. // return assignToDriver(driver.uid, transit.id)
  35. // } else {
  36. // console.log("No free drivers!")
  37. // return setHanging(transit.id)
  38. // }
  39. })
  40.  
  41. function timeout(ms) {
  42. return new Promise(resolve => setTimeout(resolve, ms));
  43. }
  44.  
  45. async function assignToDriver(driverId, transitId) {
  46. console.log("assignToDriver " + driverId + " transit: " + transitId)
  47. // for (i = 0; i < drivers.length; i++) {
  48. // console.log("assignToDriver: " + drivers[i].name + " " + drivers[i].lastName)
  49. // }
  50.  
  51.  
  52. console.log("with timeout 3")
  53. await timeout(5000)
  54.  
  55. return admin.database().ref('transits/' + transitId).transaction(function(snap) {
  56. console.log("transaction " + snap)
  57. if (snap !== null) {
  58.  
  59. console.log("SNAP is ok")
  60.  
  61. console.log("status: " + snap.status)
  62.  
  63. if (snap.status === "NEW") {
  64.  
  65. console.log("set driver")
  66. // admin.database().ref('drivers/' + driverId + '/currentTransitId').update(transitId, function(e) {
  67. // console.log("update complete: " + e)
  68. // })
  69. console.log("set driver ok")
  70. }
  71.  
  72. } else {
  73. console.log("SNAP is null")
  74. return snap
  75.  
  76. }
  77.  
  78.  
  79. return snap
  80. //return snap
  81. }, function(error, commited, snap) {
  82.  
  83. console.log("on complete " + commited)
  84. return snap
  85.  
  86.  
  87. }, false)
  88.  
  89. }
  90.  
  91. async function getDrivers(root) {
  92. const drivers = []
  93. const snap = await root.child('/drivers').once('value')
  94.  
  95. snap.forEach(function(item) {
  96. const driver = item.val()
  97. if (!driver.admin) {
  98. if (driver.status === "FREE") {
  99. drivers.push(driver)
  100. }
  101. }
  102. })
  103.  
  104. drivers.sort(function(a, b) {
  105. return a.loginTime - b.loginTime
  106. })
  107.  
  108. return drivers
  109. }
  110.  
  111.  
  112. function setHanging(transitId) {
  113.  
  114. return admin.database().ref('transits/' + transitId).transaction(function(snap) {
  115. console.log("setting to HANGING")
  116. if (snap === null) {
  117. console.log("snap is null")
  118. return snap
  119. }
  120. if (snap.status === "NEW") {
  121. snap.status = "HANGING"
  122. }
  123. console.log("snap set ok")
  124. return snap
  125. }).then(function () {
  126.  
  127. // set to BUSY after 2 minutes if still hanging
  128. setTimeout(() => {
  129. console.log("BUSY")
  130. return admin.database().ref('transits/' + transitId).transaction(function(snap) {
  131. if (snap === null) {
  132. return snap
  133. }
  134. if (snap.status === "HANGING" || snap.status === "NEW_TIME") {
  135. snap.status = "BUSY"
  136. }
  137. return snap
  138. })
  139. }, 120000)
  140. })
  141.  
  142.  
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement