update company profile

This commit is contained in:
merdan 2022-08-08 15:39:51 +05:00
parent d72a554164
commit 76551f4638
7 changed files with 146 additions and 89 deletions

View File

@ -3,8 +3,9 @@
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Http\Requests\BankAccountRequest;
use App\Http\Requests\ContactsRequest;
use App\Http\Requests\API\BankAccountRequest;
use App\Http\Requests\API\ContactsRequest;
use App\Http\Requests\API\DocumentRequest;
use App\Http\Resources\AccountResource;
use Illuminate\Http\Request;
@ -31,13 +32,12 @@ public function account(Request $request)
public function storeContacts(ContactsRequest $request){
$account = Account::with('profile')->find($request->user()->account_id);
$contacts = $request->only(array_keys($request->rules()));
$data['contacts'] = json_encode($request->all());
$account->fill($data)->save();
$this->account->fill(['contacts' => json_encode($contacts)]);
if(!empty($account)){
return AccountResource::make($account);
if($this->account->save()){
return AccountResource::make($this->account);
}
return response()->json([
@ -48,13 +48,11 @@ public function storeContacts(ContactsRequest $request){
public function storeBankAccount(BankAccountRequest $request){
$account = Account::with('profile')->find($request->user()->account_id);
$bank = $request->only(array_keys($request->rules()));
$this->account->fill(['bank' => json_encode($bank)]);
$data['bank'] = json_encode($request->all());
$account->fill($data)->save();
if(!empty($account)){
return AccountResource::make($account);
if($this->account->save()){
return AccountResource::make($this->account);
}
return response()->json([
@ -63,60 +61,22 @@ public function storeBankAccount(BankAccountRequest $request){
}
public function storePersonal(DocumentRequest $request){
$account = Account::with('profile')->find($request->user()->account_id);
$data['document'] = json_encode($request->all());
$account->profile()->fill($data);
$account->profile()->save();
return AccountResource::make($account);
}
public function storeProfileInfo()
public function storeProfile()
{
//Profile type using Strategy pattern
$type = config('account.'.$this->account->type.'.class');
$profileStrategy = new $type;
return $profileStrategy->updateProfileInfo($this->account->profile);
$profileStrategy->validateRequest();
}
public function storeProfileDocInfo(Request $request){
//Profile type using Strategy pattern
$type = config('account.'.$this->account->type.'.class');
$profileStrategy = new $type;
return $profileStrategy->updateProfileDocInfo($this->account->profile);
}
public function storeProfile(ProfileRequest $request){
$account = Account::with('profile')->find($request->user()->account_id);
if(!empty($account)){
if($account->type == 'business'){
$data['personal'] = $request->all();
$profile = new Business($data);
$account->profile = $profile;
$account->save;
$profile->save();
}
else{
$profile = new Company($request->all());
$account->profile = $profile;
$account->save;
$profile->save();
}
return AccountResource::make($account);
if($profile = $profileStrategy->updateProfile($this->account->profile)){
return $profile;
}
return response()->json([
'message'=> trans('app.account.not_found')
],404 );
return response()->json(['message' => trans('app.account.profile.update-error')],400);
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests\API;
use Illuminate\Foundation\Http\FormRequest;
class BusinessProfileDocRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
//
];
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Http\Requests\API;
use Illuminate\Foundation\Http\FormRequest;
class BusinessProfileRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'name' => 'required',
'surname' => 'required',
'patronomic_name' => 'required',
'date_of_birth' => 'required',
'birth_place' => 'required',
'citizenship_id' => 'required',
'registration_address' => 'required'
];
}
}

View File

@ -2,11 +2,25 @@
namespace App\ProfileTypes;
use App\Http\Requests\API\BusinessProfileDocRequest;
use App\Http\Requests\API\BusinessProfileRequest;
use App\Http\Resources\BusinessProfileResource;
use App\Models\Business;
class BusinessProfile 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
{
@ -15,15 +29,36 @@ public function create(array $data) : ProfileTypeService
return $account->fill($data);
}
public function updateProfileInfo(Business $profile) {
//todo validate request
//todo updae business profile onfo
//todo return responce
public function validateRequest()
{
$validateConfig = request('_config')['request_type'];
$this->request = $this->form[$validateConfig]::createFrom(request());
$this->request->validate( $this->request->rules());
}
public function updateProfileDocInfo(Business $profile){
//todo validate request
//todo updae business profile doc info
//todo return responce
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

@ -6,16 +6,7 @@
class CompanyProfile implements ProfileTypeService
{
protected $profile_fields = [
'name',
'short_name',
'organizational_form',
'registration_number',
'registration_date',
'state_registration_agency',
'registration_place',
'registration_address'
];
public function create(array $data) : ProfileTypeService
{
$account = new CompanyProfile();
@ -23,19 +14,16 @@ public function create(array $data) : ProfileTypeService
return $account->fill($data);
}
public function updateProfileInfo(Company $profile) {
request()->validate([
'name' => 'required',
'short_name' => 'required',
'organizational_form' => 'required',
'registration_number' => 'required',
'registration_date' => 'required',
'state_registration_agency' => 'required',
'registration_place' => 'required',
'registration_address' => 'required',
]);
public function validateRequest($form)
{
$this->request = $form::createFrom(request());
// dd($request);
$this->request->validate( $this->request->rules());
}
$profile->fill(request()->only($this->profile_fields));
public function updateProfileInfo(Company $profile)
{
//todo update company profile info
}
public function updateProfileDocInfo(Company $profile){

View File

@ -3,4 +3,5 @@
interface ProfileTypeService
{
public function create(array $data) : ProfileTypeService;
public function validateRequest();
}

View File

@ -20,7 +20,7 @@
Route::post('/forgot-password', [AuthController::class, 'sendPasswordResetLinkEmail']);
Route::post('/verify-email', [AuthController::class, 'verifyEmail']);
Route::get('/countries', [ResourceController::class, 'countries']);
// Route::post('/prof',[AccountController::class,'storeProfileInfo']);
Route::middleware(['auth.client','auth:api'])->group(function () {
/**
* Client endpoints
@ -35,7 +35,14 @@
Route::get('/',[AccountController::class, 'account']);
Route::put('contacts',[AccountController::class,'storeContacts']);
Route::put('bank',[AccountController::class,'storeBankAccount']);
Route::put('business-profile',[AccountController::class,'storeProfile']);
Route::put('business-profile',[AccountController::class,'storeProfile'])->defaults('_config',[
'request_type' => 'profile'
]);
Route::put('business-profile-doc',[AccountController::class,'storeProfile'])->defaults('_config',[
'request_type' => 'document'
]);
Route::put('company-profile',[AccountController::class,'storeProfile']);
});