Skip to content

Commit

Permalink
Feature company api (#75)
Browse files Browse the repository at this point in the history
* Ajout de la base de donnees pour le monde

* 🗃️ creation des tables pour les entreprises

* 🚧 wip

* Mis a jour de la table entreprise et ajout de l'api de listing des entreprises

* 👽 Ajout du filtre sur l'API des entreprises

* ♻️ Refcatoring code

* ✅ wip units tests

* 🚧 wip

* ✅ Update failed tests to warn status

* ♻️ refactoring migration

* 👽 Ajout de l'api de creation d'entreprise
  • Loading branch information
mckenziearts authored Dec 22, 2022
1 parent 594733f commit dd17733
Show file tree
Hide file tree
Showing 83 changed files with 5,775 additions and 354 deletions.
24 changes: 24 additions & 0 deletions app/Enums/EnterpriseSize.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

declare(strict_types=1);

namespace App\Enums;

use BenSampo\Enum\Enum;

final class EnterpriseSize extends Enum
{
const SEED = '1-10';

const SMALL = '11-50';

const MEDIUM = '51-200';

const LARGE = '201-500';

const VERY_LARGE = '501-1000';

const ENTERPRISE = '1001-5000';

const LARGE_ENTERPRISE = '5000+';
}
17 changes: 17 additions & 0 deletions app/Filters/Enterprise/EnterpriseFilters.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace App\Filters\Enterprise;

use App\Filters\AbstractFilters;

class EnterpriseFilters extends AbstractFilters
{
/**
* Registered filters to operate upon.
*
* @var array
*/
protected array $filters = [

];
}
2 changes: 1 addition & 1 deletion app/Http/Controllers/Api/Auth/LoginController.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public function login(LoginRequest $request): JsonResponse
'password' => $request->input('password'),
];

