Integrate supplied institutions by location category and type through investor dossiers
This commit is contained in:
@@ -11,13 +11,27 @@ use Illuminate\Support\Str;
|
||||
/** Packaged documentary references prepare private drafts through existing editorial authority. */
|
||||
final class FundingProgrammeReferences
|
||||
{
|
||||
/** @return array{references:array<string,mixed>,sha256:string} */
|
||||
private function package(): array
|
||||
{
|
||||
$references = [];
|
||||
$hashes = [];
|
||||
foreach (['funding-references.json', 'funding-institutions-nov2026.json'] as $file) {
|
||||
$bytes = CheckedFile::read(database_path('data/'.$file));
|
||||
$package = json_decode($bytes, true, 512, JSON_THROW_ON_ERROR);
|
||||
abort_unless($package['format'] === 'investmoz-funding-references-v1', 503);
|
||||
$references = [...$references, ...$package['references']];
|
||||
$hashes[$file] = hash('sha256', $bytes);
|
||||
}
|
||||
|
||||
return ['references' => $references, 'sha256' => hash('sha256', json_encode($hashes, JSON_THROW_ON_ERROR))];
|
||||
}
|
||||
|
||||
/** @return array<string,mixed> */
|
||||
public function preview(User $actor, string $code): array
|
||||
{
|
||||
app(FundingProgrammes::class)->guard($actor);
|
||||
$bytes = CheckedFile::read(database_path('data/funding-references.json'));
|
||||
$package = json_decode($bytes, true, 512, JSON_THROW_ON_ERROR);
|
||||
abort_unless($package['format'] === 'investmoz-funding-references-v1', 503);
|
||||
$package = $this->package();
|
||||
$reference = $package['references'][$code] ?? null;
|
||||
abort_unless(is_array($reference), 404);
|
||||
$unresolved = [];
|
||||
@@ -43,9 +57,12 @@ final class FundingProgrammeReferences
|
||||
}
|
||||
foreach ($reference['location_territory_names'] ?? [] as $index => $name) {
|
||||
$reference['draft']['locations'][$index]['territory_id'] = $resolve($name);
|
||||
if (! $reference['draft']['locations'][$index]['territory_id']) {
|
||||
$reference['draft']['locations'][$index]['evidence_status'] = 'unlocated';
|
||||
}
|
||||
}
|
||||
$plan = ['unresolved_territories' => $unresolved, 'code' => $code, 'edition' => $reference['edition'], 'draft' => $reference['draft'], 'provenance' => $reference['provenance'],
|
||||
'package_sha256' => hash('sha256', $bytes)];
|
||||
'package_sha256' => $package['sha256']];
|
||||
$plan['hash'] = hash_hmac('sha256', json_encode(Arr::sortRecursive($plan), JSON_THROW_ON_ERROR), config('app.key'));
|
||||
|
||||
return $plan;
|
||||
@@ -55,7 +72,7 @@ final class FundingProgrammeReferences
|
||||
public function choices(User $actor): array
|
||||
{
|
||||
app(FundingProgrammes::class)->guard($actor);
|
||||
$package = json_decode(CheckedFile::read(database_path('data/funding-references.json')), true, 512, JSON_THROW_ON_ERROR);
|
||||
$package = $this->package();
|
||||
$choices = [];
|
||||
foreach ($package['references'] as $code => $reference) {
|
||||
$choices[] = ['code' => $code, 'title' => $reference['draft']['title']];
|
||||
|
||||
Reference in New Issue
Block a user