diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 4369aa05512c..300212bb2fb6 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -14,7 +14,9 @@ namespace App\Http\Controllers; use App\Http\Requests\Account\CreateAccountRequest; use App\Jobs\Account\CreateAccount; use App\Models\Account; +use App\Models\CompanyUser; use App\Transformers\AccountTransformer; +use App\Transformers\CompanyUserTransformer; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; @@ -65,8 +67,11 @@ class AccountController extends BaseController { $account = CreateAccount::dispatchNow($request->all()); + + $this->entity_type = CompanyUser::class; + $this->entity_transformer = CompanyUserTransformer::class; - return $this->itemResponse($account); + return $this->listResponse($account->default_company->users); } diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php index 7ebd79990e59..0a2dc379ff5a 100644 --- a/app/Http/Controllers/CompanyController.php +++ b/app/Http/Controllers/CompanyController.php @@ -94,7 +94,7 @@ class CompanyController extends BaseController */ public function store(StoreCompanyRequest $request) { - // $this->forced_includes = ['company_user']; + $this->forced_includes = ['company_user']; $company = CreateCompany::dispatchNow($request->all(), auth()->user()->company()->account); @@ -110,10 +110,7 @@ class CompanyController extends BaseController /* * Required dependencies */ - if($user) - auth()->login($user, false); - - $user->setCompany($company); + auth()->user()->setCompany($company); /* * Create token diff --git a/app/Models/Account.php b/app/Models/Account.php index 81cff1e1319a..921884b9f454 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -53,9 +53,6 @@ class Account extends BaseModel 'discount_expires', ]; - protected $with = [ - ]; - /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ @@ -71,4 +68,14 @@ class Account extends BaseModel { return $this->belongsTo(Payment::class); } + + public function companies() + { + return $this->hasMany(Company::class); + } + + public function company_users() + { + return $this->hasMany(CompanyUser::class); + } } diff --git a/app/Models/CompanyUser.php b/app/Models/CompanyUser.php index c2987e161b84..cede911778a6 100644 --- a/app/Models/CompanyUser.php +++ b/app/Models/CompanyUser.php @@ -11,6 +11,8 @@ namespace App\Models; +use App\Models\CompanyToken; +use App\Models\User; use Illuminate\Database\Eloquent\Relations\Pivot; class CompanyUser extends Pivot @@ -33,13 +35,37 @@ class CompanyUser extends Pivot return $this->hasOne(Account::class); } - public function user() + public function user_pivot() { return $this->hasOne(User::class)->withPivot('permissions', 'settings', 'is_admin', 'is_owner', 'is_locked'); } - public function company() + public function company_pivot() { return $this->hasOne(Company::class)->withPivot('permissions', 'settings', 'is_admin', 'is_owner', 'is_locked'); } + + public function user() + { + return $this->hasOne(User::class, 'id', 'user_id'); + } + + public function company() + { + return $this->hasOne(Company::class, 'id', 'company_id'); + } + + public function token() + { + + return $this->hasOneThrough( + CompanyToken::class, + CompanyUser::class, + 'user_id', // Foreign key on CompanyUser table... + 'company_id', // Foreign key on CompanyToken table... + 'user_id', // Local key on CompanyToken table... + 'company_id' // Local key on CompanyUser table... + ); + + } } diff --git a/app/Models/User.php b/app/Models/User.php index 983684b8584c..ea1cd322f467 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -87,17 +87,6 @@ class User extends Authenticatable implements MustVerifyEmail return $this->belongsTo(Account::class); } - /** - * Returns all one company token. - * - * @return Collection - */ - public function token() - { - return $this->tokens->whereCompanyId($this->company()->id)->first(); - //return $this->hasOne(CompanyToken::class)->orderBy('id', 'ASC'); - } - /** * Returns all company tokens. * diff --git a/app/Transformers/AccountTransformer.php b/app/Transformers/AccountTransformer.php index 4a454539c005..b06bbcc10967 100644 --- a/app/Transformers/AccountTransformer.php +++ b/app/Transformers/AccountTransformer.php @@ -13,9 +13,11 @@ namespace App\Transformers; use App\Models\Account; use App\Models\Company; +use App\Models\CompanyUser; use App\Models\Payment; use App\Models\User; use App\Transformers\CompanyTransformer; +use App\Transformers\CompanyUserTransformer; use App\Transformers\UserTransformer; use App\Utils\Traits\MakesHash; @@ -33,8 +35,9 @@ class AccountTransformer extends EntityTransformer * @var array */ protected $defaultIncludes = [ - 'default_company', - 'user', + //'default_company', + //'user', + 'company_users' ]; /** @@ -42,6 +45,8 @@ class AccountTransformer extends EntityTransformer */ protected $availableIncludes = [ 'default_company', + 'company_users', + 'companies', ]; @@ -54,20 +59,34 @@ class AccountTransformer extends EntityTransformer */ public function transform(Account $account) { + return [ 'id' => $this->encodePrimaryKey($account->id), ]; + + } + + public function includeCompanyUsers(Account $account) + { + + $transformer = new CompanyUserTransformer($this->serializer); + + return $this->includeCollection($account->company_users, $transformer, CompanyUser::class); + } public function includeDefaultCompany(Account $account) { + $transformer = new CompanyTransformer($this->serializer); return $this->includeItem($account->default_company, $transformer, Company::class); + } public function includeUser(Account $account) { + $transformer = new UserTransformer($this->serializer); return $this->includeItem($account->default_company->owner(), $transformer, User::class); diff --git a/app/Transformers/CompanyTokenTransformer.php b/app/Transformers/CompanyTokenTransformer.php index 767768e1bcfe..1b1ea7151ac7 100644 --- a/app/Transformers/CompanyTokenTransformer.php +++ b/app/Transformers/CompanyTokenTransformer.php @@ -42,11 +42,11 @@ class CompanyTokenTransformer extends EntityTransformer public function transform(CompanyToken $company_token) { return [ - 'id' => $this->encodePrimaryKey($company_token->id), + // 'id' => $this->encodePrimaryKey($company_token->id), 'token' => $company_token->token, 'name' => $company_token->name, - 'user_id' => $company_token->user_id, - 'company_id' => $company_token->company_id, + // 'user_id' => $company_token->user_id, + // 'company_id' => $company_token->company_id, ]; } diff --git a/app/Transformers/CompanyUserTransformer.php b/app/Transformers/CompanyUserTransformer.php index 6450824f5e2c..0330c1c11692 100644 --- a/app/Transformers/CompanyUserTransformer.php +++ b/app/Transformers/CompanyUserTransformer.php @@ -12,8 +12,10 @@ namespace App\Transformers; use App\Models\Company; +use App\Models\CompanyToken; use App\Models\CompanyUser; use App\Models\User; +use App\Transformers\CompanyTokenTransformer; /** * @SWG\Definition(definition="CompanyUser", @SWG\Xml(name="CompanyUser")) @@ -25,6 +27,9 @@ class CompanyUserTransformer extends EntityTransformer * @var array */ protected $defaultIncludes = [ + 'company', + 'user', + 'token' ]; /** @@ -32,14 +37,14 @@ class CompanyUserTransformer extends EntityTransformer */ protected $availableIncludes = [ 'user', - 'company' + 'company', + 'token' ]; public function transform(CompanyUser $company_user) { return [ - 'id' => (int) $company_user->id, 'permissions' => $company_user->permissions, 'settings' => $company_user->settings, 'is_owner' => (bool) $company_user->is_owner, @@ -68,4 +73,13 @@ class CompanyUserTransformer extends EntityTransformer } + public function includeToken(CompanyUser $company_user) + { + + $transformer = new CompanyTokenTransformer($this->serializer); + + return $this->includeItem($company_user->token, $transformer, CompanyToken::class); + + } + } diff --git a/app/Transformers/UserTransformer.php b/app/Transformers/UserTransformer.php index 17dd5aa3d2e2..2a6bb095c9c6 100644 --- a/app/Transformers/UserTransformer.php +++ b/app/Transformers/UserTransformer.php @@ -52,8 +52,8 @@ class UserTransformer extends EntityTransformer * @var array */ protected $defaultIncludes = [ - // 'company_token', - 'token', + // 'company_token', + // 'token', ]; /** @@ -105,7 +105,7 @@ class UserTransformer extends EntityTransformer $transformer = new CompanyTokenTransformer($this->serializer); - return $this->includeItem($user->token(), $transformer, CompanyToken::class); + return $this->includeItem($user->token, $transformer, CompanyToken::class); }