Skip to content

Feature company api #75

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Dec 22, 2022
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