if (empty($user) || !Auth::attempt($sanitized)) {
if (empty($user) || ! Auth::attempt($sanitized)) {
throw ValidationException::withMessages([
'email' => 'Les informations d\'identification fournies sont incorrectes.',
]);
Expand Down
3 changes: 2 additions & 1 deletion app/Http/Controllers/Api/Auth/RegisterController.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ public function register(RegisterRequest $request): JsonResponse
//TODO: Send new company registration notification on Slack
event(new ApiRegistered($user));

return response()->json(array_merge(
return response()->json(
array_merge(
['message' => 'Votre compte a été créé avec succès. Un e-mail de vérification vous a été envoyé.'],
$this->userMetaData($user)
)
Expand Down
10 changes: 5 additions & 5 deletions app/Http/Controllers/Api/Auth/VerifyEmailController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
namespace App\Http\Controllers\Api\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Auth\Events\Verified;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use App\Models\User;
use Illuminate\Http\Request;

class VerifyEmailController extends Controller
{
Expand All @@ -17,14 +17,14 @@ public function verify(Request $request): RedirectResponse
$user = User::find($request->route('id'));

if ($user->hasVerifiedEmail()) {
return redirect(config('lcm.spa_url') . '/email/verify/already');
return redirect(config('lcm.spa_url').'/email/verify/already');
}

if ($user->markEmailAsVerified()) {
event(new Verified($user));
}

return redirect(config('lcm.spa_url') . '/email/verify/success');
return redirect(config('lcm.spa_url').'/email/verify/success');
}

public function resend(Request $request): JsonResponse
Expand Down
35 changes: 35 additions & 0 deletions app/Http/Controllers/Api/Enterprise/PublicController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

namespace App\Http\Controllers\Api\Enterprise;

use App\Http\Controllers\Controller;
use App\Http\Resources\EnterpriseResource;
use App\Http\Resources\EnterpriseResourceCollection;
use App\Models\Enterprise;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;

class PublicController extends Controller
{
public function featured(): AnonymousResourceCollection
{
$enterprises = Enterprise::query()
->scopes('featured')
->limit(6)
->get();

return EnterpriseResource::collection($enterprises);
}

public function paginate(Request $request): EnterpriseResourceCollection
{
$filters = $request->query();

$enterprises = Enterprise::query()
->filters($request)
->latest()
->paginate($request->query('per_page', 12));

return new EnterpriseResourceCollection($enterprises, $filters);
}
}
39 changes: 39 additions & 0 deletions app/Http/Controllers/Api/Enterprise/RegisterController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace App\Http\Controllers\Api\Enterprise;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\Enterprise\RegisterRequest;
use App\Http\Resources\AuthenticateUserResource;
use App\Http\Resources\EnterpriseResource;
use App\Models\Enterprise;
use App\Models\User;
use Illuminate\Http\JsonResponse;

class RegisterController extends Controller
{
public function __invoke(RegisterRequest $request): JsonResponse
{
/** @var User $owner */
$owner = $request->user();

if ($owner->hasEnterprise()) {
return response()->json([
'error' => 'Ce compte possède déjà une entreprise associée.',
]);
}

$enterprise = Enterprise::query()->create([
'name' => $request->input('name'),
'slug' => $request->input('name'),
'website' => $request->input('website'),
'user_id' => $request->input('user_id'),
'is_public' => false,
]);

return response()->json([
'user' => new AuthenticateUserResource($owner),
'enterprise' => new EnterpriseResource($enterprise),
]);
}
}
1 change: 0 additions & 1 deletion app/Http/Controllers/Api/User/ProfileController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
use App\Http\Resources\AuthenticateUserResource;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class ProfileController extends Controller
{
Expand Down
5 changes: 2 additions & 3 deletions app/Http/Controllers/HomeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
use App\Models\Thread;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;

Expand Down Expand Up @@ -57,8 +56,8 @@ public function index()
->withUrl();

return view('home', compact(
'latestArticles',
'latestThreads',
'latestArticles',
'latestThreads',
'latestDiscussions',
'plans'
));
Expand Down
4 changes: 3 additions & 1 deletion app/Http/Livewire/Discussions/Create.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ public function store()

givePoint(new DiscussionCreated($discussion));

Auth::user()->notify(new PostDiscussionToTelegram($discussion));
if (app()->environment('production')) {
Auth::user()->notify(new PostDiscussionToTelegram($discussion));
}

$this->redirectRoute('discussions.show', $discussion);
}
Expand Down
34 changes: 34 additions & 0 deletions app/Http/Requests/Api/Enterprise/RegisterRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace App\Http\Requests\Api\Enterprise;

use Illuminate\Foundation\Http\FormRequest;

class RegisterRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize(): bool
{
return auth()->user()->isEnterprise();
}

/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules(): array
{
$regex = '/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/';

return [
'name' => 'required',
'website' => 'required|unique:enterprises,website|regex:'.$regex,
'user_id' => 'required',
];
}
}
21 changes: 21 additions & 0 deletions app/Http/Resources/DateTimeResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class DateTimeResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*/
public function toArray($request): array
{
return [
'human' => $this->diffForHumans(),
'dateTime' => $this->toDateTimeString(),
];
}
}
38 changes: 38 additions & 0 deletions app/Http/Resources/EnterpriseResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace App\Http\Resources;

use App\Models\IdeHelperEnterprise;
use Illuminate\Http\Resources\Json\JsonResource;

/**
* @mixin IdeHelperEnterprise
*/
class EnterpriseResource extends JsonResource
{
public function toArray($request): array
{
return [
'id' => $this->id,
'name' => $this->name,
'slug' => $this->slug,
'website' => $this->website,
'description' => $this->description,
'about' => $this->about,
'foundedIn' => $this->founded_in,
'ceo' => $this->ceo,
'isCertified' => $this->is_certified,
'isFeatured' => $this->is_featured,
'isPublic' => $this->is_public,
'size' => $this->size,
'settings' => $this->settings,
'images' => [
'logo' => $this->getFirstMediaUrl('logo'),
'cover' => $this->getFirstMediaUrl('avatar'),
],
'owner' => UserResource::make($this->owner),
'createdAt' => DateTimeResource::make($this->created_at),
'updatedAt' => DateTimeResource::make($this->updated_at),
];
}
}
15 changes: 15 additions & 0 deletions app/Http/Resources/EnterpriseResourceCollection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace App\Http\Resources;

class EnterpriseResourceCollection extends PaginationResourceCollection
{
public function toArray($request): array
{
return [
'data' => $this->collection->transform(fn ($enterprise) => new EnterpriseResource($enterprise)),
'pagination' => $this->pagination,
'filters' => $this->filters,
];
}
}
28 changes: 28 additions & 0 deletions app/Http/Resources/PaginationResourceCollection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class PaginationResourceCollection extends ResourceCollection
{
public function __construct($resource, public $filters = [])
{
$this->pagination = [
'total' => $resource->total(),
'perPage' => $resource->perPage(),
'currentPage' => $resource->currentPage(),
'nextPage' => $resource->nextPageUrl(),
'prevPage' => $resource->previousPageUrl(),
'firstPage' => $resource->url(1),
'lastPage' => $resource->url($resource->lastPage()),
'from' => $resource->firstItem(),
'to' => $resource->lastItem(),
'totalPages' => $resource->lastPage(),
];

$resource = $resource->getCollection();

parent::__construct($resource);
}
}
1 change: 0 additions & 1 deletion app/Listeners/SendCompanyEmailVerificationNotification.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace App\Listeners;

use App\Events\ApiRegistered;
use App\Models\User;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;

Expand Down
Loading

0 comments on commit dd17733

Please sign in to comment.