-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApiController.php
More file actions
54 lines (43 loc) · 1.95 KB
/
Copy pathApiController.php
File metadata and controls
54 lines (43 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
namespace App\Controllers;
use App\Repositories\StreamRepository;
use App\Repositories\UserRepository;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Routing\RouteContext;
class ApiController
{
public function __construct(
private StreamRepository $streamRepository,
private UserRepository $userRepository,
) {}
public function new(Request $request, Response $response): Response
{
$data = $request->getParsedBody();
$ownerEmail = $data['owner_email'] ?? null;
$formSlug = $data['form_slug'] ?? null;
$organizationSlug = $data['organization_slug'] ?? null;
$title = $data['title'] ?? null;
$formType = $data['form_type'] ?? 'Donation';
// Valider le form_type
$allowedFormTypes = ['Donation', 'CrowdFunding'];
if (!in_array($formType, $allowedFormTypes)) {
$formType = 'Donation';
}
if (!$ownerEmail || !$formSlug || !$organizationSlug || !$title) {
$response->getBody()->write(json_encode(['error' => 'all fields are mandatory']));
return $response->withStatus(400)->withHeader('Content-Type', 'application/json');
}
$stream = $this->streamRepository->insert($formSlug, $organizationSlug, $title, null, $formType);
$user = $this->userRepository->findOrCreate($ownerEmail);
$this->userRepository->insertRight($user, $stream, null);
$this->userRepository->insertResetToken($user);
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
$data = [
"status" => "ok",
"reset_password_url" => $_SERVER['WEBSITE_DOMAIN'] . $routeParser->urlFor('app_reset_password', ["token" => $user->reset_token])
];
$response->getBody()->write(json_encode($data));
return $response->withStatus(200)->withHeader('Content-Type', 'application/json');
}
}