Browse Source

ingecting rain, river and floodzones forms in the API

master
analuizaff 3 years ago
parent
commit
92313e9381
  1. 7
      src/app/api/Ingestion/appIngestion.js
  2. 16
      src/app/api/Ingestion/sendFormAnswer.js
  3. 67
      src/app/components/forms/AssembleIngestionObject.js
  4. 7
      src/app/components/forms/FormsCode.js
  5. 12
      src/app/hooks/useFiltering.js
  6. 37
      src/app/hooks/useSocketMarkers.js
  7. 7
      src/app/screens/PluviometerSharingDataScreen.js
  8. 24
      src/app/screens/RainSharingDataScreen.js
  9. 30
      src/app/screens/RiverFloodSharingDataScreen.js
  10. 24
      src/app/screens/SharingFloodZonesScreen.js

7
src/app/api/Ingestion/appIngestion.js

@ -0,0 +1,7 @@
import { create } from "apisauce";
const appIngestion = create({
baseURL: "https://wpdappingestion.azurewebsites.net",
});
export default appIngestion;

16
src/app/api/Ingestion/sendFormAnswer.js

@ -0,0 +1,16 @@
import appIngestion from "./appIngestion";
const endpoint = "/api/wpdAppIngestion?";
async function sendFormAnswer(ingestionObject) {
console.log(JSON.stringify(ingestionObject));
const response = await appIngestion.post(
endpoint,
JSON.stringify(ingestionObject)
);
return response;
}
export default sendFormAnswer;

67
src/app/components/forms/AssembleIngestionObject.js

@ -0,0 +1,67 @@
import moment from "moment";
import React from "react";
import sendFormAnswer from "../../api/Ingestion/sendFormAnswer";
const AssembleIngestionObject = ({
images,
description,
situation,
code,
location,
date,
time,
address,
}) => {
const ingestionObject = {
responseData: {
array_to_json: [
{
formcode: code,
formsanswersuserinformer: "admin@wpd.com",
fieldsanswerslongitude: location["longitude"],
fieldsanswerslatitude: location["latitude"],
fields: [
{
fieldsanswerssituation: situation ? situation : "CHUVA FRACA",
fieldsanswerseventaddress: address,
fieldsanswerseventdate: moment(date).format("DD-MM-YYYY"),
fieldsanswerseventtime: moment(time).format("HH:mm"),
fieldsanswercomment: description
? description
: "descrição do evento",
},
],
},
],
},
};
const a = sendFormAnswer(ingestionObject);
};
const AssembleIngestionPluviometer = ({
pluviometer,
description,
images,
date,
time,
}) => {
const pluviometerObject = {
responseData: {
array_to_json: [
{
formcode: "PLUVIOMETERS_FORM",
formsanswersuserinformer: "admin@wpd.com",
fias: [
{
fieldsanswersdate: moment(date).format("DD-MM-YYYY"),
fieldsanswersrainamount: pluviometer,
fieldsanswerseventtime: moment(time).format("HH:mm"),
fielsanswercomment: description,
},
],
},
],
},
};
};
export { AssembleIngestionObject, AssembleIngestionPluviometer };

7
src/app/components/forms/FormsCode.js

@ -0,0 +1,7 @@
export const formcode = {
rain: "RAIN_FORM",
river: "RIVERFLOOD_FORM",
floodzones: "FLOODZONES_FORM",
pluviometer: "PLUVIOMETER_FORM",
pluviometerRegistration: "PLUVIOMETER_REGISTRATION",
};

12
src/app/hooks/useFiltering.js

