rdv: add API entry point for POSTing calendar range

This commit is contained in:
nobohan 2021-08-30 11:02:53 +02:00
parent ee4d23ff82
commit 329d3cc3d8
4 changed files with 66 additions and 12 deletions

View File

@ -18,16 +18,19 @@ class CalendarRangeAPIController extends ApiController
*/ */
public function availableRanges(Request $request, string $_format): JsonResponse public function availableRanges(Request $request, string $_format): JsonResponse
{ {
if ($request->query->has('user')) {
$user = $request->query->get('user');
}
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$query = $em->createQuery( $sql = 'SELECT c FROM ChillCalendarBundle:CalendarRange c
'SELECT c FROM ChillCalendarBundle:CalendarRange c WHERE NOT EXISTS (SELECT cal.id FROM ChillCalendarBundle:Calendar cal WHERE cal.calendarRange = c.id)';
WHERE NOT EXISTS (SELECT cal.id FROM ChillCalendarBundle:Calendar cal WHERE cal.calendarRange = c.id)')
; if ($request->query->has('user')) {
$user = $request->query->get('user');
$sql = $sql . ' AND c.user = :user';
$query = $em->createQuery($sql)
->setParameter('user', $user);
} else {
$query = $em->createQuery($sql);
}
$results = $query->getResult(); $results = $query->getResult();

View File

@ -72,7 +72,8 @@ class ChillCalendarExtension extends Extension implements PrependExtensionInterf
'_entity' => [ '_entity' => [
'methods' => [ 'methods' => [
Request::METHOD_GET => true, Request::METHOD_GET => true,
Request::METHOD_HEAD => true Request::METHOD_HEAD => true,
Request::METHOD_POST => true,
] ]
], ],
] ]

View File

@ -25,19 +25,19 @@ class CalendarRange
/** /**
* @ORM\ManyToOne(targetEntity="Chill\MainBundle\Entity\User") * @ORM\ManyToOne(targetEntity="Chill\MainBundle\Entity\User")
* @Groups({"read"}) * @groups({"read", "write"})
*/ */
private User $user; private User $user;
/** /**
* @ORM\Column(type="datetimetz_immutable") * @ORM\Column(type="datetimetz_immutable")
* @groups({"read"}) * @groups({"read", "write"})
*/ */
private \DateTimeImmutable $startDate; private \DateTimeImmutable $startDate;
/** /**
* @ORM\Column(type="datetimetz_immutable") * @ORM\Column(type="datetimetz_immutable")
* @groups({"read"}) * @groups({"read", "write"})
*/ */
private \DateTimeImmutable $endDate; private \DateTimeImmutable $endDate;

View File

@ -8,6 +8,28 @@ servers:
- url: "/api" - url: "/api"
description: "Your current dev server" description: "Your current dev server"
components:
schemas:
Date:
type: object
properties:
datetime:
type: string
format: date-time
User:
type: object
properties:
id:
type: integer
type:
type: string
enum:
- user
username:
type: string
text:
type: string
paths: paths:
/1.0/calendar/calendar.json: /1.0/calendar/calendar.json:
get: get:
@ -48,6 +70,34 @@ paths:
responses: responses:
200: 200:
description: "ok" description: "ok"
post:
tags:
- calendar
summary: create a new calendar range
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
user:
$ref: '#/components/schemas/User'
startDate:
$ref: '#/components/schemas/Date'
endDate:
$ref: '#/components/schemas/Date'
responses:
401:
description: "Unauthorized"
404:
description: "Not found"
200:
description: "OK"
422:
description: "Unprocessable entity (validation errors)"
400:
description: "transition cannot be applyed"
/1.0/calendar/calendar-range/{id}.json: /1.0/calendar/calendar-range/{id}.json:
get: get: