diff --git a/frontend/quasar.conf.js b/frontend/quasar.conf.js
index 02412a4..3765fb7 100644
--- a/frontend/quasar.conf.js
+++ b/frontend/quasar.conf.js
@@ -72,6 +72,7 @@ module.exports = function (ctx) {
'QPopupEdit',
'QSlideTransition',
'QToggle',
+ 'QLinearProgress'
],
directives: [
@@ -81,7 +82,8 @@ module.exports = function (ctx) {
// Quasar plugins
plugins: [
- 'Notify'
+ 'Notify',
+ 'Dialog'
]
// iconSet: 'ionicons-v4'
diff --git a/frontend/src/components/qrscanner.vue b/frontend/src/components/qrscanner.vue
index a2abe74..471a353 100644
--- a/frontend/src/components/qrscanner.vue
+++ b/frontend/src/components/qrscanner.vue
@@ -48,6 +48,21 @@
cacheID: null,
}
},
+ beforeRouteUpdate(to, from, next) {
+ console.log("beforeRouteUpdate");
+ this.askForPermission = true;
+ this.activateCamera = false;
+ this.isValid = false;
+ this.validating = false;
+ this.loading = false;
+ this.paused = false;
+ this.result = null;
+ this.params = null;
+ this.noStreamApiSupport = false;
+ this.setCacheId();
+ this.updateCameraState();
+ next()
+ },
created() {
this.setCacheId();
},
@@ -89,6 +104,8 @@
console.log("cache access definition");
console.log(response.data.cacheAccesDefinition);
resolve(true);
+ this.askForPermission = true;
+ this.activateCamera = false;
if (Number(response.data.cacheAccesDefinition.id) === 0) {
this.$router.push({path: `/station/${params.cacheID}/${params.stationID}`});
} else if (Number(response.data.cacheAccesDefinition.id) === 1) {
@@ -166,8 +183,8 @@
this.activateCamera = bool;
if (this.askForPermission === false) {
this.askForPermission = true;
- this.updateCameraState();
}
+ this.updateCameraState();
},
logErrors(promise) {
@@ -190,19 +207,6 @@
}
}
},
- beforeRouteUpdate(to, from, next) {
- this.askForPermission = true;
- this.activateCamera = false;
- this.isValid = false;
- this.validating = false;
- this.loading = false;
- this.paused = false;
- this.result = null;
- this.params = null;
- this.noStreamApiSupport = false;
- this.setCacheId();
- next()
- },
}
diff --git a/frontend/src/layouts/MyLayout.vue b/frontend/src/layouts/MyLayout.vue
index 23d2b46..7d4edf9 100644
--- a/frontend/src/layouts/MyLayout.vue
+++ b/frontend/src/layouts/MyLayout.vue
@@ -245,7 +245,7 @@
},
evalAuthentication: function () {
this.$store.commit('auth/SET_AUTHENTICATED');
- // this.$store.commit('auth/SET_USER');
+ this.$store.commit('auth/SET_USER');
},
logout: function () {
console.log("logout()");
diff --git a/frontend/src/pages/CacheEnd.vue b/frontend/src/pages/CacheEnd.vue
index 93e4f8c..7012c57 100644
--- a/frontend/src/pages/CacheEnd.vue
+++ b/frontend/src/pages/CacheEnd.vue
@@ -9,8 +9,8 @@
-
-
+
+
diff --git a/frontend/src/pages/Login.vue b/frontend/src/pages/Login.vue
index ec2a41d..96418a7 100644
--- a/frontend/src/pages/Login.vue
+++ b/frontend/src/pages/Login.vue
@@ -138,7 +138,7 @@
},
evalAuthentication: function () {
this.$store.commit('auth/SET_AUTHENTICATED');
- this.$store.commit('auth/SET_USER');
+ // this.$store.commit('auth/SET_USER');
},
logout: function () {
console.log("logout()");
diff --git a/frontend/src/pages/MyCaches.vue b/frontend/src/pages/MyCaches.vue
index d226d47..d541885 100644
--- a/frontend/src/pages/MyCaches.vue
+++ b/frontend/src/pages/MyCaches.vue
@@ -32,23 +32,21 @@
expand-separator
icon="location_on"
:label="startedCache.cache.name"
- :caption=" startedCache.cache.description"
+ :caption="startedCache.cache.rankingPoints+' Punkte, '+startedCache.cache.stationen.length+' Stationen'"
>
-
-
-
-
- {{'Nächste Aufgabe: ' + startedCache.aktuelleStation.description }}
-
- {{'Ranglistenpunkte für diesen Cache: ' + startedCache.cache.rankingPoints}}
+
+
+
+
+
+ {{ Math.round(startedCache.progress * 100) }}% bereits geschafft
-
-
-
-
+
@@ -58,7 +56,9 @@
-
+
-
@@ -114,12 +115,26 @@
},
},
created: function () {
- this.fetchUserCaches();
this.$store.commit('auth/SET_AUTHENTICATED');
- this.$store.commit('auth/SET_USER');
+ this.fetchUserCaches();
},
methods: {
- fetchUserCaches: function () {
+ calculateProgress() {
+ console.log("calcProgress...")
+ console.log("this.startedCaches: ")
+ console.log(this.startedCaches)
+ this.startedCaches.forEach(startedCache => {
+ console.log(startedCache)
+ let stationCount = startedCache.cache.stationen.length;
+ let stationPos = 1 + startedCache.cache.stationen.findIndex(station => station.id === startedCache.aktuelleStation.id);
+ startedCache.progress = stationPos / stationCount;
+ console.log("progress: "+startedCache.progress)
+ });
+ console.log("calcProgress finished.");
+ console.log(this.startedCaches)
+ },
+ fetchUserCaches() {
+ console.log("fetchCaches...")
let token;
if (localStorage.getItem('userToken')) {
token = JSON.parse(localStorage.getItem('userToken')).token;
@@ -130,6 +145,7 @@
.then((response) => {
console.log(response.data)
this.startedCaches = response.data;
+ this.calculateProgress();
}).catch((error) => {
// Error
let msg;
@@ -151,7 +167,9 @@
}
console.log(error.config);
this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: msg, title: title,});
- })
+ }).finally(() => {
+ console.log("fetchCaches... finally")
+ });
},
continueCache(cacheID) {
console.log("cacheID");
diff --git a/frontend/src/pages/Overview.vue b/frontend/src/pages/Overview.vue
index d55cae8..4daba55 100644
--- a/frontend/src/pages/Overview.vue
+++ b/frontend/src/pages/Overview.vue
@@ -21,15 +21,21 @@
-
-
+
+
@@ -43,22 +49,29 @@
-
-
+
+
+
+ icon="edit" size="xs"/>
+ icon="image" label="QRCodes" size="xs"/>
-
+
@@ -94,82 +107,148 @@
tab: 'list',
caches: [],
stations: [],
- pois: []
+ pois: [],
+ render: false
}
},
mounted: function () {
},
computed: {
- // ...mapGetters([
- // 'auth/GET_ADMINSTATE'
- // ]),
-
hasAdminState() {
return this.$store.getters['auth/GET_ADMINSTATE'];
}
},
- created: function () {
+ beforeMount() {
+ },
+
+ async created() {
console.log("created(): " + this.caches);
- this.fetchAllCaches();
- this.$store.commit('auth/SET_AUTHENTICATED');
- this.$store.commit('auth/SET_USER');
+ // this.$store.commit('auth/SET_AUTHENTICATED');
+ // this.$store.commit('auth/SET_USER');
+ await this.fetchAllCaches();
+ this.render = await this.fetchMyCaches();
},
methods: {
- fetchAllCaches() {
- this.$axios.get('/api/allCaches')
- .then((response) => {
- this.caches = response.data;
- for(let cache in this.caches) {
+ getColorClass(cache) {
+ switch (this.getCacheAccesDefinition(cache)) {
+ case -1:
+ return "primary"
+ case 0:
+ return "amber"
+ case 1:
+ return "green"
+ }
+ },
+ getCacheAccesDefinition(cache) {
+ // console.log("getCacheAccessDefinition")
+ // console.log(cache.hasOwnProperty('cacheAccesDefinition') ? cache.cacheAccesDefinition : -1)
+ // can be -1 = no accessdefinition, 0 = started or 1 = finished
+ return cache.hasOwnProperty('cacheAccesDefinition') ? cache.cacheAccesDefinition : -1;
+ },
- this.stations[cache]=(this.caches[cache].stationen[0]);
- const poiItem = {
- Name: this.caches[cache].name,
- CategoryID: 3,
- Latitude: this.stations[cache].lattitude,
- Longitude: this.stations[cache].longitude
- };
- this.pois.push(poiItem);
+ fetchAllCaches() {
+ return new Promise(resolve => {
+ this.$axios.get('/api/allCaches')
+ .then((response) => {
+ this.caches = response.data;
+ //this.fetchMyCaches();
+ for (let cache in this.caches) {
+
+ this.stations[cache] = (this.caches[cache].stationen[0]);
+ const poiItem = {
+ Name: this.caches[cache].name,
+ CategoryID: 3,
+ Latitude: this.stations[cache].lattitude,
+ Longitude: this.stations[cache].longitude
+ };
+ this.pois.push(poiItem);
+ }
+ this.initMap();
+ resolve(true);
+ }).catch((error) => {
+ let message;
+ let header = "Fehler: ";
+ if (error.response) {
+ console.log("ERROR RESPONSE");
+ // The request was made and the server responded with a status code
+ // that falls out of the range of 2xx
+ message = error.response.data.error;
+ header += error.response.status;
+ } else if (error.request) {
+ // The request was made but no response was received
+ // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
+ // http.ClientRequest in node.js
+ message = "Anfrage fehlgeschlagen.";
+ } else {
+ // Something happened in setting up the request that triggered an Error
+ console.log('Error', error.message);
+ message = error.message;
}
- this.initMap();
- }).catch((error) => {
- let message;
- let header = "Fehler: ";
- if (error.response) {
- console.log("ERROR RESPONSE");
- // The request was made and the server responded with a status code
- // that falls out of the range of 2xx
- message = error.response.data.error;
- header += error.response.status;
- } else if (error.request) {
- // The request was made but no response was received
- // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
- // http.ClientRequest in node.js
- message = "Anfrage fehlgeschlagen.";
- } else {
- // Something happened in setting up the request that triggered an Error
- console.log('Error', error.message);
- message = error.message;
- }
- console.log(error.config);
- this.$store.commit('dialog/NEW_MESSAGE_DIALOG', { message: message, title: header, });
+ console.log(error.config);
+ this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: message, title: header,});
+ resolve(true);
+ })
})
},
+
+ fetchMyCaches() {
+ return new Promise(resolve => {
+ console.log("fetchMyCaches...");
+ if (this.$store.state.auth.isAuthenticated && localStorage.getItem('userToken')) {
+ const token = JSON.parse(localStorage.getItem('userToken')).token;
+ this.$axios.get('/api/getMyCaches', {params: {token}})
+ .then((response) => {
+ console.log("process data...")
+ console.log(response.data)
+ for (let item of response.data) {
+ this.caches.forEach(cache => {
+ if (cache.id === item.cache.id) {
+ cache.cacheAccesDefinition = item.cacheAccesDefinition.id;
+ console.log("found accessdefinition: id: " + cache.id + " ad: " + cache.cacheAccesDefinition);
+
+ }
+ })
+ }
+ console.log(this.caches);
+ console.log("data processed.")
+ }).finally(() => resolve(true))
+ } else {
+ resolve(true);
+ }
+ })
+ },
+
+ confirmDelete(cacheID) {
+ this.$q.dialog({
+ title: 'Löschen...',
+ message: 'Willst du diesen Cache wirklich löschen?',
+ persistent: true,
+ cancel: true,
+ }).onOk(() => {
+ console.log('>>>> OK');
+ this.deleteCache(cacheID)
+ }).onCancel(() => {
+ console.log('>>>> Cancel')
+ }).onDismiss(() => {
+ })
+ },
+
addCache() {
this.$router.push({path: `/cache`})
},
editCache() {
},
- initMap(){
+ initMap() {
console.log("Signalwort: " + this.pois);
- // this.$axios.post('http://seserver.se.hs-heilbronn.de:3000/api/map', {
- // body: this.pois
- // }).then((response)=>{
- // console.log(response)
- // })
- // },
+ // this.$axios.post('http://seserver.se.hs-heilbronn.de:3000/api/map', {
+ // body: this.pois
+ // }).then((response)=>{
+ // console.log(response)
+ // })
+ // },
this.$axios.get('http://www.se.hs-heilbronn.de:3000/api/map/lon=9&lat=49', {
body: this.pois
- }).then((response)=>{
+ }).then((response) => {
console.log(response)
})
},
@@ -198,7 +277,7 @@
message = error.message;
}
console.log(error.config);
- this.$store.commit('dialog/NEW_MESSAGE_DIALOG', { message: message, title: header, });
+ this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: message, title: header,});
})
},
startCache(cacheID) {
@@ -208,6 +287,41 @@
this.$store.state.currentCache.currentCacheID = Number(cacheID);
this.$router.push({path: `/CacheStart/${cacheID}`})
},
+ continueCache(cacheID) {
+ console.log("cacheID");
+ console.log(cacheID);
+ let currentStationID;
+ if (localStorage.getItem('userToken')) {
+ let params = {cacheID: cacheID};
+ params.token = JSON.parse(localStorage.getItem('userToken')).token;
+ this.$axios.get('/api/getCurrentStation', {params})
+ .then((response) => {
+ console.log(response.data);
+ currentStationID = response.data.aktuelleStation.id;
+ this.$router.push({path: `/station/${cacheID}/${currentStationID}`});
+ })
+ .catch((error) => {
+ });
+ }
+ },
+ goToReward(cacheID) {
+ console.log("cacheID");
+ console.log(cacheID);
+ let currentStationID;
+ if (localStorage.getItem('userToken')) {
+ let params = {cacheID: cacheID};
+ params.token = JSON.parse(localStorage.getItem('userToken')).token;
+ this.$axios.get('/api/getCurrentStation', {params})
+ .then((response) => {
+ console.log(response.data);
+ currentStationID = response.data.aktuelleStation.id;
+ this.$router.push({path: `/CacheEnd/${params.cacheID}`});
+ })
+ .catch((error) => {
+ });
+ }
+ },
+
generateQrCodes(cacheID) {
this.$router.push({path: `/generator/${cacheID}`})
}
diff --git a/frontend/src/pages/StationView.vue b/frontend/src/pages/StationView.vue
index 990e5b1..5e32c7c 100644
--- a/frontend/src/pages/StationView.vue
+++ b/frontend/src/pages/StationView.vue
@@ -37,6 +37,8 @@
},
beforeRouteUpdate(to, from, next) {
console.log("beforeRouteUpdate: reset data and fetch");
+ this.cameraActive = false;
+ this.result = null;
this.cacheID = "";
this.cacheName = "";
this.cache = {
diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js
index 713eb99..e56463b 100644
--- a/frontend/src/router/index.js
+++ b/frontend/src/router/index.js
@@ -5,7 +5,7 @@ import routes from "./routes";
import {axiosInstance} from "../boot/axios";
Vue.use(VueRouter);
-//import store from "../store/index";
+import store from "../store/index";
/*
* If not building with SSR mode, you can
@@ -57,6 +57,7 @@ export default function({ store }/* { store, ssrContext } */) {
})
.then((response) => {
console.log("Token valid!");
+ store.commit('auth/SET_AUTHENTICATED');
return next();
})
.catch((error) => {
@@ -72,6 +73,7 @@ export default function({ store }/* { store, ssrContext } */) {
title: "Bitte erneut anmelden.",
color: "blue", });
localStorage.removeItem('userToken');
+ store.commit('auth/SET_AUTHENTICATED');
return next('/Login');
} else {
console.log("unexpected behaviour");
diff --git a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java
index a9643d9..3903591 100644
--- a/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java
+++ b/src/main/java/hhn/labsw/bugageocaching/controller/Controller.java
@@ -324,6 +324,39 @@ public class Controller {
return createCacheUtil(cache);
}
+ @ApiOperation(value = "Edits a Cache")
+ @ApiResponses(value = {
+ @ApiResponse(code = 404, message = "Database error"),
+ @ApiResponse(code = 401, message = "JWT Token expired"),
+ @ApiResponse(code = 400, message = "Something wrong with the given Parameters")
+ })
+ @CrossOrigin(origins = "*", allowedHeaders = "*") // only for dev purpose
+ @RequestMapping(value = "/api/editCache", method = RequestMethod.PUT, produces = "application/json")
+ @ResponseBody
+ public ResponseEntity editCache(@RequestBody Cache newCache){
+
+ //----------------------
+ //Get Cache
+ ResponseEntity getCache = FinderUtil.findCacheById(newCache.getId() + "");
+
+ if (getCache.getStatusCodeValue() != 200) {
+ return getCache;
+ }
+
+ Cache oldCache = (Cache) getCache.getBody();
+ //----------------------
+
+ oldCache.setDescription(newCache.getDescription());
+ oldCache.setName(newCache.getName());
+ oldCache.setRankingPoints(newCache.getRankingPoints());
+ oldCache.setReward(newCache.getReward());
+ oldCache.setStationen(newCache.getStationen());
+
+ cacheRepository.save(oldCache);
+
+ return ResponseEntity.status(200).body("Cache edited");
+ }
+
@ApiOperation(value = "Checks if the given User has an admin role")
@ApiResponses(value = {
@ApiResponse(code = 404, message = "Database error"),
@@ -673,21 +706,22 @@ public class Controller {
// verlässt team
user_info.setTeam(null);
- int i = 0;
+ user_infoRepository.save(user_info);
+
+ //int i = 0;
// zählt teammitglieder
- for (User_Info userInfo1 : user_infoRepository.findAll()) {
+ List user_infos = user_infoRepository.findByTeam(team);
+ /*for (User_Info userInfo1 : user_infoRepository.findAll()) {
if (userInfo1.getTeam().equals(team)) {
i++;
}
- }
+ }*/
// löscht team, wenn keine teammitglieder mehr vorhanden
- if (i == 0) {
+ if (user_infos.size() == 0) {
teamRepository.delete(team);
}
- user_infoRepository.save(user_info);
-
return ResponseEntity.status(200).body("Ok");
}