@ -4,42 +4,42 @@ function useFiltering(location) {
name: "floodZones", name: "floodZones",
socketUrl: new WebSocket( socketUrl: new WebSocket(
"wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" + "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" +
`type=FLOODZONES_FORM&lat=-9.9740&lon=-67.8098&buffer=5000&limit=5`
`type=FLOODZONES_FORM&lat=${location.lat}&lon=${location.long}&buffer=5000&limit=5`
), ),
}, },
{ {
name: "rain", name: "rain",
socketUrl: new WebSocket( socketUrl: new WebSocket(
"wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" + "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" +
`type=RAIN_FORM&lat=-9.9740&lon=-67.8098&buffer=5000&limit=5`
`type=RAIN_FORM&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=30`
), ),
}, },
{ {
name: "riverFlood", name: "riverFlood",
socketUrl: new WebSocket( socketUrl: new WebSocket(
"wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" + "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" +
`type=RIVERFLOOD_FORM&-9.9740&lon=-67.8098&buffer=5000&limit=5`
`type=RIVERFLOOD_FORM&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=5`
), ),
}, },
{ {
name: "pluviometer", name: "pluviometer",
socketUrl: new WebSocket( socketUrl: new WebSocket(
"wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" + "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" +
`type=PLUVIOMETER_REGISTRATION&lat=${location.lat}&lon=${location.long}&buffer=5000&limit=5`
`type=PLUVIOMETER_REGISTRATION&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=5`
), ),
}, },
{ {
name: "susceptibilityAreas", name: "susceptibilityAreas",
socketUrl: new WebSocket( socketUrl: new WebSocket(
"wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" + "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" +
`type=FLOODZONES_OFFICIAL&lat=-9.9740&lon=-67.8098&buffer=5000&limit=3`
`type=FLOODZONES_OFFICIAL&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=3`
), ),
}, },
{ {
name: "automaticPluviometer", name: "automaticPluviometer",
socketUrl: new WebSocket( socketUrl: new WebSocket(
"wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" + "wss://waterproofing.geog.uni-heidelberg.de/wss/hot/data?" +
`type=PLUVIOMETERS_OFFICIAL&lat=-9.9740&lon=-67.8098&buffer=5000&limit=5`
`type=PLUVIOMETERS_OFFICIAL&lat=${location.lat}&lon=${location.long}&buffer=50000&limit=5`
), ),
}, },
]; ];

37
src/app/hooks/useSocketMarkers.js

