Skip to content

Commit 0163778

Browse files
committed
WIP - rework repo & object api concept
1 parent 198e8ae commit 0163778

File tree

4 files changed

+60
-0
lines changed

4 files changed

+60
-0
lines changed

src/FileMakerDataApi.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
use Psr\SimpleCache\InvalidArgumentException;
1313
use Flooris\FileMakerDataApi\Api\Authentication;
1414
use Flooris\FileMakerDataApi\HttpClient\Connector;
15+
use Flooris\FileMakerDataApi\RecordRepository\FmBaseRepository;
16+
use Flooris\FileMakerDataApi\RecordRepository\FmObject;
17+
use Flooris\FileMakerDataApi\RecordRepository\FmObjectRepository;
1518
use Illuminate\Contracts\Cache\Repository as CacheRepositoryInterface;
1619

1720
class FileMakerDataApi
@@ -36,6 +39,11 @@ public function __construct(
3639
}
3740
}
3841

42+
public function repo(FmObject $fmObject)
43+
{
44+
return new FmObjectRepository($this, $fmObject);
45+
}
46+
3947
public function record($layout = null): Record
4048
{
4149
return new Record($this, $layout);

src/RecordRepository/FmBaseObject.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,6 @@ public function getPortalArray(string $fieldName): array
3535

3636
return $this->portalData->{$fieldName};
3737
}
38+
39+
public abstract function getDataArray(): array;
3840
}

src/RecordRepository/FmObject.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Flooris\FileMakerDataApi\RecordRepository;
4+
5+
abstract class FmObject
6+
{
7+
public function __construct(
8+
public readonly string $layout,
9+
public readonly string $idField,
10+
public readonly string $fmBaseObjectClass,
11+
) {
12+
}
13+
14+
public function item(object $result): FmBaseObject
15+
{
16+
return new $this->fmBaseObjectClass($result);
17+
}
18+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace Flooris\FileMakerDataApi\RecordRepository;
4+
5+
use Flooris\FileMakerDataApi\FileMakerDataApi;
6+
7+
class FmObjectRepository
8+
{
9+
private $result = null;
10+
11+
public function __construct(
12+
private readonly FileMakerDataApi $fmClient,
13+
public readonly FmObject $fmObject,
14+
) {
15+
}
16+
17+
public function find(int $id)
18+
{
19+
return $this->findMany([$this->fmObject->idField => "={$id}"])->first();
20+
}
21+
22+
public function findMany(array $findQuery, int $offset = 1, int $limit = 100, array $sort = [])
23+
{
24+
$this->result = $this->fmClient->record($this->fmObject->layout)->findRecords($findQuery, $offset, $limit, $sort);
25+
26+
if (! isset($this->result->data)) {
27+
return collect();
28+
}
29+
30+
return collect($this->result->data)->map(fn (object $dataItem) => $this->fmObject->item($dataItem)->getDataArray());
31+
}
32+
}

0 commit comments

Comments
 (0)