36 lines
1.0 KiB
PHP
36 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\Crypt;
|
|
|
|
class SimulationFormDraft extends Model
|
|
{
|
|
protected $table = 'simulation_form_drafts';
|
|
|
|
protected $fillable = [
|
|
'id', 'owner_user_id', 'anonymous_token_hash', 'version_no', 'create_key_hash', 'create_payload_hash', 'snapshot_sha256',
|
|
'personal_snapshot', 'economic_snapshot', 'deleted_at',
|
|
];
|
|
|
|
protected function casts(): array
|
|
{
|
|
return ['version_no' => 'integer', 'deleted_at' => 'immutable_datetime'];
|
|
}
|
|
|
|
/** @param array<string,mixed> $snapshot */
|
|
public static function encryptSnapshot(array $snapshot): string
|
|
{
|
|
return Crypt::encryptString(json_encode($snapshot, JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE));
|
|
}
|
|
|
|
/** @return array<string,mixed> */
|
|
public static function decryptSnapshot(string $snapshot): array
|
|
{
|
|
$decoded = json_decode(Crypt::decryptString($snapshot), true, 32, JSON_THROW_ON_ERROR);
|
|
|
|
return is_array($decoded) ? $decoded : [];
|
|
}
|
|
}
|