Merge branch 'develop' into frontend/timo_neu

This commit is contained in:
Timo Volkmann 2019-06-19 12:29:53 +02:00
commit 43d6cc7909
11 changed files with 2001 additions and 130 deletions

View File

@ -1,6 +1,7 @@
plugins { plugins {
id 'org.springframework.boot' version '2.1.3.RELEASE' id 'org.springframework.boot' version '2.1.3.RELEASE'
id 'java' id 'java'
id 'org.asciidoctor.jvm.convert' version '2.2.0'
} }
apply plugin: 'io.spring.dependency-management' apply plugin: 'io.spring.dependency-management'
@ -13,6 +14,8 @@ sourceCompatibility = '1.8'
repositories { repositories {
mavenCentral() mavenCentral()
jcenter()
maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
} }
bootWar{ bootWar{
@ -73,6 +76,6 @@ dependencies {
testCompile group: 'junit', name: 'junit', version: '4.+' testCompile group: 'junit', name: 'junit', version: '4.+'
compile "io.github.swagger2markup:swagger2markup:1.3.1"
} }

View File

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac"/>
<resourceExtensions>
<entry name=".+\.(properties|xml|html|dtd|tld)"/>
<entry name=".+\.(gif|png|jpeg|jpg)"/>
</resourceExtensions>
<wildcardResourcePatterns>
<entry name="!?*.class"/>
<entry name="!?*.scala"/>
<entry name="!?*.groovy"/>
<entry name="!?*.java"/>
</wildcardResourcePatterns>
<annotationProcessing enabled="false" useClasspath="true"/>
<bytecodeTargetLevel target="1.8"/>
</component>
<component name="CopyrightManager" default="">
<module2copyright/>
</component>
<component name="DependencyValidationManager">
<option name="SKIP_IMPORT_STATEMENTS" value="false"/>
</component>
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false"/>
<component name="GradleUISettings">
<setting name="root"/>
</component>
<component name="GradleUISettings2">
<setting name="root"/>
</component>
<component name="IdProvider" IDEtalkID="11DA1DB66DD62DDA1ED602B7079FE97C"/>
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY"/>
<option name="OPTION_SCOPE" value="protected"/>
<option name="OPTION_HIERARCHY" value="true"/>
<option name="OPTION_NAVIGATOR" value="true"/>
<option name="OPTION_INDEX" value="true"/>
<option name="OPTION_SEPARATE_INDEX" value="true"/>
<option name="OPTION_DOCUMENT_TAG_USE" value="false"/>
<option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false"/>
<option name="OPTION_DOCUMENT_TAG_VERSION" value="false"/>
<option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true"/>
<option name="OPTION_DEPRECATED_LIST" value="true"/>
<option name="OTHER_OPTIONS" value=""/>
<option name="HEAP_SIZE"/>
<option name="LOCALE"/>
<option name="OPEN_IN_BROWSER" value="true"/>
</component>
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/labswp_2019_sose_geocaching.iml" filepath="$PROJECT_DIR$/labswp_2019_sose_geocaching.iml"/>
</modules>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" assert-keyword="false" jdk-15="true" project-jdk-type="JavaSDK" assert-jdk-15="false" project-jdk-name="1.10">
<output url="file://$PROJECT_DIR$/out"/>
</component>
<component name="SvnBranchConfigurationManager">
<option name="mySupportsUserInfoFilter" value="true"/>
</component>
<component name="VcsDirectoryMappings">
<mapping directory="" vcs=""/>
</component>
<component name="masterDetails">
<states>
<state key="ArtifactsStructureConfigurable.UI">
<UIState>
<splitter-proportions>
<SplitterProportionsDataImpl/>
</splitter-proportions>
<settings/>
</UIState>
</state>
<state key="Copyright.UI">
<UIState>
<splitter-proportions>
<SplitterProportionsDataImpl/>
</splitter-proportions>
</UIState>
</state>
<state key="ProjectJDKs.UI">
<UIState>
<splitter-proportions>
<SplitterProportionsDataImpl>
<option name="proportions">
<list>
<option value="0.2"/>
</list>
</option>
</SplitterProportionsDataImpl>
</splitter-proportions>
<last-edited>1.6</last-edited>
</UIState>
</state>
<state key="ScopeChooserConfigurable.UI">
<UIState>
<splitter-proportions>
<SplitterProportionsDataImpl/>
</splitter-proportions>
<settings/>
</UIState>
</state>
</states>
</component>
</project>

View File

@ -9,7 +9,7 @@
<vl-geom-point :coordinates="[lon, lat]"></vl-geom-point> <vl-geom-point :coordinates="[lon, lat]"></vl-geom-point>
<vl-style-box> <vl-style-box>
<vl-style-icon src="./statics/map-marker.svg" :scale="2.0" :anchor="[0.5, 1]"></vl-style-icon> <vl-style-icon src="./statics/map-marker_red.svg" :scale="2.0" :anchor="[0.5, 1]"></vl-style-icon>
</vl-style-box> </vl-style-box>
</template> </template>
</vl-feature> </vl-feature>
@ -87,6 +87,7 @@ Vue.use(VueLayers);
this.stationID = cache.stationen[0]; this.stationID = cache.stationen[0];
this.lon = this.stationID.longitude; this.lon = this.stationID.longitude;
this.lat = this.stationID.lattitude; this.lat = this.stationID.lattitude;
this.center = [this.lon, this.lat]
}) })
}, },
checkStation() { checkStation() {

View File

@ -32,6 +32,7 @@
<q-input lazy-rules outlined filled stack-label v-model="newTeamName" <q-input lazy-rules outlined filled stack-label v-model="newTeamName"
type="text" type="text"
label="Teamname eingeben" label="Teamname eingeben"
color="black"
:rules="[val=>val.length>=2||'Name muss mindestens 5 Zeichen lang sein!']"/> :rules="[val=>val.length>=2||'Name muss mindestens 5 Zeichen lang sein!']"/>
<q-btn <q-btn
:disabled="!newTeamNameValidationSuccesful" :disabled="!newTeamNameValidationSuccesful"
@ -64,18 +65,20 @@
</q-expansion-item> </q-expansion-item>
</q-card> </q-card>
</q-list> </q-list>
<!--<div v-show="hasAdminState">--> <p class="text-h5 q-pt-lg" v-show="hasAdminState"> Nutzer zu Administrator befördern </p>
<!--<p class="text-h5 q-mt-sm"> Neuen Admin hinzufügen </p>--> <div v-show="hasAdminState" align="center" class="row q-mt-sm justify-between">
<!--<q-input lazy-rules outlined filled stack-label v-model="newAdminMail"--> <q-input lazy-rules outlined filled stack-label v-model="newAdminMail"
<!--type="text" label="Email des Nutzers" class="col-9"--> type="text" label="Email des Nutzers" color="black" class="col q-mr-sm"
<!--:rules="[val=>validateEmail(val)||'Bitte Email verwenden']"/>--> :rules="[val=>validateEmail(val)||'Bitte Email verwenden']"/>
<!--<q-btn class="col-3"--> <div class="row" style="padding-bottom: 20px">
<!--icon="arrow_right_alt"--> <q-btn label="Nutzer befördern"
<!--@click="getUser()"--> unelevated
<!--:disabled="!adminInviteChecked"--> @click="getUser()"
<!--color="positive"--> :disabled="!adminInviteChecked"
<!--type="submit"/>--> color="primary"
<!--</div>--> type="submit"/>
</div>
</div>
</div> </div>
</q-tab-panel> </q-tab-panel>
<q-tab-panel v-if="boolAlreadyInTeam" name="teams" class="q-pa-none"> <q-tab-panel v-if="boolAlreadyInTeam" name="teams" class="q-pa-none">
@ -191,6 +194,7 @@
boolStatus: false, boolStatus: false,
boolTable: true, boolTable: true,
boolMemberTableUpdating: false, boolMemberTableUpdating: false,
newAdminMail: "",
teamColumns: [ teamColumns: [
{ {
name: 'desc', name: 'desc',
@ -216,7 +220,6 @@
page: 1, page: 1,
rowsPerPage: 10 rowsPerPage: 10
}, },
// newAdminMail: "",
} }
}, },
mounted: function () { mounted: function () {
@ -279,6 +282,20 @@
}).onDismiss(() => { }).onDismiss(() => {
}) })
}, },
confirmAddAdmin(newAdmin) {
this.$q.dialog({
title: 'Administrator hinzufügen',
message: 'Willst du den Nutzer ' + newAdmin.name + ' mit der Email ' + newAdmin.email + ' wirklich zum Administrator befördern?',
persistent: true,
cancel: true,
}).onOk(() => {
console.log('>>>> OK');
this.addAdmin(newAdmin);
}).onCancel(() => {
console.log('>>>> Cancel')
}).onDismiss(() => {
})
},
activateInvite() { activateInvite() {
if (this.inviteActivated) { if (this.inviteActivated) {
this.inviteActivated = false; this.inviteActivated = false;
@ -516,73 +533,69 @@
}); });
this.updateStatus(); this.updateStatus();
}, },
// getUser() { getUser() {
// const data = { const token = JSON.parse(localStorage.getItem('userToken')).token;
// "email" : this.newAdminMail this.$axios.get(process.env.USER_API + '/account/email/' + this.newAdminMail, {
// } headers: {
// JSON.stringify(data); 'Authorization': 'Bearer ' + token,
// const token = JSON.parse(localStorage.getItem('userToken')).token; }
// this.$axios.get(process.env.USER_API + '/account/email', data, { }).then((response) => {
// headers: { let newAdminAccount = response.data;
// 'Authorization': 'Bearer ' + token, if (response.status === 200) {
// } this.confirmAddAdmin(response.data);
// }).then((response) => { }
// let newAdminAccount = response.data; })
// if (response.status === 200) { .catch((error) => {
// this.addAdmin(JSON.parse(response).data); let message;
// } let header = "Unbekannter Fehler...";
// }) if (error.response) {
// .catch((error) => { console.log(error.response)
// let message; if (error.response.status === 400) {
// let header = "Unbekannter Fehler..."; message = "Es gibt keinen Nutzer mit dieser Email!";
// if (error.response) { header = "Email überprüfen!";
// console.log(error.response) }
// if (error.response.status === 400) { } else if (error.request) {
// message = "Es gibt keinen Nutzer mit dieser Email!"; console.log(error.request);
// header = "Email überprüfen!"; header = "Anfrage fehlgeschlagen!";
// } message = "Die Verbindung zum Server ist gestört. Versuchen Sie es später noch einmal.";
// } else if (error.request) { }
// console.log(error.request); this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: message, title: header});
// header = "Anfrage fehlgeschlagen!"; });
// message = "Die Verbindung zum Server ist gestört. Versuchen Sie es später noch einmal."; },
// } addAdmin(newAdmin) {
// this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: message, title: header}); const token = JSON.parse(localStorage.getItem('userToken')).token;
// }); newAdmin.roles.role = "ADMIN";
// }, JSON.stringify(newAdmin);
// addAdmin(newAdmin) { this.$axios.patch(process.env.USER_API, '/account', newAdmin, {
// const token = JSON.parse(localStorage.getItem('userToken')).token; headers: {
// newAdmin.roles.role = "ADMIN"; 'Authorization': 'Bearer ' + token,
// JSON.stringify(newAdmin); }
// this.$axios.patch(process.env.USER_API, '/account', newAdmin, { }).then((response) => {
// headers: { if (response.status === 200) {
// 'Authorization': 'Bearer ' + token, this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {
// } message: "Du hast den Nutzer mit der Email " + this.newAdminMail + " als Admin freigeschalten!",
// }).then((response) => { title: "Nutzerverwaltung",
// if (response.status === 200) { color: "blue"
// this.$store.commit('dialog/NEW_MESSAGE_DIALOG', { });
// message: "Du hast den Nutzer mit der Email " + this.newAdminMail + " als Admin freigeschalten!", }
// title: "Nutzerverwaltung", })
// color: "blue" .catch((error) => {
// }); let message;
// } let header = "Unbekannter Fehler...";
// }) if (error.response) {
// .catch((error) => { console.log(error.response)
// let message; if (error.response.status === 400) {
// let header = "Unbekannter Fehler..."; message = JSON.parse(error).error;
// if (error.response) { header = "Probleme mit dem zu bearbeitenden Nutzeraccount!";
// console.log(error.response) }
// if (error.response.status === 400) { } else if (error.request) {
// message = JSON.parse(error).error; console.log(error.request);
// header = "Probleme mit dem zu bearbeitenden Nutzeraccount!"; header = "Anfrage fehlgeschlagen!";
// } message = "Die Verbindung zum Server ist gestört. Versuchen Sie es später noch einmal.";
// } else if (error.request) { }
// console.log(error.request); this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: message, title: header});
// header = "Anfrage fehlgeschlagen!"; });
// message = "Die Verbindung zum Server ist gestört. Versuchen Sie es später noch einmal."; },
// }
// this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: message, title: header});
// });
// },
handleError(error) { handleError(error) {
let msg; let msg;
let title; let title;

View File

@ -98,7 +98,7 @@
methods: { methods: {
validateEmail(email) { validateEmail(email) {
//var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; //var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
let re = new RegExp('^[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$'); let re = new RegExp('/^(([^<>()\\[\\]\\\\.,;:\\s@"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@"]+)*)|(".+"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/');
return re.test(String(email).toLowerCase()); return re.test(String(email).toLowerCase());
}, },
register: function () { register: function () {

View File

@ -4,12 +4,21 @@
data-projection="EPSG:4326" style="height: 200px" v-if="!cameraActive"> data-projection="EPSG:4326" style="height: 200px" v-if="!cameraActive">
<vl-view :zoom.sync="zoom" :center.sync="center" :rotation.sync="rotation"></vl-view> <vl-view :zoom.sync="zoom" :center.sync="center" :rotation.sync="rotation"></vl-view>
<vl-feature ref="marker" v-for="station in cache.stationen" :key="station.id"> <vl-feature ref="marker">
<template> <template>
<vl-geom-point :coordinates="[station.longitude, station.lattitude]"></vl-geom-point> <vl-geom-point :coordinates="[station.longitude, station.lattitude]"></vl-geom-point>
<vl-style-box> <vl-style-box>
<vl-style-icon :src="getMarkerURL(station)" :scale="2.0" :anchor="[0.5, 1]"></vl-style-icon> <vl-style-icon src="./statics/map-marker_red.svg" :scale="2.0" :anchor="[0.5, 1]"></vl-style-icon>
</vl-style-box>
</template>
</vl-feature>
<vl-feature ref="marker" v-for="station in filteredStations" :key="station.id">
<template>
<vl-geom-point :coordinates="[station.longitude, station.lattitude]"></vl-geom-point>
<vl-style-box>
<vl-style-icon src="./statics/map-marker_grey.svg" :scale="2.0" :anchor="[0.5, 1]"></vl-style-icon>
</vl-style-box> </vl-style-box>
</template> </template>
</vl-feature> </vl-feature>
@ -57,13 +66,14 @@ Vue.use(VueLayers);
stationen: [], stationen: [],
}, },
station: {}, station: {},
markercolor: "red", markercolor: "grey",
cameraActive: false, cameraActive: false,
result: null, result: null,
zoom: 15, zoom: 15,
center: [ 9.208858198755664, 49.14785422283188], center: [ 9.208858198755664, 49.14785422283188],
rotation: 0, rotation: 0,
geolocPosition: undefined, geolocPosition: undefined,
filteredStations: [],
} }
}, },
beforeRouteUpdate(to, from, next) { beforeRouteUpdate(to, from, next) {
@ -105,24 +115,28 @@ Vue.use(VueLayers);
}, },
methods: { methods: {
fetchData() { fetchData() {
this.$axios.get('/api/allCaches') if (localStorage.getItem('userToken')) {
.then((response) => { let params = {cacheID: this.$route.params.cache};
console.log("/api/allCaches"); params.token = JSON.parse(localStorage.getItem('userToken')).token;
console.log(response.data); this.$axios.get('/api/getCurrentStation',{params})
const cache = response.data.find(cache => cache.id === Number(this.$route.params.cache)); .then((response) => {
this.cache = cache; console.log("/api/getCurrentStation");
this.station = cache.stationen.find(station => station.id === Number(this.$route.params.id)); console.log(response.data);
this.cacheName = cache.name; const cache = response.data.cache;
this.cacheID = this.$route.params.cache; this.cache = cache;
console.log(JSON.stringify(this.cache)); this.station = response.data.aktuelleStation;
console.log(JSON.stringify(this.station)); this.cacheName = cache.name;
console.log(this.cache); this.cacheID = this.$route.params.cache;
console.log(JSON.stringify(this.cache));
console.log(JSON.stringify(this.station));
console.log(this.cache);
let stationIndex = this.cache.stationen.findIndex(s => s.id === this.station.id);
for( let i=0; i< stationIndex; i++){
this.filteredStations.push(this.cache.stationen[i])
}
this.center = [this.station.longitude, this.station.lattitude]
}) })
}, }
getMarkerURL(station) {
console.log(station);
return `./statics/map-marker_${this.markercolor}.svg`
}, },
updateResult(event) { updateResult(event) {

View File

@ -24,11 +24,11 @@
<q-card class="q-mb-md" v-for="(user) in rankinglist" :key="user.id"> <q-card class="q-mb-md" v-for="(user) in rankinglist" :key="user.id">
<q-item class="q-pr-sm "> <q-item class="q-pr-sm ">
<q-item-section> <q-item-section>
<q-item-label v-if="username === user.username" @click="gotoProfile"><a class="text-green" <q-item-label v-if="email === user.username" @click="gotoProfile"><a class="text-green"
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a> style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
</q-item-label> </q-item-label>
<q-item-label v-if="username !== user.username"><a class="text-black" <q-item-label v-if="email !== user.username"><a class="text-black"
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a> style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
</q-item-label> </q-item-label>
</q-item-section> </q-item-section>
<q-item-section side> <q-item-section side>
@ -39,19 +39,18 @@
<div class="column q-gutter-lg" style=""> <div class="column q-gutter-lg" style="">
<div v-if="hasAdminState" class="col"> <div v-if="hasAdminState" class="col">
<div class=""> <div class="">
<div class="" style="max-width: 440px"> <q-input lazy-rules outlined filled stack-label
<q-input lazy-rules outlined filled stack-label type="text"
type="text" label="Email eingeben"
label="Username eingeben" unelevated color="black"
unelevated color="negative" v-model="deleteUser"
v-model="deleteUser" :rules="[val=>validateEmail(val)||'Bitte Email verwenden']"
></q-input> ></q-input>
</div>
</div> </div>
</div> </div>
<div v-if="hasAdminState" class="row"> <div v-if="hasAdminState" class="row">
<q-btn <q-btn
label="Punkte des Nutzer zurücksetzen" label="Punkte des Nutzers zurücksetzen"
color="negative" color="negative"
class="full-width" class="full-width"
@click="resetPoints()" @click="resetPoints()"
@ -105,7 +104,8 @@
rankinglist: [], rankinglist: [],
teamRankinglist: [], teamRankinglist: [],
username: null, username: null,
deleteUser: null deleteUser: null,
email: null,
} }
}, },
created: function () { created: function () {
@ -114,6 +114,7 @@
this.fetchRankinglist(); this.fetchRankinglist();
this.fetchTeamRankinglist(); this.fetchTeamRankinglist();
this.username = JSON.parse(localStorage.getItem('userToken')).name; this.username = JSON.parse(localStorage.getItem('userToken')).name;
this.email = JSON.parse(localStorage.getItem('userMail'));
}, },
computed: { computed: {
hasAdminState() { hasAdminState() {
@ -162,6 +163,7 @@
console.log(response.data); console.log(response.data);
this.$store.commit('dialog/NEW_MESSAGE_DIALOG', { this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {
message: "Die Rangliste wurde erfolgreich zurückgesetzt", message: "Die Rangliste wurde erfolgreich zurückgesetzt",
title: "Zurücksetzen",
color: "blue" color: "blue"
}); });
this.$axios.get('/api/getRankingList', {params: {token}}) this.$axios.get('/api/getRankingList', {params: {token}})
@ -186,18 +188,48 @@
// lastSum = ranking.rankingPointsSum; // lastSum = ranking.rankingPointsSum;
// } // }
}, },
resetPoints(){ resetPoints() {
if(this.deleteUser != null){ if (this.deleteUser != null) {
let username = this.deleteUser; let username = this.deleteUser;
let token = JSON.parse(localStorage.getItem('userToken')).token; let token = JSON.parse(localStorage.getItem('userToken')).token;
if (this.validateEmail(this.email)) {
console.log(this.validateEmail(this.email));
this.$axios.put('/api/resetSingleUser',null, {params: {token, username}}) this.$axios.put('/api/resetSingleUser', null, {params: {token, username}})
.then((response) => { .then((response) => {
console.log("Rankinglist: "); console.log("Rankinglist: ");
console.log(response.data); console.log(response.data);
this.fetchRankinglist(); this.fetchRankinglist();
}).catch((error) => { this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {
}) message: "Die Ranglistenpunkte des Benutzers wurden erfolgreich zurückgesetzt!",
title: "Zurücksetzen",
color: "blue"
});
}).catch((error) => {
let msg;
let title;
if (error.response) {
title = "Bitte Eingaben überprüfen!";
msg = error.response.data;
} else if (error.request) {
title = "Verbindungsfehler!";
msg = "Es konnte keine Verbindung zum Server aufgebaut werden. Versuchen Sie es später noch einmal!"
console.log(error.request);
} else {
title = "Error";
msg = error.message;
console.log('Error', error.message);
}
console.log(error.config);
this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: msg, title: title,});
})
} else {
this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {
message: "Bitte geben Sie eine gültige Email ein",
title: "Ungültige Email",
color: "negative"
});
}
} else { } else {
this.$store.commit('dialog/NEW_MESSAGE_DIALOG', { this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {
message: "Zum zurücksetzen der Punkte eines Nutzers gib bitte einen Usernamen ein", message: "Zum zurücksetzen der Punkte eines Nutzers gib bitte einen Usernamen ein",
@ -207,6 +239,11 @@
} }
}, },
validateEmail(email) {
let re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
},
} }
} }
</script> </script>

