Skip to content
Snippets Groups Projects
Commit 76bd6998 authored by Jan-Hendrik Willms's avatar Jan-Hendrik Willms
Browse files

initial route setup

parent 83ff1dad
No related branches found
No related tags found
No related merge requests found
Pipeline #4697 passed
...@@ -125,6 +125,7 @@ class RouteMap ...@@ -125,6 +125,7 @@ class RouteMap
$this->addAuthenticatedForumRoutes($group); $this->addAuthenticatedForumRoutes($group);
$this->addAuthenticatedInstitutesRoutes($group); $this->addAuthenticatedInstitutesRoutes($group);
$this->addAuthenticatedMessagesRoutes($group); $this->addAuthenticatedMessagesRoutes($group);
$this->addAuthenticatedMVVRoutes($group);
$this->addAuthenticatedNewsRoutes($group); $this->addAuthenticatedNewsRoutes($group);
$this->addAuthenticatedStudyAreasRoutes($group); $this->addAuthenticatedStudyAreasRoutes($group);
$this->addAuthenticatedWikiRoutes($group); $this->addAuthenticatedWikiRoutes($group);
...@@ -513,6 +514,12 @@ class RouteMap ...@@ -513,6 +514,12 @@ class RouteMap
$group->delete('/messages/{id}', Routes\Messages\MessageDelete::class); $group->delete('/messages/{id}', Routes\Messages\MessageDelete::class);
} }
private function addAuthenticatedMVVRoutes(RouteCollectorProxy $group): void
{
$group->get('/degree/{id}', Routes\MVV\AbschlussShow::class);
$group->get('/studycourse/{id}', Routes\MVV\StudiengangShow::class);
}
private function addAuthenticatedForumRoutes(RouteCollectorProxy $group): void private function addAuthenticatedForumRoutes(RouteCollectorProxy $group): void
{ {
$group->get('/courses/{id}/forum-categories', Routes\Forum\ForumCategoriesIndex::class); $group->get('/courses/{id}/forum-categories', Routes\Forum\ForumCategoriesIndex::class);
......
<?php
namespace JsonApi\Routes\MVV;
use JsonApi\Errors\RecordNotFoundException;
use JsonApi\JsonApiController;
use JsonApi\Schemas\MVV\Studiengang;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class AbschlussShow extends JsonApiController
{
protected $allowedIncludePaths = [
Studiengang::TYPE,
];
public function __invoke(Request $request, Response $response, $args): Response
{
$degree = \Abschluss::find($args['id']);
if (!$degree) {
throw new RecordNotFoundException("No degree with id {$args['id']}");
}
return $this->getContentResponse($degree);
}
}
<?php
namespace JsonApi\Routes\MVV;
use JsonApi\Errors\AuthorizationFailedException;
use JsonApi\Errors\BadRequestException;
use JsonApi\Errors\RecordNotFoundException;
use JsonApi\JsonApiController;
use JsonApi\Schemas\MVV\Abschluss;
use JsonApi\Schemas\User as UserSchema;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class StudiengangShow extends JsonApiController
{
protected $allowedIncludePaths = [
Abschluss::TYPE,
];
public function __invoke(Request $request, Response $response, $args): Response
{
$studycourse = \Studiengang::find($args['id']);
if (!$studycourse) {
throw new RecordNotFoundException("No study course with id {$args['id']}");
}
return $this->getContentResponse($studycourse);
}
}
...@@ -51,6 +51,9 @@ class SchemaMap ...@@ -51,6 +51,9 @@ class SchemaMap
\FileRef::class => Schemas\FileRef::class, \FileRef::class => Schemas\FileRef::class,
\FolderType::class => Schemas\Folder::class, \FolderType::class => Schemas\Folder::class,
\Abschluss::class => Schemas\MVV\Abschluss::class,
\Studiengang::class => Schemas\MVV\Studiengang::class,
\Courseware\Block::class => Schemas\Courseware\Block::class, \Courseware\Block::class => Schemas\Courseware\Block::class,
\Courseware\BlockComment::class => Schemas\Courseware\BlockComment::class, \Courseware\BlockComment::class => Schemas\Courseware\BlockComment::class,
\Courseware\BlockFeedback::class => Schemas\Courseware\BlockFeedback::class, \Courseware\BlockFeedback::class => Schemas\Courseware\BlockFeedback::class,
......
<?php
namespace JsonApi\Schemas\MVV;
use JsonApi\Schemas\SchemaProvider;
use Neomerx\JsonApi\Contracts\Schema\ContextInterface;
use Neomerx\JsonApi\Schema\Link;
class Abschluss extends SchemaProvider
{
const TYPE = 'degree';
const REL_STUDYCOURSES = 'studycourses';
/**
* @param \Abschluss $resource
*/
public function getId($resource): ?string
{
return $resource->id;
}
/**
* @param \Abschluss $resource
*/
public function getAttributes($resource, ContextInterface $context): iterable
{
return [
'name' => (string) $resource->name,
'name-short' => (string) $resource->name_kurz,
'description' => (string) $resource->beschreibung,
'description-formatted' => formatReady($resource->beschreibung),
'mkdate' => date('c', $resource->mkdate),
'chdate' => date('c', $resource->chdate),
];
}
/**
* @param \Abschluss $resource
*/
public function getRelationships($resource, ContextInterface $context): iterable
{
$relationships = [];
if ($context->getPosition()->getLevel() === 0) {
$relationships = $this->getStudycourseRelationship($relationships, $resource, $this->shouldInclude($context, self::REL_STUDYCOURSES));
// $relationships = $this->getBookingsRelationship($relationships, $resource, $this->shouldInclude($context, self::REL_BOOKINGS));
}
return $relationships;
}
private function getStudycourseRelationship(array $relationships, \Abschluss $resource, bool $shouldInclude)
{
if ($shouldInclude) {
$relatedStudycourses = $resource->studiengaenge;
} else {
$relatedStudycourses = $resource->studiengaenge->map(function (\Studiengang $studycourse) {
return \Studiengang::build(['id' => $studycourse->id], false);
});
}
$relationships[self::REL_STUDYCOURSES] = [
self::RELATIONSHIP_LINKS => [
Link::RELATED => $this->getRelationshipRelatedLink($resource, self::REL_STUDYCOURSES),
],
self::RELATIONSHIP_DATA => $relatedStudycourses,
];
return $relationships;
return $relationships;
}
}
<?php
namespace JsonApi\Schemas\MVV;
use JsonApi\Schemas\SchemaProvider;
use Neomerx\JsonApi\Contracts\Schema\ContextInterface;
use Neomerx\JsonApi\Schema\Link;
class Fach extends SchemaProvider
{
const TYPE = 'subject';
const REL_STUDYCOURSES = 'studycourses';
/**
* @param \Fach $resource
*/
public function getId($resource): ?string
{
return $resource->id;
}
/**
* @param \Fach $resource
*/
public function getAttributes($resource, ContextInterface $context): iterable
{
return [
'name' => (string) $resource->name,
'name-short' => (string) $resource->name_kurz,
'description' => (string) $resource->beschreibung,
'description-formatted' => formatReady($resource->beschreibung),
'mkdate' => date('c', $resource->mkdate),
'chdate' => date('c', $resource->chdate),
];
}
/**
* @param \Fach $resource
*/
public function getRelationships($resource, ContextInterface $context): iterable
{
$relationships = [];
if ($context->getPosition()->getLevel() === 0) {
$relationships = $this->getStudycourseRelationship($relationships, $resource, $this->shouldInclude($context, self::REL_STUDYCOURSES));
// $relationships = $this->getBookingsRelationship($relationships, $resource, $this->shouldInclude($context, self::REL_BOOKINGS));
}
return $relationships;
}
private function getStudycourseRelationship(array $relationships, \Fach $resource, bool $shouldInclude)
{
if ($shouldInclude) {
$relatedStudycourses = $resource->studiengaenge;
} else {
$relatedStudycourses = $resource->studiengaenge->map(function (\Studiengang $studycourse) {
return \Studiengang::build(['id' => $studycourse->id], false);
});
}
$relationships[self::REL_STUDYCOURSES] = [
self::RELATIONSHIP_LINKS => [
Link::RELATED => $this->getRelationshipRelatedLink($resource, self::REL_STUDYCOURSES),
],
self::RELATIONSHIP_DATA => $relatedStudycourses,
];
return $relationships;
return $relationships;
}
}
<?php
namespace JsonApi\Schemas\MVV;
use JsonApi\Schemas\SchemaProvider;
use Neomerx\JsonApi\Contracts\Schema\ContextInterface;
use Neomerx\JsonApi\Schema\Link;
class Studiengang extends SchemaProvider
{
const TYPE = 'studycourses';
const REL_DEGREE = 'degree';
/**
* @param \Studiengang $resource
*/
public function getId($resource): ?string
{
return $resource->id;
}
/**
* @param \Studiengang $resource
*/
public function getAttributes($resource, ContextInterface $context): iterable
{
return [
'name' => (string) $resource->getDisplayName(),
'name-short' => (string) $resource->name_kurz,
'description' => (string) $resource->beschreibung,
'description-formatted' => formatReady($resource->beschreibung),
'mkdate' => date('c', $resource->mkdate),
'chdate' => date('c', $resource->chdate),
];
}
// `studiengang_id` char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
// `abschluss_id` char(32) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
// `typ` enum('einfach','mehrfach') CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
// `institut_id` char(32) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
// `start` char(32) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
// `end` char(32) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
// `beschlussdatum` int(11) unsigned DEFAULT NULL,
// `fassung_nr` int(2) DEFAULT NULL,
// `fassung_typ` varchar(32) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
// `stat` varchar(32) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
// `kommentar_status` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
// `schlagworte` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
// `studienzeit` tinyint(3) unsigned DEFAULT NULL,
// `studienplaetze` int(10) unsigned DEFAULT NULL,
// `abschlussgrad` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
// `enroll` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
// `author_id` char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
// `editor_id` char(32) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
/**
* @param \Studiengang $resource
*/
public function getRelationships($resource, ContextInterface $context): iterable
{
$relationships = [];
if ($context->getPosition()->getLevel() === 0) {
$relationships = $this->getDegreeRelationship($relationships, $resource, $this->shouldInclude($context, self::REL_DEGREE));
}
return $relationships;
}
private function getDegreeRelationship(array $relationships, \Studiengang $studycourse, bool $shouldInclude): array
{
$degree = $studycourse->abschluss;
if ($degree) {
$data = $shouldInclude ? $degree : \Abschluss::build(['id' => $degree->id], false);
$relationships[self::REL_DEGREE] = [
self::RELATIONSHIP_LINKS => [
Link::RELATED => $this->createLinkToResource($data),
],
self::RELATIONSHIP_DATA => $data,
];
}
return $relationships;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment