commit de armazens
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-11-04 09:40:26 +02:00
parent e753f7a0a4
commit 63d20b10fc
245 changed files with 10847 additions and 230 deletions
+5 -1
View File
@@ -76,9 +76,12 @@ class CandidateProfiles
$sessionVersion = $account->session_version;
$account = CandidateAccount::query()->where('tenant_id', $account->tenant_id)->where('id', $account->id)->lockForUpdate()->firstOrFail();
abort_unless($account->session_version === $sessionVersion, 401);
$input = app(CandidateGeography::class)->resolve($input);
$data = Validator::make($input, ['version' => 'required|integer|min:0', 'name' => 'required|string|min:3|max:200', 'phone' => 'nullable|string|max:50',
'availability_reference' => 'sometimes|nullable|array:country,catalogue,record_id',
'summary' => 'required|string|min:10|max:5000', 'availability' => 'required|array:province,district,locality',
'availability.province' => 'required|string|max:150', 'availability.district' => 'required|string|max:150', 'availability.locality' => 'required|string|max:150',
'additional_availability_references' => 'sometimes|array|list|max:20',
'additional_availability' => 'sometimes|array|list|max:20',
'additional_availability.*' => 'required|array:province,district,locality',
'additional_availability.*.province' => 'required|string|max:150',
@@ -87,6 +90,7 @@ class CandidateProfiles
'reason' => 'required|string|min:10|max:4000'])->validate();
$previous = $this->profile($account);
$data['additional_availability'] ??= $previous['data']['additional_availability'] ?? [];
$data = app(CandidateGeography::class)->preserve($data, $previous['data']);
$seen = [];
foreach ([$data['availability'], ...$data['additional_availability']] as $location) {
$key = json_encode(array_map(fn ($part) => mb_strtolower(trim($location[$part])), ['province', 'district', 'locality']), JSON_THROW_ON_ERROR);
@@ -99,7 +103,7 @@ class CandidateProfiles
throw ValidationException::withMessages(['version' => 'O perfil mudou. Actualize e confira antes de guardar.']);
}
$id = DB::table('candidate_profile_versions')->insertGetId(['tenant_id' => $account->tenant_id, 'candidate_account_id' => $account->id,
'version' => $previous['version'] + 1, 'data' => json_encode(array_intersect_key($data, array_flip(['name', 'phone', 'summary', 'availability', 'additional_availability'])), JSON_THROW_ON_ERROR),
'version' => $previous['version'] + 1, 'data' => json_encode(array_intersect_key($data, array_flip(['name', 'phone', 'summary', 'availability', 'additional_availability', 'availability_reference', 'additional_availability_references'])), JSON_THROW_ON_ERROR),
'reason' => $data['reason'], 'created_at' => now()]);
$this->event($account, 'profile.version_created', ['profile_version_id' => $id, 'version' => $previous['version'] + 1]);
});