Receber documentos privados e locais de disponibilidade nas candidaturas
tests / ci (push) Canceled after 0s
tests / ci (push) Canceled after 0s
This commit is contained in:
@@ -79,13 +79,27 @@ class CandidateProfiles
|
||||
$data = Validator::make($input, ['version' => 'required|integer|min:0', 'name' => 'required|string|min:3|max:200', 'phone' => 'nullable|string|max:50',
|
||||
'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' => 'sometimes|array|list|max:20',
|
||||
'additional_availability.*' => 'required|array:province,district,locality',
|
||||
'additional_availability.*.province' => 'required|string|max:150',
|
||||
'additional_availability.*.district' => 'required|string|max:150',
|
||||
'additional_availability.*.locality' => 'required|string|max:150',
|
||||
'reason' => 'required|string|min:10|max:4000'])->validate();
|
||||
$previous = $this->profile($account);
|
||||
$data['additional_availability'] ??= $previous['data']['additional_availability'] ?? [];
|
||||
$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);
|
||||
if (isset($seen[$key])) {
|
||||
throw ValidationException::withMessages(['additional_availability' => 'Indique cada local de disponibilidade apenas uma vez.']);
|
||||
}
|
||||
$seen[$key] = true;
|
||||
}
|
||||
if ((int) $data['version'] !== $previous['version']) {
|
||||
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'])), JSON_THROW_ON_ERROR),
|
||||
'version' => $previous['version'] + 1, 'data' => json_encode(array_intersect_key($data, array_flip(['name', 'phone', 'summary', 'availability', 'additional_availability'])), 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