diff --git a/postgres/numeric.go b/postgres/numeric.go index b4e5631..f750a7b 100644 --- a/postgres/numeric.go +++ b/postgres/numeric.go @@ -94,7 +94,7 @@ func (n Numeric) Add(other Numeric) Numeric { func (n Numeric) MarshalJSON() ([]byte, error) { if n.Int.Int64() == 0 { - return []byte("\"0\""), nil + return []byte("0"), nil } s := fmt.Sprintf("%d", n.Int) diff --git a/web/src/pages/Login.vue b/web/src/pages/Login.vue index 000c7a9..0c7ca26 100644 --- a/web/src/pages/Login.vue +++ b/web/src/pages/Login.vue @@ -5,6 +5,7 @@ import { useSessionStore } from "../stores/session"; const error = ref(""); const login = ref({ user: "", password: "" }); +const router = useRouter(); // has to be called in setup onMounted(() => { useSessionStore().setTitle("Login"); @@ -15,7 +16,8 @@ function formSubmit(e: MouseEvent) { useSessionStore().login(login.value) .then(x => { error.value = ""; - useRouter().replace("/dashboard"); + router.replace("/dashboard"); + return x; }) .catch(x => error.value = "The entered credentials are invalid!"); @@ -26,23 +28,17 @@ function formSubmit(e: MouseEvent) { \ No newline at end of file diff --git a/web/src/pages/Register.vue b/web/src/pages/Register.vue index 42dc48c..42ff644 100644 --- a/web/src/pages/Register.vue +++ b/web/src/pages/Register.vue @@ -1,16 +1,25 @@ +
+ + + +
+
{{ error }}
+ +

+ Existing user? + Login instead! +

+ \ No newline at end of file diff --git a/web/src/stores/session.ts b/web/src/stores/session.ts index 0af99cd..49a2807 100644 --- a/web/src/stores/session.ts +++ b/web/src/stores/session.ts @@ -20,12 +20,12 @@ export interface Budget { export const useSessionStore = defineStore('session', { state: () => ({ - Session: useStorage('session', null, undefined, { serializer: StorageSerializers.object }), + Session: useStorage('session', null, undefined, { serializer: StorageSerializers.object }), Budgets: useStorage>('budgets', new Map(), undefined, { serializer: StorageSerializers.map }), }), getters: { BudgetsList: (state) => [ ...state.Budgets.values() ], - AuthHeaders: (state) => ({'Authorization': 'Bearer ' + state.Session.Token}), + AuthHeaders: (state) => ({'Authorization': 'Bearer ' + state.Session?.Token}), LoggedIn: (state) => state.Session != null, }, actions: { @@ -42,15 +42,18 @@ export const useSessionStore = defineStore('session', { async login(login: any) { const response = await POST("/user/login", JSON.stringify(login)); const result = await response.json(); - return this.loginSuccess(result); + this.loginSuccess(result); + return result; }, async register(login : any) { const response = await POST("/user/register", JSON.stringify(login)); const result = await response.json(); - return this.loginSuccess(result); + this.loginSuccess(result); + return result; }, logout() { - this.$reset() + this.Session = null; + this.Budgets.clear(); }, } }) \ No newline at end of file