refactor: replace custom CRM with Monica fork
Some checks failed
Build & Push Monica Image to Gitea Registry / build-and-push (push) Failing after 9s
Some checks failed
Build & Push Monica Image to Gitea Registry / build-and-push (push) Failing after 9s
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Account\Activity;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use App\Models\Account\ActivityTypeCategory;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Services\Account\Activity\ActivityTypeCategory\CreateActivityTypeCategory;
|
||||
use App\Services\Account\Activity\ActivityTypeCategory\UpdateActivityTypeCategory;
|
||||
use App\Services\Account\Activity\ActivityTypeCategory\DestroyActivityTypeCategory;
|
||||
use App\Http\Resources\Activity\ActivityTypeCategory as ActivityTypeCategoryResource;
|
||||
|
||||
class ApiActivityTypeCategoryController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of activity type categories.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$activityTypeCategories = auth()->user()->account->activityTypeCategories()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ActivityTypeCategoryResource::collection($activityTypeCategories);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given activity type category.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $activityTypeCategoryId
|
||||
* @return ActivityTypeCategoryResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $activityTypeCategoryId)
|
||||
{
|
||||
try {
|
||||
$activityTypeCategory = ActivityTypeCategory::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $activityTypeCategoryId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new ActivityTypeCategoryResource($activityTypeCategory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the activity type category.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ActivityTypeCategoryResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$activityTypeCategory = app(CreateActivityTypeCategory::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ActivityTypeCategoryResource($activityTypeCategory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the activity type category.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $activityTypeCategoryId
|
||||
* @return ActivityTypeCategoryResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $activityTypeCategoryId)
|
||||
{
|
||||
try {
|
||||
$activityTypeCategory = app(UpdateActivityTypeCategory::class)->execute(
|
||||
$request->except(['account_id', 'activity_type_category_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'activity_type_category_id' => $activityTypeCategoryId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ActivityTypeCategoryResource($activityTypeCategory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an activity type category.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $activityTypeCategoryId)
|
||||
{
|
||||
try {
|
||||
app(DestroyActivityTypeCategory::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'activity_type_category_id' => $activityTypeCategoryId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($activityTypeCategoryId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Account\Activity;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Account\ActivityType;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Services\Account\Activity\ActivityType\CreateActivityType;
|
||||
use App\Services\Account\Activity\ActivityType\UpdateActivityType;
|
||||
use App\Services\Account\Activity\ActivityType\DestroyActivityType;
|
||||
use App\Http\Resources\Activity\ActivityType as ActivityTypeResource;
|
||||
|
||||
class ApiActivityTypeController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of activity types.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$activityTypes = auth()->user()->account->activityTypes()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ActivityTypeResource::collection($activityTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given activity type.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ActivityTypeResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $activityTypeId)
|
||||
{
|
||||
try {
|
||||
$activityType = ActivityType::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $activityTypeId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new ActivityTypeResource($activityType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the activity type.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ActivityTypeResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$activityType = app(CreateActivityType::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ActivityTypeResource($activityType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the activity type.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $activityTypeId
|
||||
* @return ActivityTypeResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $activityTypeId)
|
||||
{
|
||||
try {
|
||||
$activityType = app(UpdateActivityType::class)->execute(
|
||||
$request->except(['account_id', 'activity_type_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'activity_type_id' => $activityTypeId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ActivityTypeResource($activityType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an activity type.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $activityTypeId
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $activityTypeId)
|
||||
{
|
||||
try {
|
||||
app(DestroyActivityType::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'activity_type_id' => $activityTypeId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($activityTypeId);
|
||||
}
|
||||
}
|
||||
135
app/Http/Controllers/Api/Account/ApiCompanyController.php
Normal file
135
app/Http/Controllers/Api/Account/ApiCompanyController.php
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Account;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Account\Company;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Account\Company\CreateCompany;
|
||||
use App\Services\Account\Company\UpdateCompany;
|
||||
use App\Services\Account\Company\DestroyCompany;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Company\Company as CompanyResource;
|
||||
|
||||
class ApiCompanyController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of companies.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$companies = auth()->user()->account->companies()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return CompanyResource::collection($companies);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given company.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return CompanyResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $companyId)
|
||||
{
|
||||
try {
|
||||
$company = Company::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $companyId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new CompanyResource($company);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the company.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return CompanyResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$company = app(CreateCompany::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'author_id' => auth()->user()->id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new CompanyResource($company);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a company.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $companyId
|
||||
* @return CompanyResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $companyId)
|
||||
{
|
||||
try {
|
||||
$company = app(UpdateCompany::class)->execute(
|
||||
$request->except(['account_id', 'company_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'company_id' => $companyId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new CompanyResource($company);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a company.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $companyId)
|
||||
{
|
||||
try {
|
||||
app(DestroyCompany::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'company_id' => $companyId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($companyId);
|
||||
}
|
||||
}
|
||||
134
app/Http/Controllers/Api/Account/ApiGenderController.php
Normal file
134
app/Http/Controllers/Api/Account/ApiGenderController.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Account;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Gender;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use App\Services\Account\Gender\CreateGender;
|
||||
use App\Services\Account\Gender\UpdateGender;
|
||||
use App\Services\Account\Gender\DestroyGender;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Http\Resources\Gender\Gender as GenderResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiGenderController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of genders.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$genders = auth()->user()->account->genders()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return GenderResource::collection($genders);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given gender.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return GenderResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $genderId)
|
||||
{
|
||||
try {
|
||||
$gender = Gender::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $genderId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new GenderResource($gender);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the gender.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return GenderResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$gender = app(CreateGender::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new GenderResource($gender);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a gender.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $genderId
|
||||
* @return GenderResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $genderId)
|
||||
{
|
||||
try {
|
||||
$gender = app(UpdateGender::class)->execute(
|
||||
$request->except(['account_id', 'gender_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'gender_id' => $genderId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new GenderResource($gender);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a gender.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $genderId)
|
||||
{
|
||||
try {
|
||||
app(DestroyGender::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'gender_id' => $genderId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($genderId);
|
||||
}
|
||||
}
|
||||
134
app/Http/Controllers/Api/Account/ApiPlaceController.php
Normal file
134
app/Http/Controllers/Api/Account/ApiPlaceController.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Account;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Account\Place;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use App\Services\Account\Place\CreatePlace;
|
||||
use App\Services\Account\Place\UpdatePlace;
|
||||
use App\Services\Account\Place\DestroyPlace;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Http\Resources\Place\Place as PlaceResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiPlaceController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of places.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$places = auth()->user()->account->places()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return PlaceResource::collection($places);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given place.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return PlaceResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $placeId)
|
||||
{
|
||||
try {
|
||||
$place = Place::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $placeId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new PlaceResource($place);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the place.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return PlaceResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$place = app(CreatePlace::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new PlaceResource($place);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a place.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $placeId
|
||||
* @return PlaceResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $placeId)
|
||||
{
|
||||
try {
|
||||
$place = app(UpdatePlace::class)->execute(
|
||||
$request->except(['account_id', 'place_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'place_id' => $placeId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new PlaceResource($place);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a place.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $placeId)
|
||||
{
|
||||
try {
|
||||
app(DestroyPlace::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'place_id' => $placeId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($placeId);
|
||||
}
|
||||
}
|
||||
148
app/Http/Controllers/Api/Account/ApiUserController.php
Normal file
148
app/Http/Controllers/Api/Account/ApiUserController.php
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Account;
|
||||
|
||||
use App\Models\User\User;
|
||||
use App\Helpers\DateHelper;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Settings\Term;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Services\User\AcceptPolicy;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Account\User\User as UserResource;
|
||||
use App\Http\Resources\Settings\Compliance\Compliance as ComplianceResource;
|
||||
|
||||
class ApiUserController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the detail of the authenticated user.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return UserResource
|
||||
*/
|
||||
public function show(Request $request): UserResource
|
||||
{
|
||||
return new UserResource(auth()->user());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the state of a specific term for the user.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $termId
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function get(Request $request, $termId)
|
||||
{
|
||||
try {
|
||||
$term = Term::findOrFail($termId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$termUser = DB::table('term_user')->where('user_id', auth()->user()->id)
|
||||
->where('account_id', auth()->user()->account_id)
|
||||
->where('term_id', $term->id)
|
||||
->first();
|
||||
|
||||
if ($termUser) {
|
||||
$data = [
|
||||
'signed' => true,
|
||||
'signed_date' => DateHelper::getTimestamp($termUser->created_at),
|
||||
'ip_address' => $termUser->ip_address,
|
||||
'user' => new UserResource(auth()->user()),
|
||||
'term' => new ComplianceResource($term),
|
||||
];
|
||||
} else {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return $this->respond([
|
||||
'data' => $data,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the policies ever signed by the authenticated user.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function getSignedPolicies(Request $request)
|
||||
{
|
||||
$terms = collect();
|
||||
$termsForUser = DB::table('term_user')
|
||||
->where('user_id', auth()->user()->id)
|
||||
->get();
|
||||
|
||||
if ($termsForUser->count() == 0) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
foreach ($termsForUser as $termUser) {
|
||||
$term = Term::findOrFail($termUser->term_id);
|
||||
|
||||
$terms->push([
|
||||
'signed' => true,
|
||||
'signed_date' => DateHelper::getTimestamp($termUser->created_at),
|
||||
'ip_address' => $termUser->ip_address,
|
||||
'user' => new UserResource(auth()->user()),
|
||||
'term' => new ComplianceResource($term),
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->respond([
|
||||
'data' => $terms,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign the latest policy for the authenticated user.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function set(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'ip_address' => 'required',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidatorFailed($validator);
|
||||
}
|
||||
|
||||
try {
|
||||
$term = app(AcceptPolicy::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'user_id' => auth()->user()->id,
|
||||
'ip_address' => $request->input('ip_address'),
|
||||
]);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
try {
|
||||
$termUser = DB::table('term_user')->where('user_id', auth()->user()->id)
|
||||
->where('account_id', auth()->user()->account_id)
|
||||
->where('term_id', $term->id)
|
||||
->first();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respond([
|
||||
'data' => [
|
||||
'signed' => true,
|
||||
'signed_date' => DateHelper::getTimestamp($termUser->created_at),
|
||||
'ip_address' => $termUser->ip_address,
|
||||
'user' => new UserResource(auth()->user()),
|
||||
'term' => new ComplianceResource($term),
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
161
app/Http/Controllers/Api/ApiActivitiesController.php
Normal file
161
app/Http/Controllers/Api/ApiActivitiesController.php
Normal file
@@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Helpers\AccountHelper;
|
||||
use App\Models\Contact\Contact;
|
||||
use App\Models\Account\Activity;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Services\Account\Activity\Activity\CreateActivity;
|
||||
use App\Services\Account\Activity\Activity\UpdateActivity;
|
||||
use App\Services\Account\Activity\Activity\DestroyActivity;
|
||||
use App\Http\Resources\Activity\Activity as ActivityResource;
|
||||
|
||||
class ApiActivitiesController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of activities.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$activities = auth()->user()->account->activities()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ActivityResource::collection($activities)->additional(['meta' => [
|
||||
'statistics' => AccountHelper::getYearlyActivitiesStatistics(auth()->user()->account),
|
||||
]]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given activity.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ActivityResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $activityId)
|
||||
{
|
||||
try {
|
||||
$activity = Activity::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($activityId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new ActivityResource($activity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the activity.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ActivityResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$activity = app(CreateActivity::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ActivityResource($activity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the activity.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $activityId
|
||||
* @return ActivityResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $activityId)
|
||||
{
|
||||
try {
|
||||
$activity = app(UpdateActivity::class)->execute(
|
||||
$request->except(['account_id', 'activity_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'activity_id' => $activityId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ActivityResource($activity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an activity.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $activityId)
|
||||
{
|
||||
try {
|
||||
app(DestroyActivity::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'activity_id' => $activityId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($activityId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of activities for the given contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function activities(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($contactId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
$activities = $contact->activities()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ActivityResource::collection($activities)->additional(['meta' => [
|
||||
'statistics' => AccountHelper::getYearlyActivitiesStatistics(auth()->user()->account),
|
||||
]]);
|
||||
}
|
||||
}
|
||||
260
app/Http/Controllers/Api/ApiContactController.php
Normal file
260
app/Http/Controllers/Api/ApiContactController.php
Normal file
@@ -0,0 +1,260 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Helpers\SearchHelper;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Jobs\UpdateLastConsultedDate;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Contact\Contact\CreateContact;
|
||||
use App\Services\Contact\Contact\UpdateContact;
|
||||
use App\Services\Contact\Contact\DestroyContact;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Services\Contact\Contact\UpdateWorkInformation;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Contact\Contact as ContactResource;
|
||||
use App\Services\Contact\Contact\UpdateContactIntroduction;
|
||||
use App\Services\Contact\Contact\UpdateContactFoodPreferences;
|
||||
|
||||
class ApiContactController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('limitations')->only('setMe');
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of the contacts.
|
||||
* We will only retrieve the contacts that are "real", not the partials
|
||||
* ones.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JsonResource|JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
if ($request->input('query')) {
|
||||
$needle = rawurldecode($request->input('query'));
|
||||
|
||||
try {
|
||||
$contacts = SearchHelper::searchContacts(
|
||||
$needle,
|
||||
$this->sort,
|
||||
$this->sortDirection
|
||||
)
|
||||
->real()
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ContactResource::collection($contacts)->additional([
|
||||
'meta' => [
|
||||
'query' => $needle,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
try {
|
||||
$contacts = auth()->user()->account->contacts()
|
||||
->real()
|
||||
->active()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ContactResource::collection($contacts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return ContactResource|JsonResponse
|
||||
*/
|
||||
public function show(Request $request, int $id)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $id)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
UpdateLastConsultedDate::dispatch($contact);
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ContactResource|JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$contact = app(CreateContact::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'author_id' => auth()->user()->id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ContactResource|JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = app(UpdateContact::class)->execute(
|
||||
$request->except(['account_id', 'contact_id'])
|
||||
+
|
||||
[
|
||||
'contact_id' => $contactId,
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'author_id' => auth()->user()->id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $contactId)
|
||||
{
|
||||
$data = [
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_id' => $contactId,
|
||||
];
|
||||
DestroyContact::dispatch($data);
|
||||
|
||||
return $this->respondObjectDeleted($contactId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the contact career.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return ContactResource|JsonResponse
|
||||
*/
|
||||
public function updateWork(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = app(UpdateWorkInformation::class)->execute(
|
||||
$request->except(['account_id', 'contact_id'])
|
||||
+ [
|
||||
'contact_id' => $contactId,
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'author_id' => auth()->user()->id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the contact food preferences.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return ContactResource|JsonResponse
|
||||
*/
|
||||
public function updateFoodPreferences(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = app(UpdateContactFoodPreferences::class)->execute(
|
||||
$request->except(['account_id', 'contact_id'])
|
||||
+ [
|
||||
'contact_id' => $contactId,
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set how you met the contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return ContactResource|JsonResponse
|
||||
*/
|
||||
public function updateIntroduction(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = app(UpdateContactIntroduction::class)->execute(
|
||||
$request->except(['account_id', 'contact_id'])
|
||||
+ [
|
||||
'contact_id' => $contactId,
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
}
|
||||
140
app/Http/Controllers/Api/ApiContactFieldController.php
Normal file
140
app/Http/Controllers/Api/ApiContactFieldController.php
Normal file
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use App\Models\Contact\ContactField;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Services\Contact\ContactField\CreateContactField;
|
||||
use App\Services\Contact\ContactField\UpdateContactField;
|
||||
use App\Services\Contact\ContactField\DestroyContactField;
|
||||
use App\Http\Resources\ContactField\ContactField as ContactFieldResource;
|
||||
|
||||
class ApiContactFieldController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the detail of a given contactField.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactFieldId
|
||||
* @return ContactFieldResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $contactFieldId)
|
||||
{
|
||||
try {
|
||||
$contactField = ContactField::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($contactFieldId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new ContactFieldResource($contactField);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the contactField.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ContactFieldResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$contactField = app(CreateContactField::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ContactFieldResource($contactField);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the contactField.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactFieldId
|
||||
* @return ContactFieldResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $contactFieldId)
|
||||
{
|
||||
try {
|
||||
$contactField = app(UpdateContactField::class)->execute(
|
||||
$request->except(['account_id', 'address_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_field_id' => $contactFieldId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ContactFieldResource($contactField);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a contactField.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactFieldId
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $contactFieldId)
|
||||
{
|
||||
try {
|
||||
app(DestroyContactField::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_field_id' => $contactFieldId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($contactFieldId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of contact fields for the given contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function contactFields(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$contactFields = $contact->contactFields()
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return ContactFieldResource::collection($contactFields);
|
||||
}
|
||||
}
|
||||
129
app/Http/Controllers/Api/ApiContactTagController.php
Normal file
129
app/Http/Controllers/Api/ApiContactTagController.php
Normal file
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Contact\Tag;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use App\Services\Contact\Tag\DetachTag;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Services\Contact\Tag\AssociateTag;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Contact\Contact as ContactResource;
|
||||
|
||||
class ApiContactTagController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Associate one or more tags to the contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
*/
|
||||
public function setTags(Request $request, $contactId)
|
||||
{
|
||||
$contact = $this->validateTag($request, $contactId);
|
||||
if (! $contact instanceof Contact) {
|
||||
return $contact;
|
||||
}
|
||||
|
||||
$tags = collect($request->input('tags'))
|
||||
->filter(function ($tag) {
|
||||
return ! empty($tag);
|
||||
});
|
||||
|
||||
foreach ($tags as $tag) {
|
||||
app(AssociateTag::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_id' => $contact->id,
|
||||
'name' => $tag,
|
||||
]);
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all the tags associated with the contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
*/
|
||||
public function unsetTags(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$contactTags = $contact->tags()->get();
|
||||
|
||||
foreach ($contactTags as $tag) {
|
||||
app(DetachTag::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_id' => $contact->id,
|
||||
'tag_id' => $tag->id,
|
||||
]);
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove one or more specific tags associated with the contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
*/
|
||||
public function unsetTag(Request $request, $contactId)
|
||||
{
|
||||
$contact = $this->validateTag($request, $contactId);
|
||||
if (! $contact instanceof Contact) {
|
||||
return $contact;
|
||||
}
|
||||
|
||||
$tags = collect($request->input('tags'))
|
||||
->filter(function ($tag) {
|
||||
return ! empty($tag);
|
||||
});
|
||||
|
||||
foreach ($tags as $tag) {
|
||||
app(DetachTag::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_id' => $contact->id,
|
||||
'tag_id' => $tag,
|
||||
]);
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the request for update tag.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return mixed
|
||||
*/
|
||||
private function validateTag(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($contactId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'tags' => 'required|array',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidatorFailed($validator);
|
||||
}
|
||||
|
||||
return $contact;
|
||||
}
|
||||
}
|
||||
207
app/Http/Controllers/Api/ApiController.php
Normal file
207
app/Http/Controllers/Api/ApiController.php
Normal file
@@ -0,0 +1,207 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use function Safe\json_decode;
|
||||
use App\Models\Account\ApiUsage;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Traits\JsonRespondController;
|
||||
|
||||
class ApiController extends Controller
|
||||
{
|
||||
use JsonRespondController;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $limitPerPage = 0;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $sort = 'created_at';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $withParameter = null;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $sortDirection = 'asc';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware(function ($request, $next) {
|
||||
(new ApiUsage)->log($request);
|
||||
|
||||
if ($request->has('sort')) {
|
||||
$this->setSortCriteria($request->input('sort'));
|
||||
|
||||
// It has a sort criteria, but is it a valid one?
|
||||
if (empty($this->getSortCriteria())) {
|
||||
return $this->setHTTPStatusCode(400)
|
||||
->setErrorCode(39)
|
||||
->respondWithError();
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->has('limit')) {
|
||||
if ($request->input('limit') > config('api.max_limit_per_page')) {
|
||||
return $this->setHTTPStatusCode(400)
|
||||
->setErrorCode(30)
|
||||
->respondWithError();
|
||||
}
|
||||
|
||||
$this->setLimitPerPage($request->input('limit'));
|
||||
}
|
||||
|
||||
if ($request->has('with')) {
|
||||
$this->setWithParameter($request->input('with'));
|
||||
}
|
||||
|
||||
// make sure the JSON is well formatted if the call sends a JSON
|
||||
// if the call contains a JSON, the call must not be a GET or
|
||||
// a DELETE
|
||||
// TODO: there is probably a much better way to do that
|
||||
try {
|
||||
if ($request->method() != 'GET' && $request->method() != 'DELETE'
|
||||
&& is_null(json_decode($request->getContent()))) {
|
||||
return $this->setHTTPStatusCode(400)
|
||||
->setErrorCode(37)
|
||||
->respondWithError();
|
||||
}
|
||||
} catch (\Safe\Exceptions\JsonException $e) {
|
||||
// no error
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Default request to the API.
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function success()
|
||||
{
|
||||
return $this->respond([
|
||||
'success' => [
|
||||
'message' => 'Welcome to Monica',
|
||||
],
|
||||
'links' => [
|
||||
'activities_url' => route('api.activities'),
|
||||
'addresses_url' => route('api.addresses'),
|
||||
'calls_url' => route('api.calls'),
|
||||
'contacts_url' => route('api.contacts'),
|
||||
'conversations_url' => route('api.conversations'),
|
||||
'countries_url' => route('api.countries'),
|
||||
'currencies_url' => route('api.currencies'),
|
||||
'documents_url' => route('api.documents'),
|
||||
'journal_url' => route('api.journal'),
|
||||
'notes_url' => route('api.notes'),
|
||||
'relationships_url' => route('api.relationships', ['contact' => ':contactId']),
|
||||
'reminders_url' => route('api.reminders'),
|
||||
'statistics_url' => route('api.statistics'),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getWithParameter()
|
||||
{
|
||||
return $this->withParameter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $with
|
||||
* @return self
|
||||
*/
|
||||
public function setWithParameter($with)
|
||||
{
|
||||
$this->withParameter = $with;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getLimitPerPage()
|
||||
{
|
||||
return $this->limitPerPage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $limit
|
||||
* @return self
|
||||
*/
|
||||
public function setLimitPerPage($limit)
|
||||
{
|
||||
$this->limitPerPage = $limit;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the sort direction parameter.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSortDirection()
|
||||
{
|
||||
return $this->sortDirection;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSortCriteria()
|
||||
{
|
||||
return $this->sort;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $criteria
|
||||
* @return self
|
||||
*/
|
||||
public function setSortCriteria($criteria)
|
||||
{
|
||||
$acceptedCriteria = [
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'-created_at',
|
||||
'-updated_at',
|
||||
'completed_at',
|
||||
'-completed_at',
|
||||
'called_at',
|
||||
'-called_at',
|
||||
'favorited_at',
|
||||
'-favorited_at',
|
||||
];
|
||||
|
||||
if (in_array($criteria, $acceptedCriteria)) {
|
||||
$this->setSQLOrderByQuery($criteria);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
$this->sort = '';
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set both the column and order necessary to perform an orderBy.
|
||||
*/
|
||||
public function setSQLOrderByQuery($criteria)
|
||||
{
|
||||
$this->sortDirection = $criteria[0] == '-' ? 'desc' : 'asc';
|
||||
$this->sort = ltrim($criteria, '-');
|
||||
}
|
||||
}
|
||||
191
app/Http/Controllers/Api/ApiDebtController.php
Normal file
191
app/Http/Controllers/Api/ApiDebtController.php
Normal file
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Contact\Debt;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Resources\Debt\Debt as DebtResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiDebtController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of debts.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$debts = auth()->user()->account->debts()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return DebtResource::collection($debts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given debt.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return DebtResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $debtId)
|
||||
{
|
||||
try {
|
||||
$debt = Debt::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $debtId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new DebtResource($debt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the debt.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return DebtResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$debt = Debt::create(
|
||||
$request->except(['account_id'])
|
||||
+ ['account_id' => auth()->user()->account_id]
|
||||
);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
return new DebtResource($debt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the debt.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $debtId
|
||||
* @return DebtResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $debtId)
|
||||
{
|
||||
try {
|
||||
$debt = Debt::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $debtId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$debt->update($request->only(['in_debt', 'status', 'amount', 'reason', 'contact_id']));
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
return new DebtResource($debt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the request for update.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|true
|
||||
*/
|
||||
private function validateUpdate(Request $request)
|
||||
{
|
||||
// Validates basic fields to create the entry
|
||||
$validator = Validator::make($request->all(), [
|
||||
'in_debt' => [
|
||||
'required',
|
||||
'string',
|
||||
Rule::in(['yes', 'no']),
|
||||
],
|
||||
'status' => [
|
||||
'required',
|
||||
'string',
|
||||
Rule::in(['inprogress', 'completed']),
|
||||
],
|
||||
'amount' => 'required|numeric',
|
||||
'reason' => 'string|max:1000000|nullable',
|
||||
'contact_id' => 'required|integer',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidatorFailed($validator);
|
||||
}
|
||||
|
||||
try {
|
||||
Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $request->input('contact_id'))
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a debt.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $debtId)
|
||||
{
|
||||
try {
|
||||
$debt = Debt::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $debtId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$debt->delete();
|
||||
|
||||
return $this->respondObjectDeleted($debt->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of debts for the given contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function debts(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$debts = $contact->debts()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return DebtResource::collection($debts);
|
||||
}
|
||||
}
|
||||
174
app/Http/Controllers/Api/ApiGiftController.php
Normal file
174
app/Http/Controllers/Api/ApiGiftController.php
Normal file
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Contact\Gift;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Services\Contact\Gift\CreateGift;
|
||||
use App\Services\Contact\Gift\UpdateGift;
|
||||
use App\Services\Contact\Gift\DestroyGift;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Http\Resources\Gift\Gift as GiftResource;
|
||||
use App\Services\Contact\Gift\AssociatePhotoToGift;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiGiftController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of gifts.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$gifts = auth()->user()->account->gifts()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return GiftResource::collection($gifts);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given gift.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return GiftResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$gift = Gift::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($id);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new GiftResource($gift);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the gift.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return GiftResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$gift = app(CreateGift::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+ ['account_id' => auth()->user()->account_id]
|
||||
);
|
||||
|
||||
return new GiftResource($gift);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the gift.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $giftId
|
||||
* @return GiftResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $giftId)
|
||||
{
|
||||
try {
|
||||
$gift = app(UpdateGift::class)->execute(
|
||||
$request->except(['account_id', 'gift_id'])
|
||||
+ [
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'gift_id' => $giftId,
|
||||
]
|
||||
);
|
||||
|
||||
return new GiftResource($gift);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Associate a photo to the gift.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $giftId
|
||||
* @param int $photoId
|
||||
* @return GiftResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function associate(Request $request, $giftId, $photoId)
|
||||
{
|
||||
try {
|
||||
$gift = app(AssociatePhotoToGift::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'gift_id' => $giftId,
|
||||
'photo_id' => $photoId,
|
||||
]);
|
||||
|
||||
return new GiftResource($gift);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a gift.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $giftId)
|
||||
{
|
||||
try {
|
||||
app(DestroyGift::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'gift_id' => $giftId,
|
||||
]);
|
||||
|
||||
return $this->respondObjectDeleted($giftId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of gifts for the given contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function gifts(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($contactId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
$gifts = $contact->gifts()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return GiftResource::collection($gifts);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
148
app/Http/Controllers/Api/ApiJournalController.php
Normal file
148
app/Http/Controllers/Api/ApiJournalController.php
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Journal\Entry;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Resources\Journal\Entry as JournalResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiJournalController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of journal entries.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$entries = auth()->user()->account->entries()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return JournalResource::collection($entries);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given journal entry.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JournalResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $entryId)
|
||||
{
|
||||
try {
|
||||
$entry = Entry::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $entryId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new JournalResource($entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the call.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JournalResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$entry = Entry::create(
|
||||
$request->except(['account_id'])
|
||||
+ ['account_id' => auth()->user()->account_id]
|
||||
);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
return new JournalResource($entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the note.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $entryId
|
||||
* @return JournalResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $entryId)
|
||||
{
|
||||
try {
|
||||
$entry = Entry::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $entryId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$entry->update($request->only(['title', 'post']));
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
return new JournalResource($entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the request for update.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|true
|
||||
*/
|
||||
private function validateUpdate(Request $request)
|
||||
{
|
||||
// Validates basic fields to create the entry
|
||||
$validator = Validator::make($request->all(), [
|
||||
'title' => 'required|max:255',
|
||||
'post' => 'required|max:1000000',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidatorFailed($validator);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a journal entry.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $entryId)
|
||||
{
|
||||
try {
|
||||
$entry = Entry::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $entryId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$entry->delete();
|
||||
|
||||
return $this->respondObjectDeleted($entry->id);
|
||||
}
|
||||
}
|
||||
66
app/Http/Controllers/Api/ApiMeController.php
Normal file
66
app/Http/Controllers/Api/ApiMeController.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\Contact\Contact\SetMeContact;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Contact\Contact\DeleteMeContact;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiMeController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('limitations')->only('store');
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a contact as 'me'.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return string
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'contact_id' => $request->input('contact_id'),
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'user_id' => auth()->user()->id,
|
||||
];
|
||||
|
||||
try {
|
||||
app(SetMeContact::class)->execute($data);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return $this->respond(['true']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes contact as 'me' association.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return string
|
||||
*/
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'user_id' => auth()->user()->id,
|
||||
];
|
||||
|
||||
app(DeleteMeContact::class)->execute($data);
|
||||
|
||||
return $this->respond(['true']);
|
||||
}
|
||||
}
|
||||
192
app/Http/Controllers/Api/ApiNoteController.php
Normal file
192
app/Http/Controllers/Api/ApiNoteController.php
Normal file
@@ -0,0 +1,192 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Contact\Note;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Resources\Note\Note as NoteResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiNoteController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of notes.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$notes = auth()->user()->account->notes()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return NoteResource::collection($notes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given note.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return NoteResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$note = Note::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $id)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new NoteResource($note);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the note.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return NoteResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$note = Note::create(
|
||||
$request->except(['account_id'])
|
||||
+ ['account_id' => auth()->user()->account_id]
|
||||
);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
if ($request->input('is_favorited')) {
|
||||
$note->favorited_at = now();
|
||||
$note->save();
|
||||
}
|
||||
|
||||
return new NoteResource($note);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the note.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $noteId
|
||||
* @return NoteResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $noteId)
|
||||
{
|
||||
try {
|
||||
$note = Note::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $noteId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$note->update($request->only(['body', 'contact_id', 'is_favorited']));
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
if ($request->input('is_favorited')) {
|
||||
$note->favorited_at = now();
|
||||
} else {
|
||||
$note->favorited_at = null;
|
||||
}
|
||||
$note->save();
|
||||
|
||||
return new NoteResource($note);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the request for update.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|true
|
||||
*/
|
||||
private function validateUpdate(Request $request)
|
||||
{
|
||||
// Validates basic fields to create the entry
|
||||
$validator = Validator::make($request->all(), [
|
||||
'body' => 'required|max:100000',
|
||||
'contact_id' => 'required|integer',
|
||||
'is_favorited' => 'boolean',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidatorFailed($validator);
|
||||
}
|
||||
|
||||
try {
|
||||
Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $request->input('contact_id'))
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a note.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $noteId)
|
||||
{
|
||||
try {
|
||||
$note = Note::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $noteId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$note->delete();
|
||||
|
||||
return $this->respondObjectDeleted($note->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of notes for the given contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function notes(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$notes = $contact->notes()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return NoteResource::collection($notes);
|
||||
}
|
||||
}
|
||||
182
app/Http/Controllers/Api/ApiPetController.php
Normal file
182
app/Http/Controllers/Api/ApiPetController.php
Normal file
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Contact\Pet;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Resources\Pet\Pet as PetResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiPetController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of pet.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$pets = Pet::where('account_id', auth()->user()->account_id)
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return PetResource::collection($pets);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given pet.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return PetResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$pet = Pet::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $id)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new PetResource($pet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the pet.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return PetResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$pet = Pet::create(
|
||||
$request->except(['account_id'])
|
||||
+ ['account_id' => auth()->user()->account_id]
|
||||
);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
return new PetResource($pet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the pet.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $petId
|
||||
* @return PetResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $petId)
|
||||
{
|
||||
try {
|
||||
$pet = Pet::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $petId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$pet->update($request->only(['pet_category_id', 'contact_id', 'name']));
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
return new PetResource($pet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the request for update.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|true
|
||||
*/
|
||||
private function validateUpdate(Request $request)
|
||||
{
|
||||
// Validates basic fields to create the entry
|
||||
$validator = Validator::make($request->all(), [
|
||||
'pet_category_id' => 'integer|required|exists:pet_categories,id',
|
||||
'contact_id' => 'required|integer',
|
||||
'name' => 'max:255',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidatorFailed($validator);
|
||||
}
|
||||
|
||||
try {
|
||||
Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $request->input('contact_id'))
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a pet.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $petId
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $petId)
|
||||
{
|
||||
try {
|
||||
$pet = Pet::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $petId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$pet->delete();
|
||||
|
||||
return $this->respondObjectDeleted($pet->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of pets for the given contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function pets(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$pets = $contact->pets()
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return PetResource::collection($pets);
|
||||
}
|
||||
}
|
||||
124
app/Http/Controllers/Api/ApiRelationshipController.php
Normal file
124
app/Http/Controllers/Api/ApiRelationshipController.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use App\Models\Relationship\Relationship;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Services\Contact\Relationship\CreateRelationship;
|
||||
use App\Services\Contact\Relationship\UpdateRelationship;
|
||||
use App\Services\Contact\Relationship\DestroyRelationship;
|
||||
use App\Http\Resources\Relationship\Relationship as RelationshipResource;
|
||||
|
||||
class ApiRelationshipController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get all of relationships of a contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$relationships = Relationship::where('account_id', auth()->user()->account_id)
|
||||
->where('contact_is', $contactId)
|
||||
->get();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return RelationshipResource::collection($relationships);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given relationship.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return RelationshipResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$relationship = Relationship::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($id);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new RelationshipResource($relationship);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new relationship.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return RelationshipResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$relationship = app(CreateRelationship::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_is' => $request->input('contact_is'),
|
||||
'of_contact' => $request->input('of_contact'),
|
||||
'relationship_type_id' => $request->input('relationship_type_id'),
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return new RelationshipResource($relationship);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing relationship.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|RelationshipResource
|
||||
*/
|
||||
public function update(Request $request, $relationshipId)
|
||||
{
|
||||
try {
|
||||
$relationship = app(UpdateRelationship::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'relationship_id' => $relationshipId,
|
||||
'relationship_type_id' => $request->input('relationship_type_id'),
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
$relationship->refresh();
|
||||
|
||||
return new RelationshipResource($relationship);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a relationship.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $relationshipId)
|
||||
{
|
||||
try {
|
||||
app(DestroyRelationship::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'relationship_id' => $relationshipId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($relationshipId);
|
||||
}
|
||||
}
|
||||
47
app/Http/Controllers/Api/ApiRelationshipTypeController.php
Normal file
47
app/Http/Controllers/Api/ApiRelationshipTypeController.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Relationship\RelationshipType;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\RelationshipType\RelationshipType as RelationshipTypeResource;
|
||||
|
||||
class ApiRelationshipTypeController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get all relationship types in an instance.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$relationshipTypes = auth()->user()->account->relationshipTypes()
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return RelationshipTypeResource::collection($relationshipTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given relationship type.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return RelationshipTypeResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$relationshipType = RelationshipType::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($id);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new RelationshipTypeResource($relationshipType);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Relationship\RelationshipTypeGroup;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\RelationshipTypeGroup\RelationshipTypeGroup as RelationshipTypeGroupResource;
|
||||
|
||||
class ApiRelationshipTypeGroupController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Account ID column name.
|
||||
*/
|
||||
const ACCOUNT_ID = 'account_id';
|
||||
|
||||
/**
|
||||
* Get all relationship type groups in an instance.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$relationshipTypeGroups = auth()->user()->account->relationshipTypeGroups()
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return RelationshipTypeGroupResource::collection($relationshipTypeGroups);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given relationship type group.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return RelationshipTypeGroupResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$relationshipTypeGroup = RelationshipTypeGroup::where(static::ACCOUNT_ID, auth()->user()->account_id)
|
||||
->where('id', $id)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new RelationshipTypeGroupResource($relationshipTypeGroup);
|
||||
}
|
||||
}
|
||||
182
app/Http/Controllers/Api/ApiReminderController.php
Normal file
182
app/Http/Controllers/Api/ApiReminderController.php
Normal file
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Helpers\AccountHelper;
|
||||
use App\Models\Contact\Contact;
|
||||
use App\Models\Contact\Reminder;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Contact\Reminder\CreateReminder;
|
||||
use App\Services\Contact\Reminder\UpdateReminder;
|
||||
use App\Services\Contact\Reminder\DestroyReminder;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Reminder\Reminder as ReminderResource;
|
||||
use App\Http\Resources\Reminder\ReminderOutbox as ReminderOutboxResource;
|
||||
|
||||
class ApiReminderController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of reminders.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$reminders = auth()->user()->account->reminders()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ReminderResource::collection($reminders);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given reminder.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ReminderResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $reminderId)
|
||||
{
|
||||
try {
|
||||
$reminder = Reminder::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $reminderId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new ReminderResource($reminder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the reminder.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ReminderResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$reminder = app(CreateReminder::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ReminderResource($reminder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the reminder.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $reminderId
|
||||
* @return ReminderResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $reminderId)
|
||||
{
|
||||
try {
|
||||
$reminder = app(UpdateReminder::class)->execute(
|
||||
$request->except(['account_id', 'reminder_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'reminder_id' => $reminderId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ReminderResource($reminder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a reminder.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $reminderId)
|
||||
{
|
||||
try {
|
||||
app(DestroyReminder::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'reminder_id' => $reminderId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($reminderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of reminders for the given contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function reminders(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$reminders = $contact->reminders()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return ReminderResource::collection($reminders);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the reminders for the month given in parameter.
|
||||
* - 0 means current month
|
||||
* - 1 means month+1
|
||||
* - 2 means month+2...
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $month
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function upcoming(Request $request, int $month = 0)
|
||||
{
|
||||
try {
|
||||
$reminders = AccountHelper::getUpcomingRemindersForMonth(
|
||||
auth()->user()->account,
|
||||
$month
|
||||
);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ReminderOutboxResource::collection($reminders);
|
||||
}
|
||||
}
|
||||
157
app/Http/Controllers/Api/ApiTagController.php
Normal file
157
app/Http/Controllers/Api/ApiTagController.php
Normal file
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Contact\Tag;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Services\Contact\Tag\CreateTag;
|
||||
use App\Services\Contact\Tag\UpdateTag;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Services\Contact\Tag\DestroyTag;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use App\Http\Resources\Tag\Tag as TagResource;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||
use App\Http\Resources\Contact\ContactWithContactFields as ContactWithContactFieldsResource;
|
||||
|
||||
class ApiTagController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of the contacts.
|
||||
* We will only retrieve the contacts that are "real", not the partials
|
||||
* ones.
|
||||
*
|
||||
* @return AnonymousResourceCollection|JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$tags = auth()->user()->account->tags()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return TagResource::collection($tags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given tag.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return TagResource|JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$tag = Tag::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $id)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new TagResource($tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the tag.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return TagResource|JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$tag = app(CreateTag::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return new TagResource($tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the tag.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return TagResource|JsonResponse
|
||||
*/
|
||||
public function update(Request $request, int $id)
|
||||
{
|
||||
try {
|
||||
$tag = app(UpdateTag::class)->execute(
|
||||
$request->except(['account_id', 'tag_id'])
|
||||
+
|
||||
[
|
||||
'tag_id' => $id,
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return new TagResource($tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a tag.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
app(DestroyTag::class)->execute([
|
||||
'tag_id' => $id,
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show all the contacts for a given tag.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $tagId
|
||||
* @return JsonResponse|AnonymousResourceCollection
|
||||
*/
|
||||
public function contacts(Request $request, int $tagId)
|
||||
{
|
||||
try {
|
||||
$contacts = auth()->user()->account->contacts()
|
||||
->real()
|
||||
->active()
|
||||
->whereHas('tags', function (Builder $query) use ($tagId) {
|
||||
$query->where('id', $tagId);
|
||||
})
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ContactWithContactFieldsResource::collection($contacts);
|
||||
}
|
||||
}
|
||||
149
app/Http/Controllers/Api/ApiTaskController.php
Normal file
149
app/Http/Controllers/Api/ApiTaskController.php
Normal file
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Contact\Task;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use App\Services\Task\CreateTask;
|
||||
use App\Services\Task\UpdateTask;
|
||||
use App\Services\Task\DestroyTask;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Http\Resources\Task\Task as TaskResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiTaskController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of task.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$tasks = auth()->user()->account->tasks()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return TaskResource::collection($tasks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given task.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return TaskResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $taskId)
|
||||
{
|
||||
try {
|
||||
$task = Task::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $taskId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new TaskResource($task);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the task.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return TaskResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$task = app(CreateTask::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_id' => ($request->input('contact_id') == '' ? null : $request->input('contact_id')),
|
||||
'title' => $request->input('title'),
|
||||
'description' => ($request->input('description') == '' ? null : $request->input('description')),
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return new TaskResource($task);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the task.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $taskId
|
||||
* @return TaskResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $taskId)
|
||||
{
|
||||
try {
|
||||
$task = app(UpdateTask::class)->execute(
|
||||
$request->except(['account_id', 'task_id'])
|
||||
+
|
||||
[
|
||||
'task_id' => $taskId,
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return new TaskResource($task);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a task.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $taskId)
|
||||
{
|
||||
try {
|
||||
app(DestroyTask::class)->execute([
|
||||
'task_id' => $taskId,
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($taskId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of tasks for the given contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function tasks(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$tasks = $contact->tasks()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return TaskResource::collection($tasks);
|
||||
}
|
||||
}
|
||||
212
app/Http/Controllers/Api/Auth/OAuthController.php
Normal file
212
app/Http/Controllers/Api/Auth/OAuthController.php
Normal file
@@ -0,0 +1,212 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Auth;
|
||||
|
||||
use App\Models\User\User;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
use function Safe\json_decode;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Traits\JsonRespondController;
|
||||
use Illuminate\Contracts\Http\Kernel;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Barryvdh\Debugbar\Facades\Debugbar;
|
||||
use Illuminate\Support\Facades\Redirect;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Contracts\Encryption\Encrypter;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class OAuthController extends Controller
|
||||
{
|
||||
use JsonRespondController;
|
||||
|
||||
/**
|
||||
* The encrypter implementation.
|
||||
*
|
||||
* @var \Illuminate\Contracts\Encryption\Encrypter
|
||||
*/
|
||||
protected $encrypter;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Encryption\Encrypter $encrypter
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Encrypter $encrypter)
|
||||
{
|
||||
$this->encrypter = $encrypter;
|
||||
|
||||
if (config('app.debug')) {
|
||||
Debugbar::disable();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a log in form for oauth accessToken.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$request->session()->flush();
|
||||
|
||||
return view('auth.oauthlogin');
|
||||
}
|
||||
|
||||
/**
|
||||
* Log in a user and returns an accessToken.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Symfony\Component\HttpFoundation\Response|null
|
||||
*/
|
||||
public function login(Request $request): ?Response
|
||||
{
|
||||
$isvalid = $this->validateRequest($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
$email = $request->input('email');
|
||||
$password = $request->input('password');
|
||||
|
||||
if (Auth::attempt(['email' => $email, 'password' => $password])) {
|
||||
// The user is active, not suspended, and exists.
|
||||
|
||||
$request->session()->put('oauth', true);
|
||||
$request->session()->put('email', $email);
|
||||
$request->session()->put('password', $this->encrypter->encrypt($password));
|
||||
|
||||
$this->fixRequest($request);
|
||||
|
||||
// add intendedUrl for WebAuthn
|
||||
Redirect::setIntendedUrl(route('oauth.verify'));
|
||||
|
||||
return Route::respondWithRoute('oauth.verify');
|
||||
}
|
||||
|
||||
return $this->respondUnauthorized();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix request parameters.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return void
|
||||
*/
|
||||
private function fixRequest(Request $request)
|
||||
{
|
||||
$request->setMethod('GET');
|
||||
$cookie = $request->cookies->get(config('session.cookie'));
|
||||
$request->cookies->set(config('session.cookie'), $this->encrypter->encrypt($cookie));
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the request.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|true
|
||||
*/
|
||||
private function validateRequest(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'email|required',
|
||||
'password' => 'required',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidatorFailed($validator);
|
||||
}
|
||||
|
||||
// Check if email exists. If not respond with an Unauthorized, this way a hacker
|
||||
// doesn't know if the login email exist or not, or if the password is wrong
|
||||
$count = User::where('email', $request->input('email'))->count();
|
||||
if ($count === 0) {
|
||||
return $this->respondUnauthorized();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Log in a user and returns an accessToken.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function verify(Request $request): JsonResponse
|
||||
{
|
||||
$response = $this->handleVerify($request);
|
||||
|
||||
Auth::logout();
|
||||
$request->session()->flush();
|
||||
|
||||
return $response ?: $this->respondUnauthorized();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the verify request.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|null
|
||||
*/
|
||||
private function handleVerify(Request $request): ?JsonResponse
|
||||
{
|
||||
if (! $request->session()->has('email') || ! $request->session()->has('password')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$request->query->set('email', $request->session()->pull('email'));
|
||||
$request->query->set('password', $this->encrypter->decrypt($request->session()->pull('password')));
|
||||
|
||||
$isvalid = $this->validateRequest($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$token = $this->proxy([
|
||||
'username' => $request->input('email'),
|
||||
'password' => $request->input('password'),
|
||||
'grantType' => 'password',
|
||||
]);
|
||||
|
||||
return $this->respond($token);
|
||||
} catch (\Exception $e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy a request to the OAuth server.
|
||||
*
|
||||
* @param array $data the data to send to the server
|
||||
* @return array
|
||||
*
|
||||
* @throws \Safe\Exceptions\JsonException
|
||||
*/
|
||||
private function proxy(array $data = []): array
|
||||
{
|
||||
$url = App::runningUnitTests() ? Str::of(config('app.url'))->ltrim('/').'/oauth/token' : route('passport.token');
|
||||
/** @var \Illuminate\Http\Response */
|
||||
$response = app(Kernel::class)->handle(Request::create($url, 'POST', [
|
||||
'grant_type' => $data['grantType'],
|
||||
'client_id' => config('passport.password_grant_client.id'),
|
||||
'client_secret' => config('passport.password_grant_client.secret'),
|
||||
'username' => $data['username'],
|
||||
'password' => $data['password'],
|
||||
'scope' => '',
|
||||
]));
|
||||
|
||||
$data = json_decode($response->content());
|
||||
|
||||
return [
|
||||
'access_token' => $data->access_token,
|
||||
'expires_in' => $data->expires_in,
|
||||
];
|
||||
}
|
||||
}
|
||||
156
app/Http/Controllers/Api/Contact/ApiAddressController.php
Normal file
156
app/Http/Controllers/Api/Contact/ApiAddressController.php
Normal file
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Address;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Contact\Address\CreateAddress;
|
||||
use App\Services\Contact\Address\UpdateAddress;
|
||||
use App\Services\Contact\Address\DestroyAddress;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Address\Address as AddressResource;
|
||||
|
||||
class ApiAddressController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of addresses.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$addresses = auth()->user()->account->addresses()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return AddressResource::collection($addresses);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given address.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return AddressResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$address = Address::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $id)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new AddressResource($address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the address.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return AddressResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$address = app(CreateAddress::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new AddressResource($address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the address.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $addressId
|
||||
* @return AddressResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $addressId)
|
||||
{
|
||||
try {
|
||||
$address = app(UpdateAddress::class)->execute(
|
||||
$request->except(['account_id', 'address_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'address_id' => $addressId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new AddressResource($address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an address.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $addressId)
|
||||
{
|
||||
try {
|
||||
app(DestroyAddress::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'address_id' => $addressId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($addressId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of addresses for the given contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function addresses(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$addresses = $contact->addresses()
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return AddressResource::collection($addresses);
|
||||
}
|
||||
}
|
||||
42
app/Http/Controllers/Api/Contact/ApiAuditLogController.php
Normal file
42
app/Http/Controllers/Api/Contact/ApiAuditLogController.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\AuditLog\AuditLog as AuditLogResource;
|
||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||
|
||||
class ApiAuditLogController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of the audit logs for the given contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return JsonResponse|AnonymousResourceCollection
|
||||
*/
|
||||
public function index(Request $request, int $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
$logs = $contact->logs()
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return AuditLogResource::collection($logs);
|
||||
}
|
||||
}
|
||||
43
app/Http/Controllers/Api/Contact/ApiAvatarController.php
Normal file
43
app/Http/Controllers/Api/Contact/ApiAvatarController.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use App\Services\Contact\Avatar\UpdateAvatar;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Contact\Contact as ContactResource;
|
||||
|
||||
class ApiAvatarController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Update a contact's avatar.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return ContactResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = app(UpdateAvatar::class)->execute(
|
||||
$request->except(['account_id', 'contact_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'contact_id' => $contactId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
}
|
||||
162
app/Http/Controllers/Api/Contact/ApiCallController.php
Normal file
162
app/Http/Controllers/Api/Contact/ApiCallController.php
Normal file
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use App\Models\Contact\Call;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Helpers\AccountHelper;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Services\Contact\Call\CreateCall;
|
||||
use App\Services\Contact\Call\UpdateCall;
|
||||
use App\Services\Contact\Call\DestroyCall;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Http\Resources\Call\Call as CallResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiCallController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of calls.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$calls = auth()->user()->account->calls()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return CallResource::collection($calls)->additional(['meta' => [
|
||||
'statistics' => AccountHelper::getYearlyCallStatistics(auth()->user()->account),
|
||||
]]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given call.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return CallResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $callId)
|
||||
{
|
||||
try {
|
||||
$call = Call::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $callId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new CallResource($call);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the call.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return CallResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$call = app(CreateCall::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new CallResource($call);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a call.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $callId
|
||||
* @return CallResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $callId)
|
||||
{
|
||||
try {
|
||||
$call = app(UpdateCall::class)->execute(
|
||||
$request->except(['account_id', 'call_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'call_id' => $callId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new CallResource($call);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a call.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $callId)
|
||||
{
|
||||
try {
|
||||
app(DestroyCall::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'call_id' => $callId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($callId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of calls for a given contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function calls(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$calls = $contact->calls()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return CallResource::collection($calls)->additional(['meta' => [
|
||||
'statistics' => AccountHelper::getYearlyCallStatistics(auth()->user()->account),
|
||||
]]);
|
||||
}
|
||||
}
|
||||
162
app/Http/Controllers/Api/Contact/ApiConversationController.php
Normal file
162
app/Http/Controllers/Api/Contact/ApiConversationController.php
Normal file
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use App\Models\Contact\Conversation;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Services\Contact\Conversation\CreateConversation;
|
||||
use App\Services\Contact\Conversation\UpdateConversation;
|
||||
use App\Services\Contact\Conversation\DestroyConversation;
|
||||
use App\Http\Resources\Conversation\Conversation as ConversationResource;
|
||||
|
||||
class ApiConversationController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of conversations.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$conversations = auth()->user()->account->conversations()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ConversationResource::collection($conversations);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of conversations for a specific contact.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function conversations(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
Contact::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
$conversations = auth()->user()->account->conversations()
|
||||
->where('contact_id', $contactId)
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return ConversationResource::collection($conversations);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given conversation.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ConversationResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $conversationId)
|
||||
{
|
||||
try {
|
||||
$conversation = Conversation::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($conversationId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new ConversationResource($conversation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the conversation.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ConversationResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$conversation = app(CreateConversation::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ConversationResource($conversation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the conversation.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $conversationId
|
||||
* @return ConversationResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $conversationId)
|
||||
{
|
||||
try {
|
||||
$conversation = app(UpdateConversation::class)->execute(
|
||||
$request->except(['account_id', 'conversation_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'conversation_id' => $conversationId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ConversationResource($conversation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy the conversation.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $conversationId
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $conversationId)
|
||||
{
|
||||
try {
|
||||
app(DestroyConversation::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'conversation_id' => $conversationId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($conversationId);
|
||||
}
|
||||
}
|
||||
146
app/Http/Controllers/Api/Contact/ApiDocumentController.php
Normal file
146
app/Http/Controllers/Api/Contact/ApiDocumentController.php
Normal file
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Contact;
|
||||
use App\Models\Contact\Document;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Contact\Document\UploadDocument;
|
||||
use App\Services\Contact\Document\DestroyDocument;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Document\Document as DocumentResource;
|
||||
|
||||
class ApiDocumentController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Instantiate a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('limitations')->only('store');
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of documents.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$documents = auth()->user()->account->documents()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return DocumentResource::collection($documents);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of documents for a specific contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function contact(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
Contact::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($contactId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
$documents = auth()->user()->account->documents()
|
||||
->where('contact_id', $contactId)
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return DocumentResource::collection($documents);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given document.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $documentId
|
||||
* @return DocumentResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $documentId)
|
||||
{
|
||||
try {
|
||||
$document = Document::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($documentId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new DocumentResource($document);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a document.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return DocumentResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$document = app(UploadDocument::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new DocumentResource($document);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a document.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $documentId
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $documentId)
|
||||
{
|
||||
try {
|
||||
app(DestroyDocument::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'document_id' => $documentId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($documentId);
|
||||
}
|
||||
}
|
||||
121
app/Http/Controllers/Api/Contact/ApiLifeEventController.php
Normal file
121
app/Http/Controllers/Api/Contact/ApiLifeEventController.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\LifeEvent;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Contact\LifeEvent\CreateLifeEvent;
|
||||
use App\Services\Contact\LifeEvent\UpdateLifeEvent;
|
||||
use App\Services\Contact\LifeEvent\DestroyLifeEvent;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\LifeEvent\LifeEvent as LifeEventResource;
|
||||
|
||||
class ApiLifeEventController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of life events.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$lifeEvents = auth()->user()->account->lifeEvents()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return LifeEventResource::collection($lifeEvents);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given life event.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return LifeEventResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $lifeEventId)
|
||||
{
|
||||
try {
|
||||
$lifeEvent = LifeEvent::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($lifeEventId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new LifeEventResource($lifeEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the life event.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return LifeEventResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$lifeEvent = app(CreateLifeEvent::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return new LifeEventResource($lifeEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the life event.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $lifeEventId
|
||||
* @return LifeEventResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $lifeEventId)
|
||||
{
|
||||
try {
|
||||
$lifeEvent = app(UpdateLifeEvent::class)->execute(
|
||||
$request->except(['account_id', 'life_event_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'life_event_id' => $lifeEventId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
}
|
||||
|
||||
return new LifeEventResource($lifeEvent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy the life event.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $lifeEventId
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $lifeEventId)
|
||||
{
|
||||
try {
|
||||
app(DestroyLifeEvent::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'life_event_id' => $lifeEventId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($lifeEventId);
|
||||
}
|
||||
}
|
||||
126
app/Http/Controllers/Api/Contact/ApiMessageController.php
Normal file
126
app/Http/Controllers/Api/Contact/ApiMessageController.php
Normal file
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Message;
|
||||
use App\Models\Contact\Conversation;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Contact\Conversation\UpdateMessage;
|
||||
use App\Services\Contact\Conversation\DestroyMessage;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Services\Contact\Conversation\AddMessageToConversation;
|
||||
use App\Http\Resources\Conversation\Conversation as ConversationResource;
|
||||
|
||||
class ApiMessageController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Store the message.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ConversationResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request, int $conversationId)
|
||||
{
|
||||
try {
|
||||
$conversation = Conversation::findOrFail($conversationId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
app(AddMessageToConversation::class)->execute(
|
||||
$request->except(['account_id', 'conversation_id', 'contact_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'conversation_id' => $conversation->id,
|
||||
'contact_id' => $conversation->contact_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ConversationResource($conversation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the message.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $conversationId
|
||||
* @param int $messageId
|
||||
* @return ConversationResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, int $conversationId, int $messageId)
|
||||
{
|
||||
try {
|
||||
$conversation = Conversation::findOrFail($conversationId);
|
||||
$message = Message::findOrFail($messageId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
app(UpdateMessage::class)->execute(
|
||||
$request->except(['account_id', 'conversation_id', 'message_id', 'contact_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'conversation_id' => $conversationId,
|
||||
'message_id' => $message->id,
|
||||
'contact_id' => $conversation->contact_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new ConversationResource($conversation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy the message.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $conversationId
|
||||
* @param int $messageId
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $conversationId, int $messageId)
|
||||
{
|
||||
try {
|
||||
Conversation::findOrFail($conversationId);
|
||||
Message::findOrFail($messageId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
app(DestroyMessage::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'conversation_id' => $conversationId,
|
||||
'message_id' => $messageId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($messageId);
|
||||
}
|
||||
}
|
||||
134
app/Http/Controllers/Api/Contact/ApiOccupationController.php
Normal file
134
app/Http/Controllers/Api/Contact/ApiOccupationController.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Contact\Occupation;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Services\Contact\Occupation\CreateOccupation;
|
||||
use App\Services\Contact\Occupation\UpdateOccupation;
|
||||
use App\Services\Contact\Occupation\DestroyOccupation;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Occupation\Occupation as OccupationResource;
|
||||
|
||||
class ApiOccupationController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of occupations.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$occupations = auth()->user()->account->occupations()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return OccupationResource::collection($occupations);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given occupation.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return OccupationResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $occupationId)
|
||||
{
|
||||
try {
|
||||
$occupation = Occupation::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $occupationId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new OccupationResource($occupation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the occupation.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return OccupationResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$occupation = app(CreateOccupation::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new OccupationResource($occupation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an occupation.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $occupationId
|
||||
* @return OccupationResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $occupationId)
|
||||
{
|
||||
try {
|
||||
$occupation = app(UpdateOccupation::class)->execute(
|
||||
$request->except(['account_id', 'occupation_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'occupation_id' => $occupationId,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new OccupationResource($occupation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an occupation.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $occupationId)
|
||||
{
|
||||
try {
|
||||
app(DestroyOccupation::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'occupation_id' => $occupationId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($occupationId);
|
||||
}
|
||||
}
|
||||
134
app/Http/Controllers/Api/Contact/ApiPhotoController.php
Normal file
134
app/Http/Controllers/Api/Contact/ApiPhotoController.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Contact;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Account\Photo;
|
||||
use App\Models\Contact\Contact;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use App\Services\Account\Photo\UploadPhoto;
|
||||
use App\Services\Account\Photo\DestroyPhoto;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use App\Http\Resources\Photo\Photo as PhotoResource;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class ApiPhotoController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of photos.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$photos = auth()->user()->account->photos()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return PhotoResource::collection($photos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of photos for a specific contact.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactId
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function contact(Request $request, $contactId)
|
||||
{
|
||||
try {
|
||||
$contact = Contact::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($contactId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
try {
|
||||
$photos = $contact->photos()
|
||||
->orderBy($this->sort, $this->sortDirection)
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return PhotoResource::collection($photos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given photo.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $photoId
|
||||
* @return PhotoResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $photoId)
|
||||
{
|
||||
try {
|
||||
$photo = Photo::where('account_id', auth()->user()->account_id)
|
||||
->findOrFail($photoId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new PhotoResource($photo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a photo.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return PhotoResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
$photo = app(UploadPhoto::class)->execute(
|
||||
$request->except(['account_id'])
|
||||
+
|
||||
[
|
||||
'account_id' => auth()->user()->account_id,
|
||||
]
|
||||
);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return new PhotoResource($photo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy a photo.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $photoId
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, int $photoId)
|
||||
{
|
||||
try {
|
||||
app(DestroyPhoto::class)->execute([
|
||||
'account_id' => auth()->user()->account_id,
|
||||
'photo_id' => $photoId,
|
||||
]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
} catch (ValidationException $e) {
|
||||
return $this->respondValidatorFailed($e->validator);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return $this->respondObjectDeleted($photoId);
|
||||
}
|
||||
}
|
||||
29
app/Http/Controllers/Api/Misc/ApiCountryController.php
Normal file
29
app/Http/Controllers/Api/Misc/ApiCountryController.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Misc;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Helpers\CountriesHelper;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use App\Http\Resources\Country\Country as CountryResource;
|
||||
|
||||
class ApiCountryController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of countries.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$key = 'countries.'.App::getLocale();
|
||||
|
||||
$countries = Cache::rememberForever($key, function () {
|
||||
return CountriesHelper::getAll();
|
||||
});
|
||||
|
||||
return CountryResource::collection($countries);
|
||||
}
|
||||
}
|
||||
31
app/Http/Controllers/Api/Settings/ApiAuditLogController.php
Normal file
31
app/Http/Controllers/Api/Settings/ApiAuditLogController.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Settings;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use App\Http\Resources\AuditLog\AuditLog as AuditLogResource;
|
||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||
|
||||
class ApiAuditLogController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of the audit logs.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JsonResponse|AnonymousResourceCollection
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
try {
|
||||
$logs = auth()->user()->account->auditLogs()
|
||||
->paginate($this->getLimitPerPage());
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondInvalidQuery();
|
||||
}
|
||||
|
||||
return AuditLogResource::collection($logs);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Settings;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Settings\Term;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Settings\Compliance\Compliance as ComplianceResource;
|
||||
|
||||
class ApiComplianceController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of terms and privacy policies.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$terms = Term::orderBy('term_version', 'desc')->paginate($this->getLimitPerPage());
|
||||
|
||||
return ComplianceResource::collection($terms);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given term.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ComplianceResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $termId)
|
||||
{
|
||||
try {
|
||||
$term = Term::where('id', $termId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new ComplianceResource($term);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Settings;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Database\QueryException;
|
||||
use App\Models\Contact\ContactFieldType;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Settings\ContactFieldType\ContactFieldType as ContactFieldTypeResource;
|
||||
|
||||
class ApiContactFieldTypeController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of contact field types.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$contactFieldTypes = auth()->user()->account->contactFieldTypes()
|
||||
->paginate($this->getLimitPerPage());
|
||||
|
||||
return ContactFieldTypeResource::collection($contactFieldTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given contact field type.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ContactFieldTypeResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $contactFieldTypeId)
|
||||
{
|
||||
try {
|
||||
$contactFieldType = ContactFieldType::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactFieldTypeId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new ContactFieldTypeResource($contactFieldType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the contactfieldtype.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ContactFieldTypeResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
try {
|
||||
$contactFieldType = ContactFieldType::create(
|
||||
$request->except(['account_id'])
|
||||
+ ['account_id' => auth()->user()->account_id]
|
||||
);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
return new ContactFieldTypeResource($contactFieldType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the contact field type.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $contactFieldTypeId
|
||||
* @return ContactFieldTypeResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(Request $request, $contactFieldTypeId)
|
||||
{
|
||||
try {
|
||||
$contactFieldType = ContactFieldType::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactFieldTypeId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$isvalid = $this->validateUpdate($request);
|
||||
if ($isvalid !== true) {
|
||||
return $isvalid;
|
||||
}
|
||||
|
||||
// Update the contactfieldtype itself
|
||||
try {
|
||||
$contactFieldType->update(
|
||||
$request->only([
|
||||
'name',
|
||||
'fontawesome_icon',
|
||||
'protocol',
|
||||
'delible',
|
||||
'type',
|
||||
])
|
||||
);
|
||||
} catch (QueryException $e) {
|
||||
return $this->respondNotTheRightParameters();
|
||||
}
|
||||
|
||||
return new ContactFieldTypeResource($contactFieldType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the request for update.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse|true
|
||||
*/
|
||||
private function validateUpdate(Request $request)
|
||||
{
|
||||
// Validates basic fields to create the entry
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required|max:255',
|
||||
'fontawesome_icon' => 'nullable|max:255',
|
||||
'protocol' => 'nullable|max:255',
|
||||
'delible' => 'integer',
|
||||
'type' => 'nullable|max:255',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $this->respondValidatorFailed($validator);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an contactfieldtype.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Request $request, $contactFieldTypeId)
|
||||
{
|
||||
try {
|
||||
$contactFieldType = ContactFieldType::where('account_id', auth()->user()->account_id)
|
||||
->where('id', $contactFieldTypeId)
|
||||
->firstOrFail();
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
$contactFields = auth()->user()->account->contactFields
|
||||
->where('contact_field_type_id', $contactFieldTypeId);
|
||||
|
||||
foreach ($contactFields as $contactField) {
|
||||
$contactField->delete();
|
||||
}
|
||||
|
||||
$contactFieldType->delete();
|
||||
|
||||
return $this->respondObjectDeleted($contactFieldType->id);
|
||||
}
|
||||
}
|
||||
41
app/Http/Controllers/Api/Settings/ApiCurrencyController.php
Normal file
41
app/Http/Controllers/Api/Settings/ApiCurrencyController.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Settings;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Settings\Currency;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use App\Http\Resources\Settings\Currency\Currency as CurrencyResource;
|
||||
|
||||
class ApiCurrencyController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of currencies.
|
||||
*
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$currencies = Currency::paginate($this->getLimitPerPage());
|
||||
|
||||
return CurrencyResource::collection($currencies);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the detail of a given currency.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return CurrencyResource|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function show(Request $request, $currencyId)
|
||||
{
|
||||
try {
|
||||
$currency = Currency::findOrFail($currencyId);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
return new CurrencyResource($currency);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Statistics;
|
||||
|
||||
use App\Helpers\DateHelper;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Instance\Instance;
|
||||
use App\Models\Instance\Statistic;
|
||||
use App\Http\Controllers\Api\ApiController;
|
||||
|
||||
class ApiStatisticsController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Get the list of general, public statistics.
|
||||
*
|
||||
* @return \Illuminate\Support\Collection|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
if (config('monica.allow_statistics_through_public_api_access') == false) {
|
||||
return $this->respondNotFound();
|
||||
}
|
||||
|
||||
// Collecting statistics
|
||||
$statistic = Statistic::orderBy('created_at', 'desc')->first();
|
||||
$instance = Instance::first();
|
||||
|
||||
// Get the date of the monday of last week
|
||||
$dateMondayLastWeek = now()->subDays(7);
|
||||
$dateMondayLastWeek = $dateMondayLastWeek->startOfWeek();
|
||||
|
||||
// Get the date of the sunday of last week
|
||||
$dateSundayLastWeek = now()->subDays(7);
|
||||
$dateSundayLastWeek = $dateSundayLastWeek->endOfWeek();
|
||||
|
||||
// Get the number of users last monday
|
||||
$instanceLastMonday = Statistic::whereDate('created_at', '=', $dateMondayLastWeek->toDateString())->first();
|
||||
$instanceLastSunday = Statistic::whereDate('created_at', '=', $dateSundayLastWeek->toDateString())->first();
|
||||
|
||||
$numberNewUsers = 0;
|
||||
if ($instanceLastMonday && $instanceLastSunday) {
|
||||
$numberNewUsers = $instanceLastSunday->number_of_users - $instanceLastMonday->number_of_users;
|
||||
}
|
||||
|
||||
$statistics = collect();
|
||||
$statistics->push([
|
||||
'instance_creation_date' => DateHelper::getTimestamp($instance->created_at),
|
||||
'number_of_contacts' => ($statistic ? $statistic->number_of_contacts : 0),
|
||||
'number_of_users' => ($statistic ? $statistic->number_of_users : 0),
|
||||
'number_of_activities' => ($statistic ? $statistic->number_of_activities : 0),
|
||||
'number_of_reminders' => ($statistic ? $statistic->number_of_reminders : 0),
|
||||
'number_of_new_users_last_week' => $numberNewUsers,
|
||||
]);
|
||||
|
||||
return $statistics;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user