Company profile update api

This commit is contained in:
merdan 2022-08-09 16:53:42 +05:00
parent d6808a8a41
commit 149845e543
6 changed files with 75 additions and 88 deletions

View File

@ -4,7 +4,7 @@
use Illuminate\Foundation\Http\FormRequest;
class AccountRequest extends FormRequest
class CompanyProfileDocRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
@ -13,7 +13,7 @@ class AccountRequest extends FormRequest
*/
public function authorize()
{
return true;
return false;
}
/**

View File

@ -4,7 +4,7 @@
use Illuminate\Foundation\Http\FormRequest;
class ProfileRequest extends FormRequest
class CompanyProfileRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
@ -23,29 +23,6 @@ public function authorize()
*/
public function rules()
{
$type = $this->get('account_type');
if ($type == "business") {
$rules = $this->businessRules();
}
else{
$rules = $this->companyRules();
}
return $rules;
}
private function businessRules(){
return [
'name' => 'required',
'surname' => 'required',
'patronomic_name' => 'required',
'date_of_birth' => 'required',
'birth_place' => 'required',
'citizenship_id' => 'required',
'registration_address' => 'required'
];
}
private function companyRules(){
return [
'name' => 'required',
'short_name' => 'required',
@ -62,4 +39,5 @@ private function companyRules(){
'is_agent' => 'required'
];
}
}

View File

@ -8,57 +8,25 @@
use App\Models\Business;
class BusinessProfile implements ProfileTypeService
class BusinessProfile extends Profile implements ProfileTypeService
{
protected $fileds = [
'profile' => [],
'document' => []
];// for fields that doesn need validation
protected $request;
public $form = [
'profile' => BusinessProfileRequest::class,
'document' => BusinessProfileDocRequest::class
];
public function create(array $data) : ProfileTypeService
public function createProfile(array $data)
{
$account = new BusinessProfile();
return $account->fill($data);
return Business::create($data);
}
public function validateRequest()
{
$validateConfig = request('_config')['request_type'];
$this->request = $this->form[$validateConfig]::createFrom(request());
$this->request->validate( $this->request->rules());
public function resource($profile) : BusinessProfileResource{
return new BusinessProfileResource($profile);
}
public function updateProfile(Business $profile)
{
$config = request('_config')['request_type'];
$profileDataKeys = array_merge($this->fileds[$config],array_keys($this->request->rules()));
$profileData = request()->only($profileDataKeys);
if($profile != null)
{
$profile->fill($profileData)->save();
}
else
{
$profile = Business::create($profileData);
$account = request()->user()->account;
$profile->account()->associate($account)->save();
}
return BusinessProfileResource::make($profile);
}
}

View File

@ -2,37 +2,29 @@
namespace App\ProfileTypes;
use App\Http\Requests\API\CompanyProfileDocRequest;
use App\Http\Requests\API\CompanyProfileRequest;
use App\Http\Resources\CompanyProfileResource;
use App\Models\Company;
class CompanyProfile implements ProfileTypeService
class CompanyProfile extends Profile implements ProfileTypeService
{
protected $fileds = [
'profile' => [],
'document' => []
];// for fields that doesn need validation
public function create(array $data) : ProfileTypeService
{
$account = new CompanyProfile();
public $form = [
'profile' => CompanyProfileRequest::class,
'document' => CompanyProfileDocRequest::class
];
return $account->fill($data);
public function createProfile(array $data){
return Company::create($data);
}
public function validateRequest($form)
{
$this->request = $form::createFrom(request());
// dd($request);
$this->request->validate( $this->request->rules());
}
public function updateProfileInfo(Company $profile)
{
//todo update company profile info
}
public function updateProfileDocInfo(Company $profile){
request()->validate([
]);
//todo validate request
//todo update company profile doc info
public function resource($profile){
return new CompanyProfileResource($profile);
}
}

View File

@ -0,0 +1,50 @@
<?php
namespace App\ProfileTypes;
use App\Http\Resources\BusinessProfileResource;
use App\Models\Business;
use Illuminate\Support\Facades\Auth;
abstract class Profile
{
protected $request;
protected $fileds = [];
public $form = [];
abstract function createProfile(array $data);
abstract function resource($profile);
public function validateRequest()
{
$validateConfig = request('_config')['request_type'];
$this->request = $this->form[$validateConfig]::createFrom(request());
$this->request->validate( $this->request->rules());
}
public function updateProfile($profile)
{
$config = request('_config')['request_type'];
$profileDataKeys = array_merge($this->fileds[$config],array_keys($this->request->rules()));
$profileData = request()->only($profileDataKeys);
if($profile != null)
{
$profile->fill($profileData)->save();
}
else
{
$profile = $this->create($profileData);
$account = Auth::user()->account;
$profile->account()->associate($account)->save();
}
return $this->resource($profile);
}
}

View File

@ -2,6 +2,5 @@
namespace App\ProfileTypes;
interface ProfileTypeService
{
public function create(array $data) : ProfileTypeService;
public function validateRequest();
}