Skip to content

Commit 5ef145c

Browse files
Merge pull request #32 from ecatch-kyst/cleanup
cleanup
2 parents 2118c1a + ddf1f05 commit 5ef145c

File tree

4 files changed

+1980
-129
lines changed

4 files changed

+1980
-129
lines changed

rules/firestore.rules

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
service cloud.firestore {
22
match /databases/{database}/documents {
33
match /users/{userId} {
4+
allow read, create, update: if isRightUser(userId)
45
match /messages/{message} {
56
allow read, create, update: if isRightUser(userId)
67
allow create, update: if isValidMessage(request.resource.data)
@@ -67,8 +68,8 @@ function isValidMessage(m) {
6768

6869
function isValidDEP(m) {
6970
return (
70-
m.hasOnly(["created", "TM", "timestamp", "MA", "AC", "DS", "PO", "departure", "expectedFishingSpot", "expectedFishingStart", "OB"]) &&
71-
//isRN(m.RN) && // Message serial number
71+
m.hasOnly(["created", "TM", "RN", "timestamp", "MA", "AC", "DS", "PO", "departure", "expectedFishingSpot", "expectedFishingStart", "OB"]) &&
72+
isRN(m.RN) && // Message serial number
7273
//isRC(m.RC) && // Radio name
7374
//isMA(m.MA) && // Captain's name
7475
isTimestamp(m.timestamp) && // Time of sent in
@@ -84,8 +85,8 @@ function isValidDEP(m) {
8485

8586
function isValidDCA(m) {
8687
return (
87-
m.hasOnly(["timestamp", "TM", "MV", "AD", "QI", "AC", "fishingStart", "ZO", "startFishingSpot", "GE", "GP", "endFishingSpot", "DU", "CA", "ME", "GS"]) &&
88-
//isRN(m.RN) && // Message serial number
88+
m.hasOnly(["timestamp", "TM", "RN", "MV", "AD", "QI", "AC", "fishingStart", "ZO", "startFishingSpot", "GE", "GP", "endFishingSpot", "DU", "CA", "ME", "GS"]) &&
89+
isRN(m.RN) && // Message serial number
8990
//isRC(m.RC) && // Radio name
9091
//isMA(m.MA) && // Captain's name
9192
isTimestamp(m.timestamp) && // Time of sent in
@@ -110,8 +111,8 @@ function isValidDCA(m) {
110111
}
111112
function isValidPOR(m) {
112113
return (
113-
m.hasOnly(["timestamp", "TM", "AD", "PO", "portArrival", "OB", "LS", "KG"]) &&
114-
//isRN(m.RN) && // Message serial number
114+
m.hasOnly(["timestamp", "TM", "RN", "AD", "PO", "portArrival", "OB", "LS", "KG"]) &&
115+
isRN(m.RN) && // Message serial number
115116
//isRC(m.RC) && // Radio name
116117
//isMA(m.MA) && // Captain's name
117118
isTimestamp(m.timestamp) && // Time of sent in

src/lib/constants.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
1+
/**
2+
* Commented out fields should be handled better.
3+
* They are fields that are dependant on other fields.
4+
*/
5+
16
export const fields = {
27
common: ["TM", "RN", "RC", "MA", "DA", "TI"],
38
DEP: ["PO", "ZD", "ZT", "OB", "PD", "PT", "LA", "LO", "AC", "DS"],
49
// NOTE: what is TS?
5-
DCA: [/*"MV",*/ "AD", "NA", "XR", "QI", "AC", /*"TS",*/ "BD","BT", "ZO", "LT", "LG", "GE", "GP", "XT", "XG", "DU", "CA", /*"ME", "GS" These are dependent on GE,*/],
10+
DCA: [/*"MV",*/ "AD", "NA", "XR", "QI", "AC", /*"TS",*/ "BD","BT", "ZO", "LT", "LG", /*"GE",*/ "GP", "XT", "XG", "DU", /*"CA", "ME", "GS" These are dependent on GE,*/],
611
POR: ["AD", "NA", "XR", "PO", "PD", "PT", "OB", "LS", "KG"]
712
}
813

914
export const VALIDTM = ["DEP", "DCA", "POR"]
15+
16+
17+
// CA is dependent on AC === FIS

src/lib/messages/created.js

Lines changed: 107 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MESSAGES_FS, functions, USERS_FS, BOATS_FS, firestore } from "../firebase"
1+
import { MESSAGES_FS, functions, USERS_FS, BOATS_FS } from "../firebase"
22
import { dualogStringify, dualogParse } from "./utils"
33
import { dualog } from "."
44
import { format } from "date-fns"
@@ -16,115 +16,125 @@ Object.entries = function (obj) { //eslint-disable-line no-extend-native
1616
function convertDate(e){return format(e.toDate(), "yyyyMMdd")}
1717
function convertTime(e){return format(e.toDate(), "HHmm")}
1818
function stringifyCatch(c){return Object.entries(c).map(([k, v]) => [k, v].join(" ")).join(" ")}
19+
function prependSign(number){return `${Math.sign(number) > 0 ? "+" : ""}${number}` }
1920

2021
export default functions.firestore.document("users/{userId}/messages/{messageId}")
2122
.onCreate(async (snap, {params: {userId, messageId}, eventId}) => {
2223
if(!(await MESSAGES_FS(userId).where("eventId", "==", eventId).get()).empty) return null
23-
let m = snap.data()
24+
try {
25+
let m = snap.data()
2426

25-
console.log(`${m.TM} message created`)
27+
console.log(`${m.TM} message created`)
2628

27-
let boat = {}
28-
let wgs = {}
29+
let boat = {}
30+
let wgs = {}
2931

30-
let user = (await USERS_FS.doc(userId).get()).data() // Fetch last serial number
32+
await MESSAGES_FS(userId).doc(messageId).update({eventId})
3133

32-
const RN = user.RN ? user.RN + 1 : 1
34+
const boatQuery = await BOATS_FS.where("userId", "==", userId).get()
35+
boatQuery.docs.forEach(b => {if (b.exists) boat = b.data()})
3336

34-
const batch = firestore.batch()
35-
batch.update(USERS_FS.doc(userId), {RN})
36-
batch.update(MESSAGES_FS(userId).doc(messageId), {RN, eventId})
37-
await batch.commit()
38-
39-
const boatQuery = await BOATS_FS.where("userId", "==", userId).get()
40-
boatQuery.docs.forEach(b => {if (b.exists) boat = b.data()})
41-
42-
let message = {
43-
TM: m.TM,
44-
RN,
45-
AD: "NOR",
46-
RC: boat.RC,
47-
NA: boat.NA,
48-
MA: m.MA,
49-
DA: convertDate(m.created),
50-
TI: convertTime(m.created)
51-
}
52-
53-
switch (m.TM) {
54-
case "DEP":
55-
wgs = utm.fromLatLon(m.expectedFishingSpot.latitude, m.expectedFishingSpot.longitude)
56-
message = {
57-
...message,
58-
XR: boat.XR,
59-
PO: m.PO,
60-
ZD: convertDate(m.departure),
61-
ZT: convertTime(m.departure),
62-
PD: convertDate(m.expectedFishingStart),
63-
PT: convertTime(m.expectedFishingStart),
64-
LA: "N"+wgs.northing,
65-
LO: "E"+wgs.easting,
66-
AC: m.AC,
67-
DS: m.DS,
68-
OB: stringifyCatch(m.OB)
37+
let message = {
38+
TM: m.TM,
39+
RN: m.RN,
40+
AD: "NOR",
41+
RC: boat.RC,
42+
NA: boat.NA,
43+
MA: m.MA,
44+
DA: convertDate(m.created),
45+
TI: convertTime(m.created)
6946
}
70-
break
71-
72-
case "DCA": {
73-
const {AD, QI, AC, TS, ZO, GE, GP, DU, CA, ME, GS, fishingStart, startFishingSpot, endFishingSpot} = m
74-
message = {
75-
...message,
76-
XR: boat.XR,
77-
AD,
78-
QI,
79-
AC,
80-
BD: convertDate(fishingStart),
81-
BT: convertTime(fishingStart),
82-
ZO,
83-
LT: `+${startFishingSpot.latitude.toString()}`, //LT/+63.400
84-
LG: `+${startFishingSpot.longitude.toString()}`, //LG/+010.400
85-
GE,
86-
GP,
87-
XT: `+${endFishingSpot.latitude.toString()}`, //Same as LT
88-
XG: `+${endFishingSpot.longitude.toString()}`, //Same as LG
89-
DU,
90-
CA: stringifyCatch(CA),
91-
GS
47+
48+
switch (m.TM) {
49+
case "DEP":
50+
wgs = utm.fromLatLon(m.expectedFishingSpot.latitude, m.expectedFishingSpot.longitude)
51+
message = {
52+
...message,
53+
XR: boat.XR,
54+
PO: m.PO,
55+
ZD: convertDate(m.departure),
56+
ZT: convertTime(m.departure),
57+
PD: convertDate(m.expectedFishingStart),
58+
PT: convertTime(m.expectedFishingStart),
59+
LA: "N"+wgs.northing,
60+
LO: "E"+wgs.easting,
61+
AC: m.AC,
62+
DS: m.DS,
63+
OB: stringifyCatch(m.OB)
64+
}
65+
break
66+
67+
case "DCA": {
68+
const {AD, QI, AC, TS, ZO, GE, GP, DU, ME, GS, fishingStart, startFishingSpot, endFishingSpot} = m
69+
message = {
70+
...message,
71+
XR: boat.XR,
72+
AD,
73+
QI,
74+
AC,
75+
BD: convertDate(fishingStart),
76+
BT: convertTime(fishingStart),
77+
ZO,
78+
LT: prependSign(startFishingSpot.latitude), //LT/+63.400
79+
LG: prependSign(startFishingSpot.longitude), //LG/+010.400
80+
GE,
81+
GP,
82+
XG: prependSign(endFishingSpot.longitude), //Same as LG
83+
XT: prependSign(endFishingSpot.latitude), //Same as LT
84+
DU,
85+
GS
86+
}
87+
if(m.CA) m.CA = stringifyCatch(messages.CA)
88+
if(["OTB", "OTM", "SSC", "GEN", "TBS"].includes(GE)){
89+
message = {...message, ME}
90+
}
9291
}
93-
if(["OTB", "OTM", "SSC", "GEN", "TBS"].includes(GE)){
94-
message = {...message, ME}
92+
break
93+
94+
case "POR": {
95+
const {PO, portArrival, LS,} = m
96+
message = {
97+
...message,
98+
NA: boat.NA,
99+
XR: boat.NA,
100+
PO,
101+
PD: convertDate(portArrival),
102+
PT: convertTime(portArrival),
103+
OB: stringifyCatch(m.OB),
104+
LS,
105+
KG: stringifyCatch(m.KG)
106+
}
95107
}
96-
}
97-
break
108+
break
98109

99-
case "POR": {
100-
const {PO, portArrival, LS,} = m
101-
message = {
102-
...message,
103-
NA: boat.NA,
104-
XR: boat.NA,
105-
PO,
106-
PD: convertDate(portArrival),
107-
PT: convertTime(portArrival),
108-
OB: stringifyCatch(m.OB),
109-
LS,
110-
KG: stringifyCatch(m.KG)
110+
default:
111+
break
111112
}
113+
console.log(`Sending ${dualogStringify(message)} to Dualog`)
114+
let result = await dualog({
115+
body: {PlainTextNaf: dualogStringify(message)}
116+
})
117+
118+
result = dualogParse(result)
119+
120+
await USERS_FS.doc(userId).collection("messages").doc(messageId).update({result})
121+
122+
console.log(`Response from Dualog: ${JSON.stringify(result)}`)
123+
124+
return null
125+
} catch (error) {
126+
const m = snap.data()
127+
const now = Date.now()
128+
return USERS_FS.doc(userId).collection("messages").doc(messageId).update({result:{
129+
TM : "RET",
130+
RN : m.RN,
131+
FR : "NOR-DUALOG",
132+
RC : m.RC,
133+
RS : "NAK",
134+
RE : 100,
135+
DA : format(now, "yyyyMMdd"),
136+
TI : format(now, "HHmm"),
137+
error
138+
}})
112139
}
113-
break
114-
115-
default:
116-
break
117-
}
118-
console.log(`Sending ${dualogStringify(message)} to Dualog`)
119-
let result = await dualog({
120-
body: {PlainTextNaf: dualogStringify(message)}
121-
})
122-
123-
result = dualogParse(result)
124-
125-
await USERS_FS.doc(userId).collection("messages").doc(messageId).update({result})
126-
127-
console.log(`Response from Dualog: ${JSON.stringify(result)}`)
128-
129-
return null
130140
})

0 commit comments

Comments
 (0)