diff --git a/software/backend/server.ts b/software/backend/server.ts
index e012081..bec88e1 100644
--- a/software/backend/server.ts
+++ b/software/backend/server.ts
@@ -20,9 +20,12 @@ app.use(bodyParser.json())
// Create database and tables
startDatabase()
+// Static files
+const path = require('path')
+app.use('/static', express.static(path.join(__dirname, 'images')))
+
// Add delay for more realistic response times
app.use((req, res, next) => {
- console.log(123)
setTimeout(next, Math.floor((Math.random () * 4000) + 100))
})
@@ -33,9 +36,6 @@ app.use("/products", product)
app.use("/orders", order)
app.use("/accounts", account)
-// Static files
-const path = require('path')
-app.use('/static', express.static(path.join(__dirname, 'images')))
// Start server
app.listen(port, () => {
diff --git a/software/src/data/enums/serverStateEnum.ts b/software/src/data/enums/serverStateEnum.ts
new file mode 100644
index 0000000..2e92d38
--- /dev/null
+++ b/software/src/data/enums/serverStateEnum.ts
@@ -0,0 +1,5 @@
+export enum ServerStateEnum {
+ ONLINE,
+ OFFLINE,
+ PENDING
+}
\ No newline at end of file
diff --git a/software/src/locales/de.json b/software/src/locales/de.json
index 33f31f6..98d3e18 100644
--- a/software/src/locales/de.json
+++ b/software/src/locales/de.json
@@ -115,5 +115,12 @@
"exerciseGroup3": "Aufgabengruppe 3: Cross-Site Scripting (XSS)",
"exercise": "Aufgabe {0}"
},
- "serverState": "Server Status"
+ "serverState": "Server Status",
+ "required": "Darf nicht leer bleiben",
+ "noDigitsAllowed": "Zahlen sind nicht erlaubt",
+ "notEnoughChars": "Nicht lang genug",
+ "passwordToShort": "Passwort zu kurz",
+ "onlyDigitsAllowed": "Nur Zahlen erlaubt",
+ "noOrders": "Keine Bestellungen gefunden",
+ "noOrdersText": "Bisher wurden keine Bestellungen von diesem Account getÃĪtigt. Gehe zum Warenkorb und bestelle!"
}
diff --git a/software/src/locales/en.json b/software/src/locales/en.json
index e56d37a..08686f0 100644
--- a/software/src/locales/en.json
+++ b/software/src/locales/en.json
@@ -115,5 +115,12 @@
"exerciseGroup3": "Exercise Group 3: Cross-Site Scripting (XSS)",
"exercise": "Exercise {0}"
},
- "serverState": "Server State:"
+ "serverState": "Server State:",
+ "required": "Is required",
+ "noDigitsAllowed": "Digits are not allowed",
+ "notEnoughChars": "Too short",
+ "passwordToShort": "Password too short",
+ "onlyDigitsAllowed": "Only digits are allowed",
+ "noOrders": "No orders found",
+ "noOrdersText": "There are no orders with this account until now. Go to the basket page and order something!"
}
diff --git a/software/src/pages/loginPage/loginForm.vue b/software/src/pages/loginPage/loginForm.vue
index 1fc2e0f..c5d70fe 100644
--- a/software/src/pages/loginPage/loginForm.vue
+++ b/software/src/pages/loginPage/loginForm.vue
@@ -6,11 +6,14 @@ import { useAccountStore } from '@/data/stores/accountStore';
const accountStore = useAccountStore()
const showRegisterCard = defineModel("showRegisterCard", { type: Boolean, default: false })
+const loginInProgress = ref(false)
const username = ref("duranduran")
const password = ref("H4nn0ver")
-function startLogin() {
- accountStore.login(username.value, password.value)
+async function startLogin() {
+ loginInProgress.value = true
+ await accountStore.login(username.value, password.value)
+ loginInProgress.value = false
}
@@ -33,6 +36,7 @@ function startLogin() {
{{ $t('account.noAccountRegister') }}
@@ -40,6 +44,7 @@ function startLogin() {
{{ $t('menu.login') }}
diff --git a/software/src/pages/loginPage/registerForm.vue b/software/src/pages/loginPage/registerForm.vue
index 1334eed..31ee220 100644
--- a/software/src/pages/loginPage/registerForm.vue
+++ b/software/src/pages/loginPage/registerForm.vue
@@ -4,10 +4,96 @@ import { ref } from 'vue';
import cardView from '@/components/cardView.vue';
import outlinedButton from '@/components/outlinedButton.vue';
import { useAccountStore } from '@/data/stores/accountStore';
+import { i18n } from '@/plugins/i18n';
+import { useFeedbackStore } from '@/data/stores/feedbackStore';
const newUser = ref(new AccountModel())
const showRegisterCard = defineModel("showRegisterCard", { type: Boolean, default: false })
const accountStore = useAccountStore()
+const feedbackStore = useFeedbackStore()
+const registerInProgress = ref(false)
+
+const stringRules = [
+ value => {
+ if (value) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('required')
+ }
+ },
+ value => {
+ if (/[^0-9]/.test(value)) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('noDigitsAllowed')
+ }
+ },
+ value => {
+ if (value?.length >= 4) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('notEnoughChars')
+ }
+ }
+]
+
+const passwordRules = [
+ value => {
+ if (value) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('required')
+ }
+ },
+ value => {
+ if (value?.length >= 8) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('passwordToShort')
+ }
+ }
+]
+
+const postalRules = [
+ value => {
+ if (/[0-9]/.test(value)) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('onlyDigitsAllowed')
+ }
+ },
+ value => {
+ if (value?.length == 5) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('notEnoughChars')
+ }
+ }
+]
+
+const numberRules = [
+ value => {
+ if (value) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('required')
+ }
+ },
+ value => {
+ if (/[0-9]/.test(value)) {
+ return true
+ } else {
+ return feedbackStore.i18n.t('onlyDigitsAllowed')
+ }
+ },
+]
+
+async function registerAccount() {
+ registerInProgress.value = true
+
+ await accountStore.registerAccount(newUser.value)
+ registerInProgress.value = false
+}
@@ -19,6 +105,7 @@ const accountStore = useAccountStore()
prepend-icon="mdi-account"
v-model="newUser.username"
clearable
+ :rules="stringRules"
/>
@@ -29,6 +116,7 @@ const accountStore = useAccountStore()
type="password"
v-model="newUser.password"
clearable
+ :rules="passwordRules"
/>
@@ -40,11 +128,17 @@ const accountStore = useAccountStore()
prepend-icon="mdi-card-account-details"
v-model="newUser.firstName"
clearable
+ :rules="stringRules"
/>
-
+
@@ -55,10 +149,16 @@ const accountStore = useAccountStore()
prepend-icon="mdi-numeric"
v-model="newUser.addresses[0].street"
clearable
+ :rules="stringRules"
/>
-
+
@@ -69,10 +169,16 @@ const accountStore = useAccountStore()
prepend-icon="mdi-city"
v-model="newUser.addresses[0].postalCode"
clearable
+ :rules="postalRules"
/>
-
+
@@ -80,13 +186,15 @@ const accountStore = useAccountStore()
{{ $t('account.backToLogin') }}
{{ $t('account.register') }}
diff --git a/software/src/pages/ordersPage/index.vue b/software/src/pages/ordersPage/index.vue
index 9ad8fd2..ec5d32a 100644
--- a/software/src/pages/ordersPage/index.vue
+++ b/software/src/pages/ordersPage/index.vue
@@ -27,10 +27,23 @@ function formatDateTimeString(string: string) {
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/software/src/pages/preferencesPage/systemSetup.vue b/software/src/pages/preferencesPage/systemSetup.vue
index 461fc71..ef10e0b 100644
--- a/software/src/pages/preferencesPage/systemSetup.vue
+++ b/software/src/pages/preferencesPage/systemSetup.vue
@@ -6,21 +6,22 @@ import outlinedButton from '@/components/outlinedButton.vue';
import { ref } from 'vue';
import confirmDialog from '@/components/confirmDialog.vue';
import { getServerState, resetDatabase } from '@/data/api/mainApi';
+import { ServerStateEnum } from '@/data/enums/serverStateEnum';
const feedbackStore = useFeedbackStore()
const showConfirmDialog = ref(false)
-const serverOnline = ref(false)
+const serverOnline = ref(ServerStateEnum.PENDING)
getServerState()
.then(result => {
if (result.status == 200) {
- serverOnline.value = true
+ serverOnline.value = ServerStateEnum.ONLINE
} else {
- serverOnline.value = false
+ serverOnline.value = ServerStateEnum.OFFLINE
}
})
.catch(error => {
- serverOnline.value = false
+ serverOnline.value = ServerStateEnum.OFFLINE
})
async function resetDb() {
@@ -48,15 +49,20 @@ function resetSettings() {
{{ $t('serverState') }}:
-
+
Online
-
+
Offline
+
+
+
+ Pending...
+
@@ -65,7 +71,7 @@ function resetSettings() {
@click="showConfirmDialog = true"
prepend-icon="mdi-database-refresh"
color="red"
- :disabled="!serverOnline"
+ :disabled="serverOnline != ServerStateEnum.ONLINE"
>
{{ $t('preferences.resetDatabase') }}