Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import * as functions from 'firebase-functions';
- import * as admin from 'firebase-admin';
- admin.initializeApp();
- export const onNewTransit = functions.database.ref('/transits/{transitId}/')
- .onCreate(async (snapshot, context) => {
- const transit = snapshot.val()
- const root = snapshot.ref.root
- console.log("New transit: " + transit.id + " adddress: " + transit.place.address)
- return setHanging(transit.id)
- // if (transit.status !== "NEW") {
- // if (transit.status === "NEW_TIME") {
- // return setHanging(transit.id)
- // } else {
- // console.log("Wrong status " + transit.status)
- // return snapshot.val()
- // }
- // }
- // const drivers = await getDrivers(root)
- // console.log("Queue: " + drivers[0])
- // if (drivers.length !== 0) {
- // const driver = drivers[0]
- // drivers.splice(0, 1)
- // // admin.database().ref('/drivers/' + driver.uid + '/currentTransitId').set(transit.id)
- // return assignToDriver(driver.uid, transit.id)
- // } else {
- // console.log("No free drivers!")
- // return setHanging(transit.id)
- // }
- })
- function timeout(ms) {
- return new Promise(resolve => setTimeout(resolve, ms));
- }
- async function assignToDriver(driverId, transitId) {
- console.log("assignToDriver " + driverId + " transit: " + transitId)
- // for (i = 0; i < drivers.length; i++) {
- // console.log("assignToDriver: " + drivers[i].name + " " + drivers[i].lastName)
- // }
- console.log("with timeout 3")
- await timeout(5000)
- return admin.database().ref('transits/' + transitId).transaction(function(snap) {
- console.log("transaction " + snap)
- if (snap !== null) {
- console.log("SNAP is ok")
- console.log("status: " + snap.status)
- if (snap.status === "NEW") {
- console.log("set driver")
- // admin.database().ref('drivers/' + driverId + '/currentTransitId').update(transitId, function(e) {
- // console.log("update complete: " + e)
- // })
- console.log("set driver ok")
- }
- } else {
- console.log("SNAP is null")
- return snap
- }
- return snap
- //return snap
- }, function(error, commited, snap) {
- console.log("on complete " + commited)
- return snap
- }, false)
- }
- async function getDrivers(root) {
- const drivers = []
- const snap = await root.child('/drivers').once('value')
- snap.forEach(function(item) {
- const driver = item.val()
- if (!driver.admin) {
- if (driver.status === "FREE") {
- drivers.push(driver)
- }
- }
- })
- drivers.sort(function(a, b) {
- return a.loginTime - b.loginTime
- })
- return drivers
- }
- function setHanging(transitId) {
- return admin.database().ref('transits/' + transitId).transaction(function(snap) {
- console.log("setting to HANGING")
- if (snap === null) {
- console.log("snap is null")
- return snap
- }
- if (snap.status === "NEW") {
- snap.status = "HANGING"
- }
- console.log("snap set ok")
- return snap
- }).then(function () {
- // set to BUSY after 2 minutes if still hanging
- setTimeout(() => {
- console.log("BUSY")
- return admin.database().ref('transits/' + transitId).transaction(function(snap) {
- if (snap === null) {
- return snap
- }
- if (snap.status === "HANGING" || snap.status === "NEW_TIME") {
- snap.status = "BUSY"
- }
- return snap
- })
- }, 120000)
- })
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement