Persist template changes

This commit is contained in:
David Bomba 2023-09-22 14:46:14 +10:00
parent a764101c83
commit 2e08fe1ff6
9 changed files with 96 additions and 6 deletions

View File

@ -25,6 +25,8 @@ class DesignFactory
$design->is_active = true;
$design->is_custom = true;
$design->name = '';
$design->is_template = false;
$design->entities = '';
$design->design = new DesignBlocks();
return $design;

View File

@ -69,6 +69,17 @@ class DesignFilters extends QueryFilters
});
}
public function template(string $template = 'false'): Builder
{
if (strlen($template) == 0) {
return $this->builder;
}
$bool_val = $template == 'true' ? true : false;
return $this->builder->where('is_template', $bool_val);
}
/**
* Filter the designs by `is_custom` column.
*

View File

@ -301,7 +301,10 @@ class DesignController extends BaseController
*/
public function create(CreateDesignRequest $request)
{
$design = DesignFactory::create(auth()->user()->company()->id, auth()->user()->id);
/** @var \App\Models\User $user */
$user = auth()->user();
$design = DesignFactory::create($user->company()->id, $user->id);
return $this->itemResponse($design);
}
@ -346,7 +349,11 @@ class DesignController extends BaseController
*/
public function store(StoreDesignRequest $request)
{
$design = DesignFactory::create(auth()->user()->company()->id, auth()->user()->id);
/** @var \App\Models\User $user */
$user = auth()->user();
$design = DesignFactory::create($user->company()->id, $user->id);
$design->fill($request->all());
$design->save();

View File

@ -23,20 +23,29 @@ class StoreDesignRequest extends Request
*/
public function authorize() : bool
{
return auth()->user()->isAdmin() && auth()->user()->account->hasFeature(Account::FEATURE_API);
/** @var \App\Models\User $user */
$user = auth()->user();
return $user->isAdmin() && $user->account->hasFeature(Account::FEATURE_API);
;
}
public function rules()
{
/** @var \App\Models\User $user */
$user = auth()->user();
return [
//'name' => 'required',
'name' => 'required|unique:designs,name,null,null,company_id,'.auth()->user()->companyId(),
'name' => 'required|unique:designs,name,null,null,company_id,'.$user->companyId(),
'design' => 'required|array',
'design.header' => 'required|min:1',
'design.body' => 'required|min:1',
'design.footer' => 'required|min:1',
'design.includes' => 'required|min:1',
'is_template' => 'sometimes|boolean',
'entities' => 'sometimes|string'
];
}

View File

@ -30,7 +30,10 @@ class UpdateDesignRequest extends Request
public function rules()
{
return [];
return [
'is_template' => 'sometimes|boolean',
'entities' => 'sometimes|string'
];
}
public function prepareForValidation()

View File

@ -68,7 +68,7 @@ class Design extends BaseModel
'name',
'design',
'is_active',
// 'is_template',
'is_template',
];
public function company()

View File

@ -54,6 +54,8 @@ class DesignTransformer extends EntityTransformer
'created_at' => (int) $design->created_at,
'is_deleted' => (bool) $design->is_deleted,
'is_free' => ($design->id <= 4) ? true : false,
'is_template' => (bool) $design->is_template,
'entities' => (string) $design->entities ?: '',
];
}
}

View File

@ -13,6 +13,7 @@ return new class extends Migration
{
Schema::table('designs', function (Blueprint $table) {
$table->boolean('is_template')->default(false);
$table->text('entities')->nullable();
});
}

View File

@ -14,6 +14,7 @@ namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Design;
use Tests\MockAccountData;
use App\Factory\DesignFactory;
use App\Utils\Traits\MakesHash;
use App\Events\Design\DesignWasCreated;
use App\Events\Design\DesignWasDeleted;
@ -36,6 +37,8 @@ class DesignApiTest extends TestCase
public $id;
public $faker;
protected function setUp() :void
{
parent::setUp();
@ -49,6 +52,58 @@ class DesignApiTest extends TestCase
Model::reguard();
}
public function testDesignTemplates()
{
$design = DesignFactory::create($this->company->id, $this->user->id);
$design->is_template = true;
$design->name = 'Test Template';
$design->save();
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/designs?template=true');
$response->assertStatus(200);
$arr = $response->json();
$this->assertCount(1, $arr['data']);
}
public function testDesignTemplatesExcluded()
{
$design = DesignFactory::create($this->company->id, $this->user->id);
$design->is_template = true;
$design->name = 'Test Template';
$design->save();
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/designs?template=false');
$response->assertStatus(200);
$arr = $response->json();
$this->assertCount(11, $arr['data']);
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/designs');
$response->assertStatus(200);
$arr = $response->json();
$this->assertCount(12, $arr['data']);
}
public function testDesignPost()
{