Laravel AT Protocol Client (alpha & unstable)
1<?php
2
3namespace SocialDept\AtpClient\Client\Records;
4
5use DateTimeInterface;
6use SocialDept\AtpClient\Attributes\ScopedEndpoint;
7use SocialDept\AtpClient\Client\Requests\Request;
8use SocialDept\AtpClient\Data\Record;
9use SocialDept\AtpClient\Data\Responses\Atproto\Repo\CreateRecordResponse;
10use SocialDept\AtpClient\Data\Responses\Atproto\Repo\DeleteRecordResponse;
11use SocialDept\AtpClient\Data\StrongRef;
12use SocialDept\AtpClient\Enums\Nsid\BskyFeed;
13use SocialDept\AtpClient\Enums\Scope;
14
15class LikeRecordClient extends Request
16{
17 /**
18 * Like a post
19 *
20 * @requires transition:generic OR (rpc:com.atproto.repo.createRecord AND repo:app.bsky.feed.like?action=create)
21 */
22 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:com.atproto.repo.createRecord')]
23 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'repo:app.bsky.feed.like?action=create')]
24 public function create(
25 StrongRef $subject,
26 ?DateTimeInterface $createdAt = null
27 ): CreateRecordResponse {
28 $record = [
29 '$type' => BskyFeed::Like->value,
30 'subject' => $subject->toArray(),
31 'createdAt' => ($createdAt ?? now())->format('c'),
32 ];
33
34 return $this->atp->atproto->repo->createRecord(
35 collection: BskyFeed::Like,
36 record: $record
37 );
38 }
39
40 /**
41 * Unlike a post (delete like record)
42 *
43 * @requires transition:generic OR (rpc:com.atproto.repo.deleteRecord AND repo:app.bsky.feed.like?action=delete)
44 */
45 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:com.atproto.repo.deleteRecord')]
46 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'repo:app.bsky.feed.like?action=delete')]
47 public function delete(string $rkey): DeleteRecordResponse
48 {
49 return $this->atp->atproto->repo->deleteRecord(
50 collection: BskyFeed::Like,
51 rkey: $rkey
52 );
53 }
54
55 /**
56 * Get a like record
57 *
58 * @requires transition:generic (rpc:com.atproto.repo.getRecord)
59 */
60 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:com.atproto.repo.getRecord')]
61 public function get(string $rkey, ?string $cid = null): Record
62 {
63 $response = $this->atp->atproto->repo->getRecord(
64 repo: $this->atp->client->session()->did(),
65 collection: BskyFeed::Like,
66 rkey: $rkey,
67 cid: $cid
68 );
69
70 return Record::fromArrayRaw($response->toArray());
71 }
72}