diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfdb8b7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.sh text eol=lf diff --git a/docker-compose.yml b/docker-compose.yml index 48506ab..5adb983 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,7 +34,7 @@ services: environment: - VITE_TENANT=default - VITE_TENANT_CLIENT_ID=e9fdb985-9173-4e01-9d73-ac2d60d1dc8e - - VITE_TENANT_LOGO=data:image/png;base64,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 + - VITE_TENANT_LOGO=/default-logo.png - VITE_TENANT_BACKGROUNDCOLOR=#FFFFFF - VITE_BACKEND_URL=http://localhost/api frontend-adac: @@ -44,8 +44,8 @@ services: - "5174:3000" environment: - VITE_TENANT=adac - - VITE_TENANT_CLIENT_ID=b2cd30ad-bcb9-472b-91d6-effae14db013 - - VITE_TENANT_LOGO=data:image/png;base64,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 + - VITE_TENANT_CLIENT_ID=e9fdb985-9173-4e01-9d73-ac2d60d1dc8e + - VITE_TENANT_LOGO=/adac-logo.png - VITE_TENANT_BACKGROUNDCOLOR=#FFFF00 - VITE_BACKEND_URL=http://localhost/api pin-service: diff --git a/frontend/public/adac-logo.png b/frontend/public/adac-logo.png new file mode 100644 index 0000000..2613333 Binary files /dev/null and b/frontend/public/adac-logo.png differ diff --git a/frontend/public/default-logo.png b/frontend/public/default-logo.png new file mode 100644 index 0000000..731d94a Binary files /dev/null and b/frontend/public/default-logo.png differ diff --git a/frontend/src/App.vue b/frontend/src/App.vue index d3cb002..1a7b5ce 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -3,7 +3,7 @@ logo-black { let tenantBackgroundColor = ref(TENANT_BACKGROUNDCOLOR || '#ffffff') -console.log('TENANT: ' + TENANT + ' PATH: ' + PATH, 'TENANT_BACKGROUNDCOLOR: ' + TENANT_BACKGROUNDCOLOR) +console.log('TENANT: ' + TENANT + ' PATH: ' + PATH, 'TENANT_BACKGROUNDCOLOR: ' + TENANT_BACKGROUNDCOLOR, 'TENANT_LOGO: ' + TENANT_LOGO) console.log(document.cookie) diff --git a/frontend/src/js/config.js b/frontend/src/js/config.js index bf29551..9367c58 100644 --- a/frontend/src/js/config.js +++ b/frontend/src/js/config.js @@ -3,7 +3,7 @@ const BACKEND_URL = import.meta.env.VITE_BACKEND_URL; const TENANT = import.meta.env.VITE_TENANT || 'default'; const TENANT_CLIENT_ID = import.meta.env.VITE_TENANT_CLIENT_ID; -const TENANT_LOGO = import.meta.env.VITE_TENANT_LOGO; +const TENANT_LOGO = import.meta.env.VITE_TENANT_LOGO || '/default-logo.png'; const TENANT_BACKGROUNDCOLOR = import.meta.env.VITE_TENANT_BACKGROUNDCOLOR; const PATH = TENANT == 'default' ? '' : `/${TENANT}`; diff --git a/frontend/src/js/requests.js b/frontend/src/js/requests.js index 94e8e22..4ebf325 100644 --- a/frontend/src/js/requests.js +++ b/frontend/src/js/requests.js @@ -49,6 +49,8 @@ export async function createPin(pin) { "tenant": TENANT } }); + + console.log(response); if (!response.ok) throw new Error(`HTTP error! status: ${response.status}, ${response.statusText}`); const createdPin = await response.json(); @@ -65,7 +67,7 @@ export async function createPin(pin) { */ export async function getHeatmapData() { try { - const response = await fetch(`${BACKEND_URL}/heatmap`, { + const response = await fetch(`${BACKEND_URL}/heatmap/`, { method: 'GET', headers: { 'Content-Type': 'application/json', diff --git a/frontend/src/views/HeatmapView.vue b/frontend/src/views/HeatmapView.vue index 265a637..7501412 100644 --- a/frontend/src/views/HeatmapView.vue +++ b/frontend/src/views/HeatmapView.vue @@ -9,11 +9,11 @@ style="cursor: crosshair" > { console.log(...args); }; + const MONDODB_URI = process.env.MONGODB_URI || "mongodb://localhost:27017"; +debug("heatmap-service: connecting to MongoDB: ", MONDODB_URI); + // connect to MongoDB const client = new MongoClient(MONDODB_URI); await client.connect(); @@ -21,66 +25,47 @@ const polygonCollection = database.collection("polygon"); // heatRegionsState = { timestamp: string, heatRegions: [{ polygonname: string, density: number (0-1), count: number }] } const heatRegionStateCollection = database.collection("heatRegionState"); -// create a view that joins the heatRegion and polygon collections -await database.command({ drop: "heatRegionStateWithPolygonView" }); -// polygon: {polygonname: string, polygon: []} -// heatRegionWithPolygonView: { timestamp: string, heatRegions: [{ polygonname: string, density: number (0-1), count: number, polygon: [] }] } -await database.command({ - create: "heatRegionStateWithPolygonView", - viewOn: "heatRegionState", - pipeline: [ - { - $lookup: { - from: "polygon", - localField: "heatRegions.polygonname", - foreignField: "polygonname", - as: "polygondata", - }, - }, - { - $project: { - _id: 0, - timestamp: 1, - heatRegions: { - polygonname: 1, - density: 1, - count: 1, - polygon: "$polygondata.polygon", - }, - }, - }, - { - $unwind: "$heatRegions.polygon" - } - ], -}); -const heatRegionStateWithPolygonView = database.collection("heatRegionStateWithPolygonView"); - // start express server const app = express(); const port = 3003; app.use(express.json()); app.use(cookieParser()); -app.use(auth); +// app.use(auth); + // define routes app.get("/", async (req, res) => { + debug("heatmap-service: GET /"); + // get the current heat region state - const heatRegionState = await heatRegionStateCollection.find({}).sort({ timestamp: -1 }).limit(1).next(); + const heatRegionState = await heatRegionStateCollection.find({}).sort({ "timestamp": -1 }).limit(1).next(); if (!heatRegionState) { + debug("heatmap-service: no heat region state found"); res.status(400).send("No heat region state found"); return; } - // TEMP: add polygon data to the heat region state (later this should be done in the view) - for (let i = 0; i < heatRegionState.heatRegions.length; i++) { - const heatRegion = heatRegionState.heatRegions[i]; - const polygon = await polygonCollection.findOne({ polygonname: heatRegion.polygonname }); - if (polygon) { - heatRegion.polygon = polygon.polygon; + debug("heatmap-service: heat region state: ", heatRegionState); + + const polygonNames = heatRegionState.heatRegions.map(heatRegion => heatRegion.polygonname); + + debug("heatmap-service: polygon names: ", polygonNames); + + const polygons = await polygonCollection.find({ polygonname: { $in: polygonNames } }).toArray(); + + debug("heatmap-service: polygons: ", polygons); + + heatRegionState.heatRegions.forEach(heatRegion => { + const polygon = polygons.find(polygon => polygon.polygonname === heatRegion.polygonname); + if (!polygon) { + console.error(`Could not find polygon ${heatRegion.polygonname}`); + return; } - } + heatRegion.polygon = polygon.polygon; + }); + + debug("heatmap-service: sending heat region state: ", heatRegionState); // send the heat region state res.status(200).send(heatRegionState); diff --git a/services/heatmap-service/version.txt b/services/heatmap-service/version.txt index 6a2b0ac..13637f4 100644 --- a/services/heatmap-service/version.txt +++ b/services/heatmap-service/version.txt @@ -1 +1 @@ -v1.0.1 \ No newline at end of file +v1.0.3 \ No newline at end of file diff --git a/services/pin-service/index.js b/services/pin-service/index.js index 8a1841b..7c4a1ec 100644 --- a/services/pin-service/index.js +++ b/services/pin-service/index.js @@ -21,59 +21,23 @@ const pinCollection = database.collection("pin"); const polygonCollection = database.collection("polygon"); const heatRegionCollection = database.collection("heatRegion"); -// create a view that joins the pin and polygon collections -await database.command({ drop: "pinWithPolygonView" }); -await database.command({ - create: "pinWithPolygonView", - viewOn: "pin", - pipeline: [ - { - $lookup: { - from: "polygon", - localField: "polygonname", - foreignField: "polygonname", - as: "polygondata", - }, - }, - { - $project: { - _id: 0, - id: 1, - username: 1, - longitude: 1, - latitude: 1, - name: 1, - description: 1, - date: 1, - companions: 1, - duration: 1, - budget: 1, - polygon: "$polygondata.polygon", - polygonname: 1, - }, - }, - { - $unwind: { - path: "$polygon", - preserveNullAndEmptyArrays: true, - }, - }, - ], -}); -const pinWithPolygonView = database.collection("pinWithPolygonView"); - // start express server const app = express(); const port = 3002; app.use(express.json()); app.use(cookieParser()); app.use(auth); - +const debug = (...args) => { console.log(...args); }; app.post("/", async (req, res) => { let pin = req.body; + + debug("pin-service: received pin: ", pin); + pin.username = req.user.username; + debug("pin-service: username in request: ", req.user.username); + const { polygon, polygonname } = await getPolygonAndName(pin.latitude, pin.longitude); if (!polygon) { res.status(400).send("Could not find polygon"); @@ -96,36 +60,26 @@ app.post("/", async (req, res) => { app.get("/", async (req, res) => { const user = req.user; - const pins = await pinWithPolygonView.find({ username: user.username }).toArray(); - res.send(pins); -}); -app.post("/region", async (req, res) => { + debug("pin-service: username in get request: ", req.user.username); - // takes in a lat and lng and returns a polygon that is the region around that point - // it also stores the polygon in the database so that it does not have to be fetched again - // it replaces the getPolygonAndName function (but uses it) - - const { lat, lng } = req.body; - - // fetch the polygon outline from nominatim - const { polygon, polygonname } = await getPolygonAndName(lat, lng); - if (!polygon) { - res.status(400).send("Could not find polygon"); - return; - } + const pins = await pinCollection.find({ "username": req.user.username }).toArray(); - // save the polygon outline to the database to not have to fetch it again if it is not already there - const existingPolygon = await polygonCollection.findOne({ polygonname }); - if (!existingPolygon) { - await polygonCollection.insertOne({ polygonname, polygon }); - } + // add the polygon outlines to the pins + const polygonnames = pins.map(pin => pin.polygonname); + const polygons = await polygonCollection.find({ polygonname: { $in: polygonnames } }).toArray(); + const pinsWithPolygons = pins.map(pin => { + const polygon = polygons.find(polygon => polygon.polygonname === pin.polygonname); + if (!polygon) return pin; + pin.polygon = polygon.polygon; + return pin; + }); - res.send({ polygonname, polygon }); + debug("pin-service: received pins from database: ", pinsWithPolygons); + res.send(pinsWithPolygons); }); - app.listen(port, () => console.log(`Example app listening on http://localhost:${port}`)); @@ -167,7 +121,7 @@ const getPolygonAndName = async (lat, lng) => { let maxZoom = 10; let minZoom = 5; - for (let tryIndex = 0; tryIndex < 10; tryIndex++) { + for (let tryIndex = 0; tryIndex < 5; tryIndex++) { // prepare the reverse geocoding request options let reverseRequestOptions = { diff --git a/services/pin-service/version.txt b/services/pin-service/version.txt index 6a2b0ac..c1757a8 100644 --- a/services/pin-service/version.txt +++ b/services/pin-service/version.txt @@ -1 +1 @@ -v1.0.1 \ No newline at end of file +v1.0.5 \ No newline at end of file diff --git a/services/update-service/index.js b/services/update-service/index.js index 44cd84a..89a0089 100644 --- a/services/update-service/index.js +++ b/services/update-service/index.js @@ -28,7 +28,7 @@ const app = express(); const port = 3005; app.use(express.json()); app.use(cookieParser()); -app.use(auth); +// app.use(auth); // define routes app.get("/", (req, res) => { diff --git a/services/update-service/version.txt b/services/update-service/version.txt index 6a2b0ac..b482243 100644 --- a/services/update-service/version.txt +++ b/services/update-service/version.txt @@ -1 +1 @@ -v1.0.1 \ No newline at end of file +v1.0.2 \ No newline at end of file