@ -49,32 +49,32 @@ function getImage(name, situation) {
} }
if (name == "rain") { if (name == "rain") {
if (situation == "sem chuva") {
if (situation == "SEM CHUVA") {
return custom_assets_pin.rainLevel[0]; return custom_assets_pin.rainLevel[0];
} else if (situation == "chuva fraca") {
} else if (situation == "CHUVA FRACA") {
return custom_assets_pin.rainLevel[1]; return custom_assets_pin.rainLevel[1];
} else if (situation == "chuva moderada") {
} else if (situation == "CHUVA MODERADA") {
return custom_assets_pin.rainLevel[2]; return custom_assets_pin.rainLevel[2];
} else if (situation == "chuva forte") {
} else if (situation == "CHUVA FORTE") {
return custom_assets_pin.rainLevel[3]; return custom_assets_pin.rainLevel[3];
} }
return custom_assets_pin.rainLevel[3]; return custom_assets_pin.rainLevel[3];
} }
if (name == "riverFlood") { if (name == "riverFlood") {
if (situation == "baixo") {
if (situation == "BAIXO") {
return custom_assets_pin.riverLevel[0]; return custom_assets_pin.riverLevel[0];
} else if (situation == "normal") {
} else if (situation == "NORMAL") {
return custom_assets_pin.riverLevel[1]; return custom_assets_pin.riverLevel[1];
} else if (situation == "alto") {
} else if (situation == "ALTO") {
return custom_assets_pin.riverLevel[2]; return custom_assets_pin.riverLevel[2];
} else if (situation == "inundar") {
} else if (situation == "INUNDAR") {
return custom_assets_pin.riverLevel[3]; return custom_assets_pin.riverLevel[3];
} }
return custom_assets_pin.riverLevel[0]; return custom_assets_pin.riverLevel[0];
} }
if (name == "floodZones") { if (name == "floodZones") {
if (situation == "transitavel") {
if (situation == "TRANSITAVEL") {
return custom_assets_pin.floodZones.passable; return custom_assets_pin.floodZones.passable;
} else { } else {
return custom_assets_pin.floodZones.not_passable; return custom_assets_pin.floodZones.not_passable;
@ -126,6 +126,7 @@ function buildPolygonsObject(response, name) {
var r = JSON.parse(response); var r = JSON.parse(response);
var coordinate = []; var coordinate = [];
var formsanswersgeom = r.formsanswersgeom; var formsanswersgeom = r.formsanswersgeom;
if (JSON.parse(formsanswersgeom).type == "Polygon") {
const arrayCoordinates = JSON.parse(formsanswersgeom)["coordinates"][0]; const arrayCoordinates = JSON.parse(formsanswersgeom)["coordinates"][0];
var n = Object.keys(arrayCoordinates).length; var n = Object.keys(arrayCoordinates).length;
@ -134,7 +135,7 @@ function buildPolygonsObject(response, name) {
var lon = arrayCoordinates[i][0]; var lon = arrayCoordinates[i][0];
coordinate.push([lat, lon]); coordinate.push([lat, lon]);
} }
var polygonObject = {
return {
ID: r.formsanswersid, ID: r.formsanswersid,
name: name, name: name,
title: "Titulo", //response.fieldsanswerssituation title: "Titulo", //response.fieldsanswerssituation
@ -146,8 +147,20 @@ function buildPolygonsObject(response, name) {
pictures: null, pictures: null,
image: "", //getMarkerImage(answer.name), image: "", //getMarkerImage(answer.name),
}; };
return polygonObject;
} else {
return {
ID: r.formsanswersid,
name: name,
title: "Titulo", //response.fieldsanswerssituation
address: "Endereço", //response.fieldsanswerseventaddress,
coordinate: [null, null],
date: "data" + " | " + "hora", //response.fieldsanswerseventdate + " | " + response.fieldsanswerseventtime,
description: "comentário", //response.fielsanswercomment,
logo: custom_assets.pluviometer,
pictures: null,
image: "", //getMarkerImage(answer.name),
};;
}
} }
function buildMarkerObject(response, name) { function buildMarkerObject(response, name) {

7
src/app/screens/PluviometerSharingDataScreen.js

@ -11,6 +11,8 @@ import colors from "../config/colors/";
import moment from "moment"; import moment from "moment";
import PickEventDateLocation from "../components/PickEventDateLocation"; import PickEventDateLocation from "../components/PickEventDateLocation";
import { EventLocationContext } from "../context/EventLocationContext"; import { EventLocationContext } from "../context/EventLocationContext";
import { formcode } from "../components/forms/FormsCode";
import { AssembleIngestionPluviometer } from "../components/forms/AssembleIngestionObject";
const dims = scaleDimsFromWidth(85, 85, 25); const dims = scaleDimsFromWidth(85, 85, 25);
@ -30,6 +32,8 @@ function PluviometerSharingDataScreen(props) {
const [date, setDate] = useState(moment()); const [date, setDate] = useState(moment());
const [time, setTime] = useState(moment()); const [time, setTime] = useState(moment());
const code = formcode.pluviometer;
useEffect(() => { useEffect(() => {
context.defaultLocation(); context.defaultLocation();
}, []); }, []);
@ -44,7 +48,8 @@ function PluviometerSharingDataScreen(props) {
images: [], images: [],
}} }}
onSubmit={(values) => { onSubmit={(values) => {
insertPluviometerData({ ...values, dateTime, time });
// insertPluviometerData({ ...values, dateTime, time });
AssembleIngestionPluviometer({ ...values, date, time})
showMessage({ showMessage({
message: "Informação enviada!", message: "Informação enviada!",
duration: 3000, duration: 3000,

24
src/app/screens/RainSharingDataScreen.js

@ -16,6 +16,8 @@ import moment from "moment";
import { EventLocationContext } from "../context/EventLocationContext"; import { EventLocationContext } from "../context/EventLocationContext";
import PickEventDateLocation from "../components/PickEventDateLocation"; import PickEventDateLocation from "../components/PickEventDateLocation";
import SvgLabeledButton from "../components/SvgLabeledButton"; import SvgLabeledButton from "../components/SvgLabeledButton";
import { AssembleIngestionObject } from "../components/forms/AssembleIngestionObject";
import { formcode } from "../components/forms/FormsCode";
const validationSchema = Yup.object().shape({ const validationSchema = Yup.object().shape({
images: Yup.array(), images: Yup.array(),
@ -24,6 +26,7 @@ const validationSchema = Yup.object().shape({
function RainSharingDataScreen(props) { function RainSharingDataScreen(props) {
const [rain, setRain] = useState(-1); const [rain, setRain] = useState(-1);
const [rainSituation, setRainSituation] = useState(null);
const [error, setError] = useState(false); const [error, setError] = useState(false);
const dims = scaleDimsFromWidth(85, 85, 27); const dims = scaleDimsFromWidth(85, 85, 27);
@ -31,6 +34,8 @@ function RainSharingDataScreen(props) {
const [date, setDate] = useState(moment()); const [date, setDate] = useState(moment());
const [time, setTime] = useState(moment()); const [time, setTime] = useState(moment());
const code = formcode.rain;
const context = useContext(EventLocationContext); const context = useContext(EventLocationContext);
useEffect(() => { useEffect(() => {
@ -52,7 +57,16 @@ function RainSharingDataScreen(props) {
setError(true); setError(true);
return; return;
} }
insertRainData({ ...values, rain, location, date, time, address });
AssembleIngestionObject({
...values,
rainSituation,
code,
location,
date,
time,
address,
});
// insertRainData({ ...values, rain, location, date, time, address });
showMessage({ showMessage({
message: "Informação enviada!", message: "Informação enviada!",
duration: 1950, duration: 1950,
@ -77,13 +91,13 @@ function RainSharingDataScreen(props) {
> >
<SvgLabeledButton <SvgLabeledButton
style={{ marginRight: 17 }} style={{ marginRight: 17 }}
onPress={() => setRain(0)}
onPress={() => {setRain(0); setRainSituation("SEM CHUVA")}}
SvgImage={assets.rainLevel.Rain_0_5} SvgImage={assets.rainLevel.Rain_0_5}
label={"SEM CHUVA"} label={"SEM CHUVA"}
isToggle={rain == 0} isToggle={rain == 0}
/> />
<SvgLabeledButton <SvgLabeledButton
onPress={() => setRain(1)}
onPress={() => {setRain(1); setRainSituation("CHUVA FRACA")}}
SvgImage={assets.rainLevel.Rain_1_5} SvgImage={assets.rainLevel.Rain_1_5}
label={"CHUVA FRACA"} label={"CHUVA FRACA"}
isToggle={rain == 1} isToggle={rain == 1}
@ -93,14 +107,14 @@ function RainSharingDataScreen(props) {
<View flexDirection="row" justifyContent="center"> <View flexDirection="row" justifyContent="center">
<SvgLabeledButton <SvgLabeledButton
style={{ marginRight: 17 }} style={{ marginRight: 17 }}
onPress={() => setRain(2)}
onPress={() => {setRain(2); setRainSituation("CHUVA MODERADA")}}
SvgImage={assets.rainLevel.Rain_2_5} SvgImage={assets.rainLevel.Rain_2_5}
label={"CHUVA MODERADA"} label={"CHUVA MODERADA"}
isToggle={rain == 2} isToggle={rain == 2}
/> />
<SvgLabeledButton <SvgLabeledButton
onPress={() => setRain(3)}
onPress={() => {setRain(3), setRainSituation("CHUVA FORTE")}}
SvgImage={assets.rainLevel.Rain_3_5} SvgImage={assets.rainLevel.Rain_3_5}
label={"CHUVA FORTE"} label={"CHUVA FORTE"}
isToggle={rain == 3} isToggle={rain == 3}

30
src/app/screens/RiverFloodSharingDataScreen.js

@ -16,6 +16,8 @@ import moment from "moment";
import { EventLocationContext } from "../context/EventLocationContext"; import { EventLocationContext } from "../context/EventLocationContext";
import PickEventDateLocation from "../components/PickEventDateLocation"; import PickEventDateLocation from "../components/PickEventDateLocation";
import SvgLabeledButton from "../components/SvgLabeledButton"; import SvgLabeledButton from "../components/SvgLabeledButton";
import { formcode } from "../components/forms/FormsCode";
import { AssembleIngestionObject } from "../components/forms/AssembleIngestionObject";
const validationSchema = Yup.object().shape({ const validationSchema = Yup.object().shape({
images: Yup.array(), images: Yup.array(),
@ -24,6 +26,9 @@ const validationSchema = Yup.object().shape({
function RiverFloodSharingDataScreen(props) { function RiverFloodSharingDataScreen(props) {
const [riverScale, setRiverScale] = useState(-1); const [riverScale, setRiverScale] = useState(-1);
const [riverSituation, setRiverSituation] = useState(null);
const code = formcode.river;
const context = useContext(EventLocationContext); const context = useContext(EventLocationContext);
@ -54,9 +59,11 @@ function RiverFloodSharingDataScreen(props) {
setError(true); setError(true);
return; return;
} }
insertRiverData({
// insertRiverData({ ...values, riverScale, location, date, time, address,});
AssembleIngestionObject({
...values, ...values,
riverScale,
riverSituation,
code,
location, location,
date, date,
time, time,
@ -87,14 +94,20 @@ function RiverFloodSharingDataScreen(props) {
<View style={styles.imgs_row}> <View style={styles.imgs_row}>
<SvgLabeledButton <SvgLabeledButton
style={{ marginRight: 17 }} style={{ marginRight: 17 }}
onPress={() => setRiverScale(0)}
onPress={() => {
setRiverScale(0);
setRiverSituation("BAIXO");
}}
SvgImage={assets.riverLevel.Low} SvgImage={assets.riverLevel.Low}
label={"BAIXO"} label={"BAIXO"}
isToggle={riverScale == 0} isToggle={riverScale == 0}
/> />
<SvgLabeledButton <SvgLabeledButton
onPress={() => setRiverScale(1)}
onPress={() => {
setRiverScale(1);
setRiverSituation("NORMAL");
}}
SvgImage={assets.riverLevel.Normal} SvgImage={assets.riverLevel.Normal}
label={"NORMAL"} label={"NORMAL"}
isToggle={riverScale == 1} isToggle={riverScale == 1}
@ -105,14 +118,19 @@ function RiverFloodSharingDataScreen(props) {
<View flexDirection="row" justifyContent="center"> <View flexDirection="row" justifyContent="center">
<SvgLabeledButton <SvgLabeledButton
style={{ marginRight: 17 }} style={{ marginRight: 17 }}
onPress={() => setRiverScale(2)}
onPress={() => {
setRiverSituation("ALTO");
}}
SvgImage={assets.riverLevel.High} SvgImage={assets.riverLevel.High}
label={"ALTO"} label={"ALTO"}
isToggle={riverScale == 2} isToggle={riverScale == 2}
/> />
<SvgLabeledButton <SvgLabeledButton
onPress={() => setRiverScale(3)}
onPress={() => {
setRiverScale(3);
setRiverSituation("INUNDAR");
}}
SvgImage={assets.riverLevel.Flooding} SvgImage={assets.riverLevel.Flooding}
label={"INUNDAR"} label={"INUNDAR"}
isToggle={riverScale == 3} isToggle={riverScale == 3}

24
src/app/screens/SharingFloodZonesScreen.js

@ -15,6 +15,8 @@ import moment from "moment";
import { EventLocationContext } from "../context/EventLocationContext"; import { EventLocationContext } from "../context/EventLocationContext";
import PickEventDateLocation from "../components/PickEventDateLocation"; import PickEventDateLocation from "../components/PickEventDateLocation";
import SvgLabeledButton from "../components/SvgLabeledButton"; import SvgLabeledButton from "../components/SvgLabeledButton";
import { formcode } from "../components/forms/FormsCode";
import { AssembleIngestionObject } from "../components/forms/AssembleIngestionObject";
const validationSchema = Yup.object().shape({ const validationSchema = Yup.object().shape({
images: Yup.array(), images: Yup.array(),
@ -23,6 +25,10 @@ const validationSchema = Yup.object().shape({
function SharingFloodZonesScreen(props) { function SharingFloodZonesScreen(props) {
const [passable, setPassable] = useState(-1); const [passable, setPassable] = useState(-1);
const [floodSituation, setFloodSituation] = useState(null);
const code = formcode.floodzones;
const [error, setError] = useState(false); const [error, setError] = useState(false);
const [date, setDate] = useState(moment()); const [date, setDate] = useState(moment());
const [time, setTime] = useState(moment()); const [time, setTime] = useState(moment());
@ -51,9 +57,11 @@ function SharingFloodZonesScreen(props) {
setError(true); setError(true);
return; return;
} }
insertFloodZone({
//insertFloodZone({ ...values, passable, location, date, time, address, });
AssembleIngestionObject({
...values, ...values,
passable,
floodSituation,
code,
location, location,
date, date,
time, time,
@ -71,15 +79,21 @@ function SharingFloodZonesScreen(props) {
> >
<View style={styles.imgs_container}> <View style={styles.imgs_container}>
<SvgLabeledButton <SvgLabeledButton
style={{marginRight: 17}}
style={{ marginRight: 17 }}
label={"TRANSITÁVEL"} label={"TRANSITÁVEL"}
isToggle={passable == 1} isToggle={passable == 1}
SvgImage={assets.floodZones.passable} SvgImage={assets.floodZones.passable}
onPress={() => setPassable(1)}
onPress={() => {
setPassable(1);
setFloodSituation("TRANSITAVEL");
}}
/> />
<SvgLabeledButton <SvgLabeledButton
onPress={() => setPassable(0)}
onPress={() => {
setPassable(0);
setFloodSituation("INTRANSITAVEL");
}}
label={"INTRANSITÁVEL"} label={"INTRANSITÁVEL"}
isToggle={passable == 0} isToggle={passable == 0}
SvgImage={assets.floodZones.notPassable} SvgImage={assets.floodZones.notPassable}

Loading…
Cancel
Save