Session list: Refactor code

pull/4017/head
Julio 4 years ago
parent 4648ba29d2
commit b279719f5b
  1. 52
      assets/vue/components/session/SessionCard.vue
  2. 36
      assets/vue/graphql/queries/SessionRelUser.js
  3. 21
      assets/vue/views/user/sessions/List.vue
  4. 19
      src/CoreBundle/Entity/Course.php
  5. 2
      src/CoreBundle/Entity/Session.php
  6. 4
      src/CoreBundle/Entity/SessionRelCourse.php
  7. 6
      src/CoreBundle/Entity/SessionRelCourseRelUser.php
  8. 11
      src/CoreBundle/Entity/SessionRelUser.php

@ -2,18 +2,19 @@
<div class="text-h6 mt-4">{{ session.name }}</div>
<div class="grid gap-4 grid-cols-1 md:grid-cols-2 lg:grid-cols-4">
<div
v-for="edge in session.sessionRelCourseRelUsers.edges"
:key="edge.node.course.id"
v-for="course in courses"
no-body
style="max-width: 540px;"
>
{{ node }}
<CourseCard
:course="edge.node.course"
:course="course.node.course"
:session-id="session._id"
/>
</div>
</div>
</template>
//:key="node.course.id"
<style scoped>
.my-card {
width: 100%;
@ -23,6 +24,11 @@
<script>
import CourseCard from '../course/CourseCard.vue';
import {computed, ref} from "vue";
import isEmpty from 'lodash/isEmpty';
import {useQuery, useResult} from "@vue/apollo-composable";
import {GET_SESSION_REL_USER} from "../../graphql/queries/SessionRelUser";
import {useStore} from 'vuex';
export default {
name: 'SessionCard',
@ -31,6 +37,46 @@ export default {
},
props: {
session: Object,
},
setup(props) {
const store = useStore();
console.log('card lis');
console.log(props.session.users);
const session = props.session;
const courses = ref([]);
let showAllCourses = false;
console.log('session: ' + session._id);
if (!isEmpty(session.users.edges)) {
console.log('check relation')
session.users.edges.forEach(({node}) => {
// User is Session::SESSION_ADMIN
if (4 === node.relationType) {
showAllCourses = true;
return;
}
});
}
if (showAllCourses) {
courses.value = session.courses.edges;
console.log('all');
console.log(courses.value);
} else {
courses.value = session.sessionRelCourseRelUsers.edges;
console.log('single');
console.log(
courses.value );
}
return {
courses
};
},
};
</script>

@ -10,7 +10,41 @@ export const GET_SESSION_REL_USER = gql`
edges {
node {
session {
...sessionFields
_id
name
displayStartDate
displayEndDate
users(user: $user) {
edges {
node {
user {
id
}
relationType
}
}
}
courses {
edges {
node {
course {
_id
title
}
}
}
}
sessionRelCourseRelUsers {
edges {
node {
course {
_id
title
illustrationUrl
}
}
}
}
}
}
}

@ -28,7 +28,7 @@
<script>
import SessionCardList from '../../../components/session/SessionCardList.vue';
import {computed} from "vue";
import {computed, ref} from "vue";
import {useStore} from 'vuex';
import {useQuery, useResult} from '@vue/apollo-composable'
import {GET_SESSION_REL_USER} from "../../../graphql/queries/SessionRelUser.js";
@ -47,19 +47,20 @@ export default {
const {result, loading} = useQuery(GET_SESSION_REL_USER, {
user: "/api/users/" + userId
}, );
const sessions = useResult(result, [], ({sessionRelCourseRelUsers, sessionRelUsers}) => {
const sessionInSessionRelUser = sessionRelUsers.edges.map(({node}) => node.session);
});
const scu = sessionRelCourseRelUsers.edges.map(({node}) => {
const sessionExists = sessionInSessionRelUser.findIndex(suSession => suSession._id === node.session._id) >= 0;
const sessions = useResult(result, [], ({sessionRelCourseRelUsers, sessionRelUsers})=> {
let sessionList = [];
const sessionInSessionRelUser = sessionRelUsers.edges.map(({node}) => {
const sessionExists = sessionList.findIndex(suSession => suSession._id === node.session._id) >= 0;
if (!sessionExists) {
sessionList.push(node.session);
}
return sessionExists ? null : node.session;
})
.filter(scuSession => scuSession !== null);
});
return [].concat(sessionInSessionRelUser).concat(scu);
return sessionList;
});
return {

@ -74,7 +74,14 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
#[Groups(['course:read', 'course_rel_user:read', 'session_rel_course_rel_user:read', 'session_rel_user:read'])]
#[Groups([
'course:read',
'course_rel_user:read',
'session:read',
'session_rel_course_rel_user:read',
'session_rel_user:read',
'session_rel_course:read',
])]
protected ?int $id = null;
/**
@ -82,7 +89,15 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
*
* @ORM\Column(name="title", type="string", length=250, nullable=true, unique=false)
*/
#[Groups(['course:read', 'course:write', 'course_rel_user:read', 'session_rel_course_rel_user:read', 'session_rel_user:read'])]
#[Groups([
'course:read',
'course:write',
'course_rel_user:read',
'session:read',
'session_rel_course_rel_user:read',
'session_rel_user:read',
'session_rel_course:read',
])]
#[Assert\NotBlank(message: 'A Course requires a title')]
protected ?string $title = null;

@ -89,6 +89,7 @@ class Session implements ResourceWithAccessUrlInterface
* @ORM\OrderBy({"position"="ASC"})
* @ORM\OneToMany(targetEntity="SessionRelCourse", mappedBy="session", cascade={"persist"}, orphanRemoval=true)
*/
#[Groups(['session:read', 'session_rel_user:read'])]
protected Collection $courses;
/**
@ -96,6 +97,7 @@ class Session implements ResourceWithAccessUrlInterface
*
* @ORM\OneToMany(targetEntity="SessionRelUser", mappedBy="session", cascade={"persist"}, orphanRemoval=true)
*/
#[Groups(['session:read', 'session_rel_user:read'])]
protected Collection $users;
/**

@ -66,17 +66,17 @@ class SessionRelCourse
protected ?int $id = null;
/**
* @Groups({"session_rel_course:read", "session_rel_course:write"})
* @ORM\ManyToOne(targetEntity="Session", inversedBy="courses", cascade={"persist"})
* @ORM\JoinColumn(name="session_id", referencedColumnName="id", nullable=false)
*/
#[Groups(['session_rel_course:read', 'session_rel_course:write'])]
protected ?Session $session = null;
/**
* @Groups({"session_rel_course:read", "session_rel_course:write"})
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course", inversedBy="sessions", cascade={"persist"})
* @ORM\JoinColumn(name="c_id", referencedColumnName="id", nullable=false)
*/
#[Groups(['session_rel_course:read', 'session_rel_course:write'])]
protected ?Course $course = null;
/**

@ -68,24 +68,24 @@ class SessionRelCourseRelUser
protected ?int $id = null;
/**
* @Groups({"session:read", "session_rel_course_rel_user:read"})
* @ORM\ManyToOne(targetEntity="User", inversedBy="sessionRelCourseRelUsers", cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*/
#[Groups(['session:read', 'session_rel_course_rel_user:read'])]
protected User $user;
/**
* @Groups({"session_rel_course_rel_user:read"})
* @ORM\ManyToOne(targetEntity="Session", inversedBy="sessionRelCourseRelUsers", cascade={"persist"})
* @ORM\JoinColumn(name="session_id", referencedColumnName="id", nullable=false)
*/
#[Groups(['session_rel_course_rel_user:read'])]
protected Session $session;
/**
* @Groups({"session:read", "session_rel_course_rel_user:read", "session_rel_user:read"})
* @ORM\ManyToOne(targetEntity="Course", inversedBy="sessionRelCourseRelUsers", cascade={"persist"})
* @ORM\JoinColumn(name="c_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
#[Groups(['session:read', 'session_rel_course_rel_user:read', 'session_rel_user:read'])]
#[MaxDepth(1)]
protected Course $course;

@ -84,24 +84,23 @@ class SessionRelUser
protected ?int $id = null;
/**
* @Groups({"session_rel_user:read"})
*
* @ORM\ManyToOne(targetEntity="Session", inversedBy="users", cascade={"persist"})
* @ORM\JoinColumn(name="session_id", referencedColumnName="id")
*/
#[Groups(['session_rel_user:read'])]
protected Session $session;
/**
* @Groups({"session_rel_user:read"})
*
* @ORM\ManyToOne(targetEntity="User", inversedBy="sessionsRelUser", cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
#[Groups(['session_rel_user:read'])]
protected User $user;
/**
* @ORM\Column(name="relation_type", type="integer")
*/
#[Groups(['session_rel_user:read'])]
protected int $relationType;
/**
@ -129,9 +128,7 @@ class SessionRelUser
*/
protected DateTime $registeredAt;
/**
* @Groups({"session_rel_user:read"})
*/
#[Groups(['session_rel_user:read'])]
protected Collection $courses;
public function __construct()

Loading…
Cancel
Save