Maintain local ⭤ remote in sync with automatic AT Protocol parity for Laravel (alpha & unstable)
1<?php
2
3namespace SocialDept\AtpParity\Contracts;
4
5use Illuminate\Database\Eloquent\Model;
6use SocialDept\AtpSchema\Data\Data;
7
8/**
9 * Contract for bidirectional mapping between Record DTOs and Eloquent models.
10 *
11 * @template TRecord of Data
12 * @template TModel of Model
13 */
14interface RecordMapper
15{
16 /**
17 * Get the Record class this mapper handles.
18 *
19 * @return class-string<TRecord>
20 */
21 public function recordClass(): string;
22
23 /**
24 * Get the Model class this mapper handles.
25 *
26 * @return class-string<TModel>
27 */
28 public function modelClass(): string;
29
30 /**
31 * Get the lexicon NSID this mapper handles.
32 */
33 public function lexicon(): string;
34
35 /**
36 * Convert a Record DTO to an Eloquent Model.
37 *
38 * @param TRecord $record
39 * @param array{uri?: string, cid?: string, did?: string, rkey?: string} $meta AT Protocol metadata
40 * @return TModel
41 */
42 public function toModel(Data $record, array $meta = []): Model;
43
44 /**
45 * Convert an Eloquent Model to a Record DTO.
46 *
47 * @param TModel $model
48 * @return TRecord
49 */
50 public function toRecord(Model $model): Data;
51
52 /**
53 * Update an existing model with data from a record.
54 *
55 * @param TModel $model
56 * @param TRecord $record
57 * @param array{uri?: string, cid?: string, did?: string, rkey?: string} $meta
58 * @return TModel
59 */
60 public function updateModel(Model $model, Data $record, array $meta = []): Model;
61
62 /**
63 * Find or create model from record.
64 *
65 * @param TRecord $record
66 * @param array{uri?: string, cid?: string, did?: string, rkey?: string} $meta
67 * @return TModel
68 */
69 public function upsert(Data $record, array $meta = []): Model;
70
71 /**
72 * Find model by AT Protocol URI.
73 *
74 * @return TModel|null
75 */
76 public function findByUri(string $uri): ?Model;
77
78 /**
79 * Delete model by AT Protocol URI.
80 */
81 public function deleteByUri(string $uri): bool;
82}