From 97883d0f07490969456dce0a9fea1d4c2edd3273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Sun, 25 May 2025 21:04:54 +0200 Subject: [PATCH] added player model and service --- app/src/services/BackendService.ts | 4 ++-- app/src/services/PlayerService.ts | 25 ++++++++++++++++++++++ app/src/store/auth.ts | 33 +++++++++++++++--------------- app/src/store/player.ts | 33 ++++++++++++++++++++++++++++++ app/src/types/Player.ts | 13 ++++++++++++ app/src/views/LoginView.vue | 18 ++++++++-------- 6 files changed, 97 insertions(+), 29 deletions(-) create mode 100644 app/src/services/PlayerService.ts create mode 100644 app/src/store/player.ts create mode 100644 app/src/types/Player.ts diff --git a/app/src/services/BackendService.ts b/app/src/services/BackendService.ts index 5d07dcd..aa787d5 100644 --- a/app/src/services/BackendService.ts +++ b/app/src/services/BackendService.ts @@ -5,8 +5,8 @@ class BackendService { return localStorage.getItem("server") !== null; } getServer(): Server { - // return JSON.parse(localStorage.getItem("server") || '{"protocol":"http","host":"localhost","port":8080}'); - return JSON.parse(localStorage.getItem("server") || '{"protocol":"https","host":"bullpen-api.palaeomatiker.home64.de","port":443}'); + return JSON.parse(localStorage.getItem("server") || '{"protocol":"http","host":"localhost","port":8080}'); + // return JSON.parse(localStorage.getItem("server") || '{"protocol":"https","host":"bullpen-api.palaeomatiker.home64.de","port":443}'); } updateServer(server: Server): void { localStorage.setItem("server", JSON.stringify(server)); diff --git a/app/src/services/PlayerService.ts b/app/src/services/PlayerService.ts new file mode 100644 index 0000000..c68e3c4 --- /dev/null +++ b/app/src/services/PlayerService.ts @@ -0,0 +1,25 @@ +import Player from "@/types/Player"; +import { ApiService } from './ApiService'; +import api from "@/services/Api"; +import authHeader from "@/services/AuthHeader"; +import {AxiosError, AxiosResponse} from "axios"; + +class PlayerService extends ApiService { + constructor() { + super('players'); + } + + public fetchByUserId(userId: number): Promise { + return api + .get(`/${this.name}/user/${userId}`, { headers: authHeader() }) + .then((response: AxiosResponse) => { + return response.data; + }, (error: AxiosError) => { + this.handleExpiredToken(error); + return Promise.reject(error); + }); + } + +} + +export default new PlayerService(); diff --git a/app/src/store/auth.ts b/app/src/store/auth.ts index d3ade7d..15d3432 100644 --- a/app/src/store/auth.ts +++ b/app/src/store/auth.ts @@ -1,8 +1,8 @@ import AuthService from '@/services/AuthService' import User from "@/types/User"; -import { Module, ActionContext } from 'vuex'; -import { RootState } from './index'; +import {ActionContext, Module} from 'vuex'; +import {RootState} from './index'; import TokenService from "@/services/TokenService"; import UserService from "@/services/UserService"; @@ -14,8 +14,8 @@ export interface AuthState { const user = JSON.parse(localStorage.getItem('auth') || '""'); const initialState = user - ? { isAuthenticated: true, user } - : { isAuthenticated: false, user: null }; + ? {isAuthenticated: true, user} + : {isAuthenticated: false, user: null}; type AuthActionContext = ActionContext; @@ -24,34 +24,33 @@ const auth: Module = { namespaced: true, state: initialState, actions: { - login({ commit }: AuthActionContext, user) { - return AuthService.login(user.email, user.password).then( - auth => { - return UserService.fetchById(auth.id).then( - (user: User) => { + login({commit}: AuthActionContext, user) { + return AuthService + .login(user.email, user.password) + .then(auth => { + return UserService + .fetchById(auth.id) + .then((user: User) => { commit('loginSuccess', user); return Promise.resolve(user); - }, - error => { + }, error => { commit('loginFailure'); return Promise.reject(error); } ); - - }, - error => { + }, error => { commit('loginFailure'); return Promise.reject(error); } ); }, - logout({ commit }: AuthActionContext) { + logout({commit}: AuthActionContext) { return AuthService.logout().then(() => { commit('logout'); return Promise.resolve(); }) }, - register({ commit }: AuthActionContext, user) { + register({commit}: AuthActionContext, user) { return AuthService.register(user.email, user.password).then( response => { commit('registerSuccess'); @@ -63,7 +62,7 @@ const auth: Module = { } ); }, - refreshToken({ commit }: AuthActionContext, accessToken) { + refreshToken({commit}: AuthActionContext, accessToken) { commit('refreshToken', accessToken); } }, diff --git a/app/src/store/player.ts b/app/src/store/player.ts new file mode 100644 index 0000000..326d917 --- /dev/null +++ b/app/src/store/player.ts @@ -0,0 +1,33 @@ +import playerService from '@/services/PlayerService' +import Player from "@/types/Player"; +import UserInfo from "@/types/UserInfo"; + +import {ActionContext, Module} from 'vuex'; +import { RootState } from './index'; + +export interface PlayerState { + player: Player | null; +} + +type PlayerActionContext = ActionContext; + +const pitchTypes: Module = { + namespaced: true, + state: {player: null}, + actions: { + determinePlayer({commit}: PlayerActionContext, user: UserInfo) { + if (user.roles.includes('ROLE_PLAYER')) { + playerService.fetchByUserId(user.id).then(player => { + commit('initialize', player); + }); + } + } + }, + mutations: { + initialize(state, player: Player) { + state.player = player; + } + } +}; + +export default pitchTypes; diff --git a/app/src/types/Player.ts b/app/src/types/Player.ts new file mode 100644 index 0000000..601a5c0 --- /dev/null +++ b/app/src/types/Player.ts @@ -0,0 +1,13 @@ +export default interface Player { + id: number, + gender: string, + bats: string, + throws: string, + jerseyNumber: number, + weight: number, + height: number, + state: string, + createdAt: Date, + updatedAt: Date, + userId: number +} diff --git a/app/src/views/LoginView.vue b/app/src/views/LoginView.vue index a528e75..c4fba39 100644 --- a/app/src/views/LoginView.vue +++ b/app/src/views/LoginView.vue @@ -53,16 +53,13 @@ const submit = handleSubmit((values, { resetForm }) => { store.dispatch('auth/login', { email: values.email, password: values.password, - }).then( - () => { - resetForm(); - onLogin(); - }, - error => { - loading.value = false; - console.log(error); - } - ); + }).then(() => { + resetForm(); + onLogin(); + }, error => { + loading.value = false; + console.log(error); + }); }, ({errors}) => { console.log(errors); loading.value = false; @@ -71,6 +68,7 @@ const submit = handleSubmit((values, { resetForm }) => { const onLogin = () => { console.log('check if pitch types are available.'); + PitchTypeService.fetchAll().then((pitchTypes: PitchType[]) => { store.commit('pitchTypes/initialize', pitchTypes); router.push({path: '/home'});