create owner controller, change some route to be more RESTly

This commit is contained in:
Baptiste Lemoine 2020-04-21 17:59:22 +02:00
parent c251eac2fb
commit 2836ccb137
5 changed files with 161 additions and 99 deletions

1
.env
View File

@ -15,6 +15,7 @@
###> symfony/framework-bundle ### ###> symfony/framework-bundle ###
APP_ENV=dev APP_ENV=dev
ADMIN_TOKEN=erfd456ref4ety4h56jy4i5opuoipm564iyuyn312b1s6er78g897ryjt7thsb32d1gfb
APP_SECRET=597b0529ac702d27dcb9089f7e69c362 APP_SECRET=597b0529ac702d27dcb9089f7e69c362
# Base website url, should contain https:// and having no trailing slash. example: BASE_URL=https://framadate.org # Base website url, should contain https:// and having no trailing slash. example: BASE_URL=https://framadate.org
BASE_URL=https://framadate-api.cipherbliss.com BASE_URL=https://framadate-api.cipherbliss.com

View File

@ -0,0 +1,71 @@
<?php
namespace App\Controller;
use App\Entity\Poll;
use FOS\RestBundle\Controller\Annotations\Get;
use FOS\RestBundle\Controller\Annotations\Route;
/**
* Class DefaultController
* @package App\Controller
* @Route("/admin",name="admin_homepage")
*/
class AdminController extends FramadateController {
/**
* @Get(path ="/",
* name = "_get_default")
*/
public function indexAction() {
return $this->json( [ "message" => "welcome to the framadate admin api, ask /api/v1/doc.json for endpoints" ],
200 );
}
/**
* Delete all expired polls and their children
* @Get(
* path = "/polls/clean/{token}",
* name = "_clean_expired_polls",
* )
* token is set up in the main env file
*/
public
function cleanExpiredPolls(
string $token
) {
if ( $this->getParameter( 'ADMIN_TOKEN' ) !== $token ) {
return $this->json( [
'message' => 'clean routine can NOT be done, your admin token is bad, and you should feel bad.',
],
403 );
}
$em = $this->getDoctrine()->getManager();
$emPoll = $this->getDoctrine()->getRepository( Poll::class );
$queryFind = $em->createQuery(
'SELECT p
FROM App\Entity\Poll p
WHERE p.expiracyDate < CURRENT_DATE()'
);
$queryDelete = $em->createQuery(
'DELETE
FROM App\Entity\Poll p
WHERE p.expiracyDate < CURRENT_DATE()'
);
$foundPolls = $queryFind->getResult();
$em->flush();
return $this->json( [
'message' => 'clean routine has been done, here are the numbers of polls deleted: ' . count( $foundPolls ),
'data' => [
'count' => count( $foundPolls ),
],
],
200 );
}
}

View File

@ -16,65 +16,7 @@ use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
* @Route("/api/v1",name="api_") * @Route("/api/v1",name="api_")
*/ */
class DefaultController extends FramadateController { class DefaultController extends FramadateController {
/**
* @var MailService
*/
protected $mail_service;
/**
* Send a mail with all the data to one user
* @Get(
* path = "/send-polls-to-user/{email}",
* name = "send_user_polls"
* )
*
* @param string $email
*
* @return JsonResponse
*/
public function sendPollsToUserAction( string $email ) {
$repository = $this->getDoctrine()->getRepository( Owner::class );
// find user by email
$owner = $repository->findOneByEmail($email);
if ( $owner ) {
$templateVars = [
'owner' => $owner,
'polls' => $owner->getPolls(),
'title' => 'Mes sondages - ' . $owner->getEmail(),
];
// send email
$mailSent = 0;
try {
$mailSent = $this->sendOwnerPollsAction( $owner );
} catch ( Exception $e ) {
} catch ( TransportExceptionInterface $e ) {
}
if ( $mailSent ) {
return $this->json( [
'message' => 'mail succefully sent to user ' . $owner->getEmail(),
'data' => '',
],
200 );
}
return $this->json( [
'message' => 'no sucess sending email ' . $owner->getEmail(),
'data' => '',
],
400 );
}
return $this->json( [
'message' => 'no user found for email ' . $email,
'data' => '',
],
400 );
}
} }

View File

@ -0,0 +1,85 @@
<?php
namespace App\Controller;
use App\Entity\Owner;
use FOS\RestBundle\Controller\Annotations\Get;
use FOS\RestBundle\Controller\Annotations\Route;
use JMS\Serializer\Type\Exception\Exception;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
/**
* Class DefaultController
* @package App\Controller
* @Route("/user",name="user_homepage")
*/
class OwnerController extends FramadateController {
/**
* @Get(path ="/",
* name = "get_default")
*/
public function indexAction() {
return $this->json( [ "message" => "welcome to the framadate user api, ask /api/v1/doc.json for endpoints" ],
200 );
}
/**
* Send a mail with all the data to one user
* @Get(
* path = "/{email}/polls/send-by-email",
* name = "_polls_send_by_email"
* )
*
* @param string $email
*
* @return JsonResponse
*/
public function sendPollsToUserAction( string $email ) {
$repository = $this->getDoctrine()->getRepository( Owner::class );
// find user by email
$owner = $repository->findOneByEmail( $email );
if ( $owner ) {
$templateVars = [
'owner' => $owner,
'polls' => $owner->getPolls(),
'title' => 'Mes sondages - ' . $owner->getEmail(),
];
// send email
$mailSent = 0;
try {
$mailSent = $this->sendOwnerPollsAction( $owner );
} catch ( Exception $e ) {
} catch ( TransportExceptionInterface $e ) {
}
if ( $mailSent ) {
return $this->json( [
'message' => 'mail succefully sent to user ' . $owner->getEmail(),
'data' => '',
],
200 );
}
return $this->json( [
'message' => 'no sucess sending email ' . $owner->getEmail(),
'data' => '',
],
400 );
}
return $this->json( [
'message' => 'no user found for email ' . $email,
'data' => '',
],
400 );
}
}

View File

@ -317,51 +317,14 @@ class PollController extends FramadateController {
} }
/**
* Delete all expired polls and their children
* @Get(
* path = "/clean-polls",
* name = "clean_expired_polls",
* )
*/
public
function cleanExpiredPolls() {
$em = $this->getDoctrine()->getManager();
$emPoll = $this->getDoctrine()->getRepository( Poll::class );
$queryFind = $em->createQuery(
'SELECT p
FROM App\Entity\Poll p
WHERE p.expiracyDate < CURRENT_DATE()'
);
$queryDelete = $em->createQuery(
'DELETE
FROM App\Entity\Poll p
WHERE p.expiracyDate < CURRENT_DATE()'
);
$foundPolls = $queryFind->getResult();
$em->flush();
return $this->json( [
'message' => 'clean routine has been done, here are the numbers of polls deleted: ' . count( $foundPolls ),
'data' => [
'count' => count( $foundPolls ),
],
],
200 );
}
/** /**
* Check is a slug is already taken by a poll * Check is a slug is already taken by a poll
* @Get( * @Get(
* path = "/check-slug-is-unique/{slug}", * path = "/poll/slug/{slug}",
* name = "check_slug_is_unique", * name = "check_slug_is_unique",
* ) * )
*/ */
public function checkSlugIsUniqueAction( $slug ) { public function checkSlugIsUniqueAction( string $slug ) {
$emPoll = $this->getDoctrine()->getRepository( Poll::class ); $emPoll = $this->getDoctrine()->getRepository( Poll::class );
$found = $emPoll->findOneBySlug( $slug ); $found = $emPoll->findOneBySlug( $slug );
if ( $found ) { if ( $found ) {
@ -387,10 +350,10 @@ class PollController extends FramadateController {
/** /**
* Delete all expired polls and their children * Get Admin poll config
* @Get( * @Get(
* path = "/admin/{token}", * path = "/admin/{token}",
* name = "check_slug_is_unique", * name = "get_admin_config",
* ) * )
*/ */
public function getAdministrationConfig( $token ) { public function getAdministrationConfig( $token ) {