sajjad 3 years ago
parent 0a12de97c7
commit 77451af93c

@ -38,6 +38,12 @@ export default class ProgramRepository {
return getJson(response.data.data); return getJson(response.data.data);
} }
} }
async showTrainer(courseId) {
let response = await axios.get(url("showTrainerProgram", { course: courseId }));
if (response.status === 200) {
return getJson(response.data.data);
}
}
async store(data) { async store(data) {
let json = setData(data); let json = setData(data);
let response = await axios.post(url("storeProgram"), json); let response = await axios.post(url("storeProgram"), json);
@ -46,8 +52,8 @@ export default class ProgramRepository {
} }
} }
async update(courseId, data) { async update(courseId, data) {
let json = setData(data, true); let json = setData(data);
let response = await axios.post( let response = await axios.put(
url("updateProgram", { course: courseId }), url("updateProgram", { course: courseId }),
json json
); );
@ -58,6 +64,9 @@ export default class ProgramRepository {
async delete(courseId) { async delete(courseId) {
await axios.delete(url("destroyProgram", { course: courseId })); await axios.delete(url("destroyProgram", { course: courseId }));
} }
async deleteTrainer(courseId) {
await axios.delete(url("destroyTrainerProgram", { course: courseId }));
}
async verify(courseId) { async verify(courseId) {
await axios.post(url("verifyProgram", { course: courseId })); await axios.post(url("verifyProgram", { course: courseId }));
} }

@ -1,6 +1,7 @@
import axios from "axios"; import axios from "axios";
import url from "@/router/url"; import url from "@/router/url";
import { getArray, setQuery } from "../resources/userResource"; import { getArray, setQuery } from "../resources/userResource";
import { getArray as getArrayTrainee } from "../resources/traineeResource";
export default class UserRepository { export default class UserRepository {
async indexUsers(data) { async indexUsers(data) {
@ -14,7 +15,7 @@ export default class UserRepository {
let params = setQuery(data) let params = setQuery(data)
let response = await axios.get(url('indexTrainerTrainee'), { params }) let response = await axios.get(url('indexTrainerTrainee'), { params })
if (response.status === 200) { if (response.status === 200) {
return getArray(response.data) return getArrayTrainee(response.data)
} }
} }
async delete(userId) { async delete(userId) {

@ -23,8 +23,8 @@ export default class WorkoutRepository {
} }
} }
async update(workoutId, data) { async update(workoutId, data) {
let json = setData(data, true); let json = setData(data);
let response = await axios.post( let response = await axios.put(
url("updateWorkout", { workout: workoutId }), url("updateWorkout", { workout: workoutId }),
json json
); );

@ -25,7 +25,7 @@ export default class WorkoutToSeriesRepository {
let json = setData(data); let json = setData(data);
let response = await axios.post(url("joinWorkoutToSeries", { series: seriesId, workout: workoutId }), json); let response = await axios.post(url("joinWorkoutToSeries", { series: seriesId, workout: workoutId }), json);
if (response.status === 201 || response.status === 200) { if (response.status === 201 || response.status === 200) {
return response.data; return getArray(response.data);
} }
} }
async delete(data) { async delete(data) {

@ -20,20 +20,15 @@ export const getJson = (data) => ({
type: data.type, type: data.type,
period: data.period period: data.period
}); });
export const setData = (data, isUpdate = false) => { export const setData = (data) => ({
let formData = {
sport_category_id: data.sport_category_id, sport_category_id: data.sport_category_id,
title: data.title, title: data.title,
description: data.description, description: data.description,
tags: data.tags, tags: data.tags,
batch_id: data.batch_id, batch_id: data.batch_id,
period: data.period period: data.period
};
if (isUpdate) { });
formData["_method"] = "put";
}
return objectToFormData(formData);
};
export const getArray = ({ data, meta }) => { export const getArray = ({ data, meta }) => {
const pagination = SetPagination(meta); const pagination = SetPagination(meta);
data = data.map((program) => getJson(program)); data = data.map((program) => getJson(program));

@ -0,0 +1,21 @@
import { SetPagination } from "@/utils/setQueriesObject";
export const getJson = (data) => ({
id: data.id,
name: data.name,
first_name: data.first_name,
last_name: data.last_name,
profile: data.profile,
birthday: data.birthday,
age: data.age,
arm_diameter: data.arm_diameter,
details: data.details,
height: data.height,
leg_diameter: data.leg_diameter,
weight: data.weight
});
export const getArray = ({ data, meta }) => {
const pagination = SetPagination(meta);
data = data.map((user) => getJson(user));
return { data, pagination };
};

@ -17,8 +17,7 @@ export const getJson = (data) => ({
set: data.set, set: data.set,
per_set: data.per_set, per_set: data.per_set,
}); });
export const setData = (data, isUpdate = false) => { export const setData = (data) => ({
let formData = {
id: data.id, id: data.id,
workout_category_id: data.workout_category_id, workout_category_id: data.workout_category_id,
name: data.name, name: data.name,
@ -34,12 +33,7 @@ export const setData = (data, isUpdate = false) => {
set: data.set, set: data.set,
per_set: data.per_set, per_set: data.per_set,
estimate_time: data.estimate_time, estimate_time: data.estimate_time,
}; });
if (isUpdate) {
formData["_method"] = "put";
}
return objectToFormData(formData);
};
export const getArray = ({ data, meta }) => { export const getArray = ({ data, meta }) => {
data = data.map((workout) => getJson(workout)); data = data.map((workout) => getJson(workout));
if (meta) { if (meta) {

@ -8,7 +8,7 @@
</div> </div>
<v-row class="mt-3"> <v-row class="mt-3">
<v-col cols="12"> <v-col cols="12">
<div class=""> <div>
<div class="text-left description"> <div class="text-left description">
here is dashboard home, feel free navigate from right side menu or choose here is dashboard home, feel free navigate from right side menu or choose
from shortcuts we prepared for you. from shortcuts we prepared for you.
@ -97,7 +97,7 @@
<box text="trainees" link="users" icon=" WMi-users" /> <box text="trainees" link="users" icon=" WMi-users" />
</div> </div>
<div class="mr-5 section"> <div class="mr-5 section">
<box text="profile" link="profile" icon="WMi-user" /> <box text="profile" link="trainerProfile" icon="WMi-user" />
</div> </div>
</div> </div>
</div> </div>
@ -153,7 +153,7 @@
<box text="bookmarks" link="bookmarks" icon="WMi-bookmark" /> <box text="bookmarks" link="bookmarks" icon="WMi-bookmark" />
</div> </div>
<div class="mr-5 section"> <div class="mr-5 section">
<box text="programs" link="trainsPrograms" icon="WMi-align-left" /> <box text="programs" link="traineePrograms" icon="WMi-align-left" />
</div> </div>
<div class="mr-5 section"> <div class="mr-5 section">
<box text="profile" link="profile" icon="WMi-user" /> <box text="profile" link="profile" icon="WMi-user" />

@ -27,6 +27,8 @@
:color="color" :color="color"
v-model="date" v-model="date"
:type="type" :type="type"
:min="min"
:max="max"
@input="menu = false" @input="menu = false"
/> />
</v-menu> </v-menu>
@ -42,6 +44,8 @@ export default {
type: { type: {
default: "date", default: "date",
}, },
min: {},
max: {},
dark: { dark: {
type: Boolean, type: Boolean,
default: false, default: false,

@ -154,8 +154,8 @@ export default {
{ {
id: 3, id: 3,
text: "my programs", text: "my programs",
link: "trainsPrograms", link: "traineePrograms",
active: this.$route.name === "trainsPrograms", active: this.$route.name === "traineePrograms",
}, },
{ {
id: 5, id: 5,

@ -90,7 +90,7 @@
label="description" label="description"
placeholder="description" placeholder="description"
dark dark
v-model="form.description" v-model.trim="form.description"
></v-textarea> ></v-textarea>
</v-col> </v-col>
</v-row> </v-row>

@ -10,7 +10,7 @@
:style="{ backgroundImage: `url('${product.thumbnail}')` }" :style="{ backgroundImage: `url('${product.thumbnail}')` }"
></div> --> ></div> -->
<img <img
class="w-100" class="product__img w-100"
:src=" :src="
product.thumbnail ? product.thumbnail : 'https://via.placeholder.com/1080' product.thumbnail ? product.thumbnail : 'https://via.placeholder.com/1080'
" "
@ -48,9 +48,6 @@ export default {
} }
.product__image .product__img { .product__image .product__img {
border-radius: 20px; border-radius: 20px;
height: 300px;
background-size: cover;
background-position: center;
} }
.product__name { .product__name {
line-height: 16px; line-height: 16px;

@ -77,7 +77,7 @@
class="no-error-msg" class="no-error-msg"
label="Birthday" label="Birthday"
dark dark
:max="new Date()" :max="new Date().toISOString().slice(0, 10)"
v-model="form.birthday" v-model="form.birthday"
/></v-col> /></v-col>
<v-col cols="3"></v-col> <v-col cols="3"></v-col>

@ -90,7 +90,7 @@
class="no-error-msg" class="no-error-msg"
label="Birthday" label="Birthday"
dark dark
:max="new Date()" :max="new Date().toISOString().slice(0, 10)"
v-model="form.birthday" v-model="form.birthday"
/></v-col> /></v-col>
<v-col cols="3"></v-col> <v-col cols="3"></v-col>

@ -62,7 +62,7 @@
<v-row> <v-row>
<v-col cols="12"> <v-col cols="12">
<v-textarea <v-textarea
v-model="form.description" v-model.trim="form.description"
rows="5" rows="5"
label="description" label="description"
placeholder="description" placeholder="description"

@ -10,8 +10,10 @@
}" }"
></div> --> ></div> -->
<img <img
class="w-100" class="wa__program__image w-100"
:src="program.thumbnail ? program.thumbnail : 'https://via.placeholder.com/1280x720'" :src="
program.thumbnail ? program.thumbnail : 'https://via.placeholder.com/1280x720'
"
alt="product image" alt="product image"
/> />
<div class="wa__program__image__button"> <div class="wa__program__image__button">
@ -97,7 +99,7 @@ export default {
methods: { methods: {
...mapActions("programs", ["verifyProgram", "deleteProgram"]), ...mapActions("programs", ["verifyProgram", "deleteProgram"]),
removeProgram(id) { removeProgram(id) {
toast.question("Are sure delete brand?", "Delete Brand", () => { toast.question("Are sure delete program?", "Delete program", () => {
this.deleteProgram(id); this.deleteProgram(id);
}); });
}, },
@ -134,9 +136,6 @@ export default {
display: block; display: block;
transition: 0.5s ease; transition: 0.5s ease;
backface-visibility: hidden; backface-visibility: hidden;
height: 300px;
background-size: cover;
background-position: center;
} }
.wa__program__image__button { .wa__program__image__button {
transition: 0.5s ease; transition: 0.5s ease;

@ -11,7 +11,7 @@
</div> </div>
</div> </div>
</v-col> </v-col>
<v-col cols="3"> <v-col cols="3" v-if="role === 'admin'">
<div class="d-flex align-center justify-center h-100"> <div class="d-flex align-center justify-center h-100">
<div class="user__role"> <div class="user__role">
<small>Role:</small> <small>Role:</small>
@ -38,7 +38,7 @@
<template v-else></template> <template v-else></template>
</div> </div>
</v-col> </v-col>
<v-col cols="3"> <v-col cols="3" v-if="role === 'admin'">
<div class="d-flex align-center h-100 justify-content-end"> <div class="d-flex align-center h-100 justify-content-end">
<RectangleButton <RectangleButton
height="35" height="35"

@ -20,6 +20,7 @@
label="manager image" label="manager image"
:url.sync="form.thumbnail" :url.sync="form.thumbnail"
v-model="fileForm" v-model="fileForm"
:stencilProps="{ aspectRatio: 1280 / 720, checkImageOrigin: false }"
/> />
</div> </div>
</div> </div>
@ -76,7 +77,7 @@
rows="3" rows="3"
label="description" label="description"
placeholder="description" placeholder="description"
v-model="form.description" v-model.trim="form.description"
></v-textarea> ></v-textarea>
</v-col> </v-col>
</v-row> </v-row>

@ -2,11 +2,18 @@
<div class="border-bottom"> <div class="border-bottom">
<v-row> <v-row>
<v-col cols="4" class="pr-0"> <v-col cols="4" class="pr-0">
<div <!-- <div
class="workout__img" class="workout__img"
:style="{ backgroundImage: `url('${workout.thumbnail}')` }" :style="{ backgroundImage: `url('${workout.thumbnail}')` }"
></div ></div -->
></v-col> <img
class="workout__img w-100"
:src="
workout.thumbnail ? workout.thumbnail : 'https://via.placeholder.com/1280x720'
"
alt="product image"
/>
</v-col>
<v-col cols="8"> <v-col cols="8">
<div class="details__card"> <div class="details__card">
<div> <div>
@ -74,9 +81,6 @@ export default {
<style scoped> <style scoped>
.workout__img { .workout__img {
border-radius: 20px; border-radius: 20px;
height: 150px;
background-size: cover;
background-position: center;
} }
.workout__title { .workout__title {
letter-spacing: 4px; letter-spacing: 4px;

@ -102,7 +102,7 @@
class="no-error-msg" class="no-error-msg"
dark dark
row="4" row="4"
v-model="form.description" v-model.trim="form.description"
></v-textarea> ></v-textarea>
</v-col> </v-col>
</v-row> </v-row>
@ -183,8 +183,7 @@ export default {
methods: { methods: {
...mapActions("workoutToSeries", ["loadWorkoutsToSeries", "addWorkoutToSeries"]), ...mapActions("workoutToSeries", ["loadWorkoutsToSeries", "addWorkoutToSeries"]),
...mapMutations("workoutToSeries", ["SET_FILTER_WORKOUTS_TO_SERIES"]), ...mapMutations("workoutToSeries", ["SET_FILTER_WORKOUTS_TO_SERIES"]),
openModal() { openModal() {},
},
async joinWorkout(id) { async joinWorkout(id) {
this.workoutId = id; this.workoutId = id;
let repository = new WorkoutToSeriesRepository(); let repository = new WorkoutToSeriesRepository();

@ -63,7 +63,7 @@ export default [
path: '/edit-program/:id?', path: '/edit-program/:id?',
view: 'AddProgram', view: 'AddProgram',
name: 'editProgram', name: 'editProgram',
meta: { auth: true, roles: ["admin"] } meta: { auth: true, roles: ["admin","trainer"] }
}, },
{ {
path: '/add-workout', path: '/add-workout',
@ -96,7 +96,7 @@ export default [
meta: { auth: true, roles: ["admin"] } meta: { auth: true, roles: ["admin"] }
}, },
{ {
path: '/trains-programs', path: '/trainee-programs',
view: 'TraineePrograms', view: 'TraineePrograms',
name: 'traineePrograms', name: 'traineePrograms',

@ -9,9 +9,11 @@ const urls = {
// programs // programs
indexProgram: "admin/courses", indexProgram: "admin/courses",
showProgram: "admin/courses/:course", showProgram: "admin/courses/:course",
showTrainerProgram: "trainer/courses/:course",
storeProgram: "trainer/courses", storeProgram: "trainer/courses",
verifyProgram: "admin/courses/verify-course/:course", verifyProgram: "admin/courses/verify-course/:course",
destroyProgram: "admin/courses/:course", destroyProgram: "admin/courses/:course",
destroyTrainerProgram: "trainer/courses/:course",
updateProgram: "trainer/courses/:course", updateProgram: "trainer/courses/:course",
// trainer programs // trainer programs
indexMyProgram: "trainer/courses", indexMyProgram: "trainer/courses",

@ -1,5 +1,7 @@
import ProgramRepository from "@/abstraction/repository/programRepository"; import ProgramRepository from "@/abstraction/repository/programRepository";
import { setQuery } from "@/abstraction/resources/programResource"; import { setQuery } from "@/abstraction/resources/programResource";
import { UserStorage } from "@/utils/storage";
let role = UserStorage.getRole() ? UserStorage.getRole() : null;
export default { export default {
async loadPrograms({ state, commit }) { async loadPrograms({ state, commit }) {
try { try {
@ -31,7 +33,12 @@ export default {
}, },
async loadProgram({ commit }, courseId) { async loadProgram({ commit }, courseId) {
let repository = new ProgramRepository(); let repository = new ProgramRepository();
const resource = await repository.show(courseId); let resource;
if (role === 'admin') {
resource = await repository.show(courseId);
} else {
resource = await repository.showTrainer(courseId);
}
commit("SET_PROGRAM", resource); commit("SET_PROGRAM", resource);
}, },
async addProgram({ commit }, data) { async addProgram({ commit }, data) {
@ -46,7 +53,11 @@ export default {
}, },
async deleteProgram({ commit }, courseId) { async deleteProgram({ commit }, courseId) {
let repository = new ProgramRepository(); let repository = new ProgramRepository();
if (role === 'admin') {
await repository.delete(courseId); await repository.delete(courseId);
} else {
await repository.deleteTrainer(courseId);
}
commit('DELETE_PROGRAM', courseId); commit('DELETE_PROGRAM', courseId);
}, },
async verifyProgram({ commit }, courseId) { async verifyProgram({ commit }, courseId) {

@ -23,10 +23,8 @@ export default {
async addWorkoutToSeries({ commit }, data) { async addWorkoutToSeries({ commit }, data) {
let repository = new WorkoutToSeriesRepository(); let repository = new WorkoutToSeriesRepository();
const resource = await repository.store(data.data, data.seriesId, data.workoutId); const resource = await repository.store(data.data, data.seriesId, data.workoutId);
if (resource) { commit("SET_PROGRAM_SERIES_WORKOUTS", resource.data);
commit("ADD_WORKOUT_TO_SERIES", resource.data);
return resource.data
}
}, },
async deleteWorkoutFromSeries({ commit }, data) { async deleteWorkoutFromSeries({ commit }, data) {
let repository = new WorkoutToSeriesRepository(); let repository = new WorkoutToSeriesRepository();

@ -12,9 +12,6 @@ export default {
SET_FILTER_WORKOUTS_TO_SERIES(state, payload) { SET_FILTER_WORKOUTS_TO_SERIES(state, payload) {
Vue.set(state, "filters", payload); Vue.set(state, "filters", payload);
}, },
ADD_WORKOUT_TO_SERIES(state, payload) {
state.workouts.push(payload);
},
DELETE_WORKOUT_FROM_SERIES(state, workoutId) { DELETE_WORKOUT_FROM_SERIES(state, workoutId) {
const index = state.workouts.findIndex((x) => x.id === workoutId); const index = state.workouts.findIndex((x) => x.id === workoutId);
Vue.delete(state.workouts, index) Vue.delete(state.workouts, index)

Loading…
Cancel
Save