@@ -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]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user