Skip to content
Snippets Groups Projects
Commit 51e57a03 authored by Tobias Gross-Vogt's avatar Tobias Gross-Vogt
Browse files

reintroduced get courses by person

parent f9956f5c
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,11 @@ interface CourseProviderInterface
*/
public function getCoursesByOrganization(string $orgUnitId, array $options = []): array;
/**
* @return Course[]
*/
public function getCoursesByPerson(string $personId, array $options = []): array;
/**
* @return CourseAttendee[]
*/
......
......@@ -9,7 +9,7 @@ use Dbp\Relay\CourseBundle\API\CourseProviderInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class GetStudentsByCourse extends AbstractController
class GetAttendeesByCourse extends AbstractController
{
public const ITEMS_PER_PAGE = 250;
......@@ -28,9 +28,8 @@ class GetStudentsByCourse extends AbstractController
$perPage = (int) $request->query->get('perPage', self::ITEMS_PER_PAGE);
$options = [];
if ($request->query->has('lang')) {
$options['lang'] = (string) $request->query->get('lang');
}
$lang = $request->query->get('lang', 'de');
$options['lang'] = $lang;
$courses = $this->coursesProvider->getAttendeesByCourse($identifier, $options);
......
......@@ -21,15 +21,23 @@ class GetCoursesByOrganization extends AbstractController
$this->coursesProvider = $coursesProvider;
}
public function __invoke(string $id, Request $request): PaginatorInterface
public function __invoke(string $identifier, Request $request): PaginatorInterface
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$page = (int) $request->query->get('page', 1);
$perPage = (int) $request->query->get('perPage', self::ITEMS_PER_PAGE);
$options = ['lang' => $request->query->get('lang', 'de')];
$courses = $this->coursesProvider->getCoursesByOrganization($id, $options);
$options = [];
$lang = $request->query->get('lang', 'de');
$options['lang'] = $lang;
$term = $request->query->get('term');
if ($term !== null) {
$options['term'] = $term;
}
$courses = $this->coursesProvider->getCoursesByOrganization($identifier, $options);
return new ArrayFullPaginator($courses, $page, $perPage);
}
......
<?php
declare(strict_types=1);
namespace Dbp\Relay\CourseBundle\Controller;
use ApiPlatform\Core\DataProvider\PaginatorInterface;
use Dbp\Relay\CoreBundle\Helpers\ArrayFullPaginator;
use Dbp\Relay\CourseBundle\API\CourseProviderInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class GetCoursesByPerson extends AbstractController
{
public const ITEMS_PER_PAGE = 250;
protected $coursesProvider;
public function __construct(CourseProviderInterface $coursesProvider)
{
$this->coursesProvider = $coursesProvider;
}
public function __invoke(string $identifier, Request $request): PaginatorInterface
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$page = (int) $request->query->get('page', 1);
$perPage = (int) $request->query->get('perPage', self::ITEMS_PER_PAGE);
$options = [];
$lang = $request->query->get('lang', 'de');
$options['lang'] = $lang;
$term = $request->query->get('term');
if ($term !== null) {
$options['term'] = $term;
}
$courses = $this->coursesProvider->getCoursesByPerson($identifier, $options);
return new ArrayFullPaginator($courses, $page, $perPage);
}
}
......@@ -32,6 +32,11 @@ final class CourseCollectionDataProvider extends AbstractController implements C
$filters = $context['filters'] ?? [];
$options = ['lang' => $filters['lang'] ?? 'de'];
$term = $filters['term'] ?? null;
if ($term !== null) {
$options['term'] = $term;
}
$page = 1;
if (isset($filters['page'])) {
$page = (int) $filters['page'];
......
......@@ -6,6 +6,7 @@ namespace Dbp\Relay\CourseBundle\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Dbp\Relay\CourseBundle\Controller\GetCoursesByOrganization;
use Dbp\Relay\CourseBundle\Controller\GetCoursesByPerson;
use Symfony\Component\Serializer\Annotation\Groups;
/**
......@@ -15,13 +16,14 @@ use Symfony\Component\Serializer\Annotation\Groups;
* "openapi_context" = {
* "tags" = {"Courses"},
* "parameters" = {
* {"name" = "lang", "in" = "query", "description" = "Language of result", "type" = "string", "enum" = {"de", "en"}, "example" = "de"}
* {"name" = "lang", "in" = "query", "description" = "Language of result", "type" = "string", "enum" = {"de", "en"}, "example" = "de"},
* {"name" = "term", "in" = "query", "description" = "Teaching term", "type" = "string", "enum" = {"W", "S"}, "example" = "W"},
* }
* }
* },
* "get_byorganization" = {
* "get_by_organization" = {
* "method" = "GET",
* "path" = "/base/organizations/{id}/courses",
* "path" = "/base/organizations/{identifier}/courses",
* "controller" = GetCoursesByOrganization::class,
* "read" = false,
* "openapi_context" = {
......@@ -29,7 +31,23 @@ use Symfony\Component\Serializer\Annotation\Groups;
* "summary" = "Get the Courses related to an organization.",
* "parameters" = {
* {"name" = "lang", "in" = "query", "description" = "Language of result", "type" = "string", "enum" = {"de", "en"}, "example" = "de"},
* {"name" = "id", "in" = "path", "description" = "Id of Organization", "required" = true, "type" = "string", "example" = "123456"}
* {"name" = "identifier", "in" = "path", "description" = "Id of Organization", "required" = true, "type" = "string", "example" = "123456"},
* {"name" = "term", "in" = "query", "description" = "Teaching term", "type" = "string", "enum" = {"W", "S"}, "example" = "W"},
* }
* },
* },
* "get_by_person" = {
* "method" = "GET",
* "path" = "/base/people/{identifier}/courses",
* "controller" = GetCoursesByPerson::class,
* "read" = false,
* "openapi_context" = {
* "tags" = {"Courses"},
* "summary" = "Get the Courses related to a person.",
* "parameters" = {
* {"name" = "lang", "in" = "query", "description" = "Language of result", "type" = "string", "enum" = {"de", "en"}, "example" = "de"},
* {"name" = "identifier", "in" = "path", "description" = "Id of person", "required" = true, "type" = "string", "example" = "woody007"},
* {"name" = "term", "in" = "query", "description" = "Teaching term", "type" = "string", "enum" = {"W", "S"}, "example" = "W"},
* }
* },
* },
......
......@@ -5,15 +5,16 @@ declare(strict_types=1);
namespace Dbp\Relay\CourseBundle\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Dbp\Relay\BasePersonBundle\Controller\GetAtteendeesByCourse;
use Dbp\Relay\BasePersonBundle\Entity\PersonInterface;
use Dbp\Relay\BasePersonBundle\Entity\PersonTrait;
use Dbp\Relay\CourseBundle\Controller\GetAttendeesByCourse;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ApiResource(
* collectionOperations={
* "get" = {
* "path" = "/course_attendees",
* "openapi_context" = {
* "tags" = {"Courses"}
* }
......@@ -21,7 +22,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
* "get_bycourse" = {
* "method" = "GET",
* "path" = "/courses/{identifier}/attendees",
* "controller" = GetAtteendeesByCourse::class,
* "controller" = GetAttendeesByCourse::class,
* "read" = false,
* "normalization_context" = {
* "jsonld_embed_context" = true,
......@@ -39,14 +40,15 @@ use Symfony\Component\Serializer\Annotation\Groups;
* },
* itemOperations={
* "get" = {
* "path" = "/course_attendees/{identifier}",
* "openapi_context" = {
* "tags" = {"Courses"}
* }
* }
* },
* iri="http://schema.org/Person",
* shortName="BasePerson",
* description="A person of the LDAP system",
* shortName="CourseAttendee",
* description="A person attending a course",
* normalizationContext={
* "groups" = {"BasePerson:output"},
* "jsonld_embed_context" = true,
......
......@@ -43,4 +43,9 @@ class DummyCourseProvider implements CourseProviderInterface
return [$attendee];
}
public function getCoursesByPerson(string $personId, array $options = []): array
{
return $this->getCourses($options);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment