1
0
mirror of https://framagit.org/tykayn/date-poll-api synced 2023-08-25 08:23:11 +02:00

Compare commits

...

3 Commits

Author SHA1 Message Date
d885a3b947 votestack and comment add 2021-04-29 11:48:38 +02:00
80abd003ae save new stack and return updated poll 2021-04-29 11:41:36 +02:00
a481a41a6c up script up 2021-04-29 10:20:12 +02:00
12 changed files with 396 additions and 355 deletions

View File

@ -1,7 +1,9 @@
{ {
"type": "project", "type": "project",
"license": "proprietary", "license": "aGPLv3",
"minimum-stability": "dev", "minimum-stability": "dev",
"description": "Une API pour framadate funky",
"name": "datepollapi",
"prefer-stable": true, "prefer-stable": true,
"require": { "require": {
"php": ">=7.2.5", "php": ">=7.2.5",
@ -25,7 +27,8 @@
"symfony/proxy-manager-bridge": "5.2.*", "symfony/proxy-manager-bridge": "5.2.*",
"symfony/swiftmailer-bundle": "^3.5", "symfony/swiftmailer-bundle": "^3.5",
"symfony/twig-bundle": "5.2.*", "symfony/twig-bundle": "5.2.*",
"symfony/yaml": "5.2.*" "symfony/yaml": "5.2.*",
"ext-json": "*"
}, },
"config": { "config": {
"optimize-autoloader": true, "optimize-autoloader": true,
@ -72,6 +75,7 @@
}, },
"require-dev": { "require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.4", "doctrine/doctrine-fixtures-bundle": "^3.4",
"symfony/debug-bundle": "5.2.*",
"symfony/maker-bundle": "^1.30" "symfony/maker-bundle": "^1.30"
} }
} }

82
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "9c5b89758d62c8a13bd265b1ef64e2bc", "content-hash": "76574cee43242167355502c759b6260c",
"packages": [ "packages": [
{ {
"name": "composer/package-versions-deprecated", "name": "composer/package-versions-deprecated",
@ -6508,6 +6508,84 @@
}, },
"time": "2020-12-20T10:01:03+00:00" "time": "2020-12-20T10:01:03+00:00"
}, },
{
"name": "symfony/debug-bundle",
"version": "v5.2.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
"reference": "ec21bd26d24dab02ac40e4bec362b3f4032486e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/ec21bd26d24dab02ac40e4bec362b3f4032486e8",
"reference": "ec21bd26d24dab02ac40e4bec362b3f4032486e8",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=7.2.5",
"symfony/http-kernel": "^4.4|^5.0",
"symfony/twig-bridge": "^4.4|^5.0",
"symfony/var-dumper": "^4.4|^5.0"
},
"conflict": {
"symfony/config": "<4.4",
"symfony/dependency-injection": "<5.2"
},
"require-dev": {
"symfony/config": "^4.4|^5.0",
"symfony/dependency-injection": "^4.4|^5.0",
"symfony/web-profiler-bundle": "^4.4|^5.0"
},
"suggest": {
"symfony/config": "For service container configuration",
"symfony/dependency-injection": "For using as a service from the container"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
"Symfony\\Bundle\\DebugBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides a tight integration of the Symfony Debug component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/debug-bundle/tree/v5.2.4"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2021-01-10T16:30:10+00:00"
},
{ {
"name": "symfony/maker-bundle", "name": "symfony/maker-bundle",
"version": "v1.30.2", "version": "v1.30.2",
@ -6608,5 +6686,5 @@
"ext-iconv": "*" "ext-iconv": "*"
}, },
"platform-dev": [], "platform-dev": [],
"plugin-api-version": "1.1.0" "plugin-api-version": "2.0.0"
} }

View File

@ -12,4 +12,5 @@ return [
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true], Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true],
]; ];

View File

@ -0,0 +1,4 @@
debug:
# Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser.
# See the "server:dump" command to start a new server.
dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"

View File

@ -1,5 +1,6 @@
# see https://symfony.com/doc/current/reference/configuration/framework.html # see https://symfony.com/doc/current/reference/configuration/framework.html
framework: framework:
trusted_hosts: ['localhost:4200', 'localhost']
secret: '%env(APP_SECRET)%' secret: '%env(APP_SECRET)%'
#csrf_protection: true #csrf_protection: true
#http_method_override: true #http_method_override: true

View File

@ -1,24 +1,11 @@
nelmio_cors: nelmio_cors:
defaults: defaults:
allow_credentials: false
allow_origin: []
allow_headers: []
allow_methods: []
expose_headers: []
max_age: 0
hosts: []
origin_regex: false
forced_allow_origin_value: ~
paths:
'^/api/':
allow_origin: ['*']
allow_headers: ['*']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE', 'OPTIONS']
max_age: 3600
'^/':
origin_regex: true origin_regex: true
allow_origin: ['^http://localhost:[0-9]+'] allow_origin: [ '*' ]
allow_methods: [ 'GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE' ]
allow_headers: [ '*' ] allow_headers: [ '*' ]
allow_methods: ['POST', 'PUT', 'GET', 'DELETE', 'OPTIONS'] expose_headers: [ 'Authorization' ]
allow_credentials: true
max_age: 3600 max_age: 3600
hosts: ['^api\.'] paths:
'^/': ~

View File

@ -5,7 +5,7 @@
use Symfony\Component\ErrorHandler\Debug; use Symfony\Component\ErrorHandler\Debug;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
header( 'Access-Control-Allow-Origin: *' ); // header( 'Access-Control-Allow-Origin: *' );
// header( "Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method" ); // header( "Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method" );
// header( "Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE" ); // header( "Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE" );
header( "Allow: GET, POST, OPTIONS, PUT, DELETE" ); header( "Allow: GET, POST, OPTIONS, PUT, DELETE" );

View File

@ -3,7 +3,7 @@
namespace App\Controller\api; namespace App\Controller\api;
use App\Controller\EmailsController; use App\Controller\EmailsController;
use App\Entity\Choice; use App\Entity\Comment;
use App\Entity\Owner; use App\Entity\Owner;
use App\Entity\Poll; use App\Entity\Poll;
use App\Entity\StackOfVotes; use App\Entity\StackOfVotes;
@ -11,7 +11,6 @@
use App\Repository\ChoiceRepository; use App\Repository\ChoiceRepository;
use FOS\RestBundle\Controller\Annotations\Delete; use FOS\RestBundle\Controller\Annotations\Delete;
use FOS\RestBundle\Controller\Annotations\Patch; use FOS\RestBundle\Controller\Annotations\Patch;
use FOS\RestBundle\Controller\Annotations\Post;
use FOS\RestBundle\Controller\Annotations\Route; use FOS\RestBundle\Controller\Annotations\Route;
use JMS\Serializer\SerializerInterface; use JMS\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
@ -28,9 +27,10 @@
/** /**
* add a vote stack on a poll * add a vote stack on a poll
* @Post( * @Route(
* path = "/poll/{custom_url}/answer", * path = "/poll/{custom_url}/answer",
* name = "new_vote_stack", * name = "new_vote_stack",
* methods={"POST","OPTIONS"}
* ) * )
* *
* @param SerializerInterface $serializer * @param SerializerInterface $serializer
@ -43,7 +43,7 @@
SerializerInterface $serializer, SerializerInterface $serializer,
string $custom_url, string $custom_url,
Request $request, Request $request,
ChoiceRepository $choice_repository, ChoiceRepository $choice_repository
) { ) {
@ -57,19 +57,40 @@
$data = $request->getContent(); $data = $request->getContent();
$data = json_decode( $data, true ); $data = json_decode( $data, true );
// $data = $data['data'];
// var_dump($data);
// die();
$owner = new Owner(); $owner = new Owner();
$owner->addPoll($poll); $owner
->addPoll( $poll )
;
$newStack = new StackOfVotes(); $newStack = new StackOfVotes();
$newStack $newStack
->setPseudo( $data[ 'pseudo' ] ) ->setPoll($poll)
->setIp( $_SERVER[ 'REMOTE_ADDR' ] )
->setPseudo( $data[ "pseudo" ] )
->setOwner( $owner ); ->setOwner( $owner );
$owner
->setPseudo($data['owner'][ "pseudo" ])
->setPseudo($data['owner'][ "email" ])
->addStackOfVote($newStack);
// TODO manage new comment // TODO manage new comment
$emChoice = $choice_repository; $emChoice = $choice_repository;
$newComment = new Comment();
$newComment->setPseudo($data ['pseudo'])
->setPoll($poll)
->setText($data['comment']);
$owner->addComment($newComment);
$em->persist($newComment);
foreach ( $data[ 'votes' ] as $vote ) { foreach ( $data[ 'votes' ] as $vote ) {
if(!$vote[ 'value' ]){
continue;
}
$newVote = new Vote(); $newVote = new Vote();
$newVote->setPoll( $poll ); $newVote->setPoll( $poll );
@ -95,88 +116,14 @@
$em->persist( $poll ); $em->persist( $poll );
$em->flush(); $em->flush();
if ( $poll->getMailOnVote() ) {
$this->sendVoteNotificationAction( $newStack->getOwner(), $newStack );
}
return $this->json( [ return $this->json( [
'data' => $data, 'poll' => $poll->display(),
] ); ] );
// $emOwner = $em->getRepository( Owner::class );
// $emChoice = $em->getRepository( Choice::class );
// $existingOwner = false;
// $foundOwner = $emOwner->findOneByEmail( trim( $data[ 'email' ] ) );
// manage existing or new Owner
// if ( ! $foundOwner ) {
// $foundOwner = new Owner();
// $foundOwner
// ->setEmail( $data[ 'email' ] )
// ->setPseudo( $data[ 'pseudo' ] );
// } else {
// $existingOwner = true;
// }
// TODO anti flood
// $foundOwner
// ->setModifierToken( $poll->generateRandomKey() );
// $stack = new StackOfVotes();
// $stack
// ->setOwner( $foundOwner )
// ->setIp( $_SERVER[ 'REMOTE_ADDR' ] )
// ->setPseudo( $data[ 'pseudo' ] )
// ->setPoll( $custom_url );
// foreach ( $data[ 'votes' ] as $voteInfo ) {
//
// if ( ! isset( $voteInfo[ 'value' ] ) ) {
// continue;
// }
// $allowedValuesToAnswer = [ 'yes', 'maybe', 'no' ];
//
// if ( ! in_array( $voteInfo[ 'value' ], $allowedValuesToAnswer ) ) {
// return $this->json( [
// 'message' => 'answer ' . $voteInfo[ 'value' ] . ' is not allowed. should be yes, maybe, or no.',
// 'vote_stack' => $stack,
// ],
// 404 );
// }
// $vote = new Vote();
// $foundChoice = $emChoice->find( $voteInfo[ 'choice_id' ] );
// if ( ! $foundChoice ) {
// return $this->json( [
// 'message' => 'choice ' . $voteInfo[ 'choice_id' ] . ' was not found',
// 'vote_stack' => $stack,
// ],
// 404 );
// }
// $vote->setPoll( $poll )
// ->setChoice( $foundChoice )
// ->setValue( $voteInfo[ 'value' ] );
// $vote->setPoll( $poll );
// $stack->addVote( $vote );
// $poll->addVote( $vote );
// $em->persist( $vote );
// $em->persist( $foundChoice );
// }
//
// // find poll from choices
// $poll->addStackOfVote( $stack );
// $em->persist( $stack );
// $em->persist( $poll );
// $em->flush();
// $precision = '';
// if ( $existingOwner ) {
// $precision = ' from an existing owner : ' . $foundOwner->getEmail();
// }
//
// if ( $poll->getMailOnVote() ) {
// $this->sendVoteNotificationAction( $stack->getOwner(), $stack );
// }
//
// $returnedVoteStack = $stack;
//
// $jsonResponse = $serializer->serialize( $returnedVoteStack, 'json' );
//
// $response = new Response( $jsonResponse );
// $response->headers->set( 'Content-Type', 'application/json' );
// $response->setStatusCode( 200 );
//
// return $response;
} }

View File

@ -316,6 +316,19 @@
'id' => $choice_id, 'id' => $choice_id,
'url' => $choice_url, 'url' => $choice_url,
'name' => $vote->getChoice()->getName(), 'name' => $vote->getChoice()->getName(),
'score' => 0,
'yes' => [
'count' => 0,
'people' => [],
],
'maybe' => [
'count' => 0,
'people' => [],
],
'no' => [
'count' => 0,
'people' => [],
],
]; ];
} }

View File

@ -67,15 +67,7 @@ class StackOfVotes {
'created_at' => $this->getCreatedAtAsString(), 'created_at' => $this->getCreatedAtAsString(),
'votes' => [], 'votes' => [],
]; ];
// prefill votes with all choices ids foreach ( $this->getVotes() as $vote ) {
// foreach ( $this->getPoll()->getChoices() as $choice ) {
// $tab[ 'votes' ][ $choice->getId() ] = [
// 'choice_id' => $choice->getId(),
// 'value' => null,
// ];
// }
foreach ( $votes as $vote ) {
$tab[ 'votes' ][ $vote->getChoice()->getId() ] = $vote->display(); $tab[ 'votes' ][ $vote->getChoice()->getId() ] = $vote->display();
} }

View File

@ -216,6 +216,18 @@
"bin/console" "bin/console"
] ]
}, },
"symfony/debug-bundle": {
"version": "4.1",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "4.1",
"ref": "f8863cbad2f2e58c4b65fa1eac892ab189971bea"
},
"files": [
"config/packages/dev/debug.yaml"
]
},
"symfony/dependency-injection": { "symfony/dependency-injection": {
"version": "v5.2.6" "version": "v5.2.6"
}, },

View File

@ -25,7 +25,7 @@ cecho g " time to update the framadate setup"
cecho g "######################" cecho g "######################"
COMMAND_BUILD="build:prod:demobliss" COMMAND_BUILD="build:prod:demobliss"
# git reset --hard git reset --hard
git pull origin master git pull origin master
composer install composer install
@ -85,7 +85,9 @@ fi
git config --global diff.submodule log git config --global diff.submodule log
git submodule update git submodule update
git submodule foreach git reset --hard && git checkout master && git pull cd funky-framadate-front
git reset --hard && git checkout master && git pull
cd ..
cecho g "######################" cecho g "######################"
cecho g " check dependencies of the frontend with yarn " cecho g " check dependencies of the frontend with yarn "