diff --git a/app/src/App.vue b/app/src/App.vue index 4efcc13..d55f1c9 100644 --- a/app/src/App.vue +++ b/app/src/App.vue @@ -1,11 +1,31 @@ + + + + + + + + + Menu Content + + + + + + + + {{ user.firstName }} {{ user.lastName }} + + + + + Profile + + + + + + Logout + + + + + + diff --git a/app/src/store/pitchType.ts b/app/src/store/pitchType.ts index be9913c..659b2e8 100644 --- a/app/src/store/pitchType.ts +++ b/app/src/store/pitchType.ts @@ -1,4 +1,4 @@ -import pitchTypeService from '@/services/PitchTypeService' +import PitchTypeService from '@/services/PitchTypeService' import PitchType from "@/types/PitchType"; import { Module } from 'vuex'; @@ -11,9 +11,18 @@ export interface PitchTypeState { const pitchTypes: Module = { namespaced: true, state: {pitchTypes: []}, + actions: { + fetch({commit}: any) { + PitchTypeService.fetchAll().then((pitchTypes: PitchType[]) => { + commit('initialize', pitchTypes); + }, (error) => { + console.log(error); + }); + } + }, mutations: { initialize(state, pitchTypeList: PitchType[]) { - pitchTypeService.updateLocalPitchTypes(pitchTypeList); + // pitchTypeService.updateLocalPitchTypes(pitchTypeList); state.pitchTypes = pitchTypeList; } } diff --git a/app/src/views/BullpenListView.vue b/app/src/views/BullpenListView.vue index 079ea74..d89ec26 100644 --- a/app/src/views/BullpenListView.vue +++ b/app/src/views/BullpenListView.vue @@ -25,7 +25,7 @@ import { import PitchType from "@/types/PitchType"; import {useStore} from 'vuex'; import {useRouter} from 'vue-router'; -import {computed} from "vue"; +import {computed, onMounted} from "vue"; import dayjs from 'dayjs'; const router = useRouter(); @@ -36,10 +36,15 @@ const pitcher = computed(() => store.state.auth.user); const bullpens = computed(() => store.state.bullpen.bullpens); const pitchTypes = computed(() => store.state.pitchTypes.pitchTypes); +onMounted(() => { + store.dispatch('pitchTypes/fetch'); +}); + const formatDate = (date: Date) => { return dayjs(date).format('YYYY.MM.DD HH:mm'); } + const determinePitchTypeName = (id: number): string => { const pitchType = pitchTypes.value.find((pitchType: PitchType) => pitchType.id === id); @@ -87,4 +92,4 @@ const gotoHome = () => { \ No newline at end of file + diff --git a/app/src/views/HomeView.vue b/app/src/views/HomeView.vue index f116b78..880970e 100644 --- a/app/src/views/HomeView.vue +++ b/app/src/views/HomeView.vue @@ -1,13 +1,25 @@ - + - Home of {{ user.firstName }} {{ user.lastName }} - Home - - - - - - - - - - - - - + + + + Bullpens + + - - - - - - - - - - {{ user.firstName }} {{ user.lastName }} - + + + + + + + + + + + - - - - Start Bullpen Session - - - - Show Bullpen Stats - - - - Show Profile - - - - Logout - - - - Add Player - - + + + + + + + + + + + + + + + + + + + @@ -137,8 +125,6 @@ const addPlayer = () => { .user-avatar { width: 120px; height: 120px; - border-radius: 50%; - border: 4px solid #ccc; overflow: hidden; display: flex; justify-content: center; diff --git a/app/src/views/LoginView.vue b/app/src/views/LoginView.vue index 99f73ff..09ac706 100644 --- a/app/src/views/LoginView.vue +++ b/app/src/views/LoginView.vue @@ -1,5 +1,5 @@ - Home of {{ pitcher.firstName }} {{ pitcher.lastName }} - Home + + + + Profile - + @@ -71,10 +70,6 @@ const gotoHome = () => { {{ pitcher.firstName }} {{ pitcher.lastName }} - - - Home - @@ -118,4 +113,4 @@ const gotoHome = () => { font-weight: bold; color: #333; } - \ No newline at end of file + diff --git a/backend/helper/seeder.helper.js b/backend/helper/seeder.helper.js index 2b98080..57c904b 100644 --- a/backend/helper/seeder.helper.js +++ b/backend/helper/seeder.helper.js @@ -75,7 +75,9 @@ const createPlayer = async (queryInterface, roles, players) => { }; })); + const createdPlayers = await queryInterface.select(null, 'Players'); + return createdPlayers; } module.exports = { diff --git a/backend/package.json b/backend/package.json index ba3632e..b0d3adb 100644 --- a/backend/package.json +++ b/backend/package.json @@ -3,7 +3,7 @@ "version": "1.1.1", "main": "server.js", "scripts": { - "prebuild": "node -p \"'export const BULLPEN_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > config/version.js", + "prebuild": "node -p \"'const BULLPEN_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\"\n\nmodule.exports = BULLPEN_VERSION; > config/version.js", "test": "cross-env NODE_ENV=test jest", "pretest": "cross-env NODE_ENV=test npm run db:reset", "db:create:test": "cross-env NODE_ENV=test npx sequelize-cli db:create", diff --git a/backend/seeders/05-bullpens.js b/backend/seeders/05-bullpens.js new file mode 100644 index 0000000..b6ebf91 --- /dev/null +++ b/backend/seeders/05-bullpens.js @@ -0,0 +1,83 @@ +const process = require('process'); +const {createPlayer, createUsers} = require("../helper/seeder.helper"); + +const createBullpen = async (queryInterface, demoPlayer) => { + const startDate = new Date(); + const endDate = new Date(new Date().setTime(startDate.getTime() + 10 * 60000)); + const bullpens = [...Array(20).keys()].map(key => { + return { + pitcherId: demoPlayer.user.id, + startedAt: new Date(new Date().setDate(startDate.getDate()-5)), + finishedAt: new Date(new Date().setDate(startDate.getDate()-5)), + createdAt: new Date(), + updatedAt: new Date() + } + }) + await queryInterface.bulkInsert('BullpenSessions', bullpens); + + const pitchTypeIds = await queryInterface + .select(null, 'PitchTypes') + .map(pitchType => pitchType.id); + + // red: 21-28 + // orange: 11-18: + // green: 1-9 + const bullpenChart = [ + [21,22,23,24,25,26,27,28], + [11,12,13,14,15,16,17,18], + [1,2,3,4,5,6,7,8,9] + ] + + const dbBullpens = await queryInterface.select(null, 'BullpenSessions', { + where: { + pitcherId: demoPlayer.user.id + } + }); + + [...Array(20).keys()].map(key => { + return { + pitchTypeId: pitchTypeIds[Math.floor(Math.random() * pitchTypeIds.length)], + pitchTime: new Date(2025, 3, 22, 16, 7, 21), + aimedArea: 11, + hitArea: 12 + } + + }); +} + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up (queryInterface, /*Sequelize*/) { + if (process.env.NODE_ENV !== 'development') return; + + const roles = await queryInterface.select(null, 'Roles'); + const players = [{ + email: 'demo@bullpen.com', + password: 'demo$123', + firstName: 'Demo', + lastName: 'Player', + dateOfBirth: new Date(1975, 6, 19), + jerseyNumber: 33, + height: 187, + weight: 85, + gender: 'male', + bats: 'right', + throws: 'right', + state: 'active' + }]; + + const dbPlayers = await createPlayer(queryInterface, roles, players); + const demoPlayer = dbPlayers + .filter(player => player.user.auth.email === 'demo@bullpen.com').shift(); + + for (let i = 0; i < 10; ++i) { + createBullpen(queryInterface, demoPlayer); + } + }, + + async down (queryInterface, /*Sequelize*/) { + if (process.env.NODE_ENV !== 'development') return; + + return; + } +};