View File

@ -0,0 +1,18 @@
package hhn.labsw.bugageocaching;
import io.github.swagger2markup.Swagger2MarkupConverter;
import java.nio.file.Path;
import java.nio.file.Paths;
public class SwaggerMarkup {
public static void main(String[] args) {
Path localSwaggerFile = Paths.get("swagger.json");
Path outputDirectory = Paths.get("build/asciidoc");
Swagger2MarkupConverter.from(localSwaggerFile)
.build()
.toFolder(outputDirectory);
}
}

View File

@ -425,7 +425,7 @@ public class Controller {
for (RankingListHelper rankingListHelper: sendBackUsers) { for (RankingListHelper rankingListHelper: sendBackUsers) {
logger.debug("RankingList Helper " + rankingListHelper.getUsername()); logger.debug("RankingList Helper " + rankingListHelper.getUsername());
logger.debug("User: " + user.getUsername()); logger.debug("User: " + user.getUsername());
if(rankingListHelper.getUsername().equals(user.getUsername())){ if(rankingListHelper.getUsername().equals(user.getEmail())){
userAlreadyInRankingList = true; userAlreadyInRankingList = true;
break; break;
} }
@ -435,7 +435,7 @@ public class Controller {
ResponseEntity singlePlace = getRankingPlace(user.getEmail()); ResponseEntity singlePlace = getRankingPlace(user.getEmail());
if (singlePlace.getStatusCodeValue() == 200) { if (singlePlace.getStatusCodeValue() == 200) {
RankingListHelper rankingListHelper = new RankingListHelper(user.getUsername(), (Integer) user_infoRepository.findUser_InfoByUser(user).getRankingPointsSum(), (Integer) getRankingPlace(user.getEmail()).getBody()); RankingListHelper rankingListHelper = new RankingListHelper(user.getEmail(), (Integer) user_infoRepository.findUser_InfoByUser(user).getRankingPointsSum(), (Integer) getRankingPlace(user.getEmail()).getBody());
logger.debug(String.valueOf((Integer) singlePlace.getBody())); logger.debug(String.valueOf((Integer) singlePlace.getBody()));
sendBackUsers.add(rankingListHelper); sendBackUsers.add(rankingListHelper);
} }
@ -1323,7 +1323,12 @@ public class Controller {
if (isAdmin) { if (isAdmin) {
User deleteUser = userRepository.findByUsername(username); User deleteUser = userRepository.findByEmail(username);
if(deleteUser == null) {
return ResponseEntity.status(400).body("Es wurde kein User mit dieser Email gefunden.");
}
User_Info user_info = user_infoRepository.findUser_InfoByUser(deleteUser); User_Info user_info = user_infoRepository.findUser_InfoByUser(deleteUser);
user_info.setRankingPointsSum(0); user_info.setRankingPointsSum(0);

View File

@ -20,7 +20,7 @@ public interface UserRepository extends CrudRepository<User, Integer> {
// "LIMIT 10;", nativeQuery = true) // "LIMIT 10;", nativeQuery = true)
// List<Object[]> getRankingList(); // List<Object[]> getRankingList();
@Query(value = "SELECT DISTINCT u.id AS ID, username AS Name, ui.ranking_points_sum AS Ranglistenpunkte, email Email\n" + @Query(value = "SELECT DISTINCT u.id AS ID, u.email AS Name, ui.ranking_points_sum AS Ranglistenpunkte, email Email\n" +
"FROM user u,\n" + "FROM user u,\n" +
" user_info ui,\n" + " user_info ui,\n" +
" user_roles ur\n" + " user_roles ur\n" +

1676
swagger.json Normal file

File diff suppressed because it is too large Load Diff