Something went wrong. Try again.
A barebones implementation of an atproto PDS in PHP and Slim Framework 4.
pds php atproto
Something went wrong. Try again.
2.0 kB · 85 lines
PHP
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586<?php
declare(strict_types=1);
namespace App\Infrastructure\Persistence\Record;
use App\Domain\Record\Backlink;use App\Domain\Record\BacklinkRepository;use App\Infrastructure\Database\Database;use App\Infrastructure\Database\Row;
class SqliteBacklinkRepository implements BacklinkRepository{ public function __construct(private readonly Database $db) { }
/** * @return Backlink[] */ public function findByUri(string $uri): array { $rows = $this->db->fetchAll( 'SELECT * FROM backlink WHERE uri = ? ORDER BY path, link_to', [$uri] );
$result = []; foreach ($rows as $row) { $result[] = $this->hydrate($row); } return $result; }
/** * @return Backlink[] */ public function findByLinkTo(string $linkTo): array { $rows = $this->db->fetchAll( 'SELECT * FROM backlink WHERE link_to = ? ORDER BY uri, path', [$linkTo] );
$result = []; foreach ($rows as $row) { $result[] = $this->hydrate($row); } return $result; }
public function save(Backlink $backlink): void { $this->db->execute( 'INSERT OR IGNORE INTO backlink (uri, path, link_to) VALUES (?, ?, ?)', [ $backlink->getUri(), $backlink->getPath(), $backlink->getLinkTo(), ] ); }
public function deleteByUri(string $uri): void { $this->db->execute('DELETE FROM backlink WHERE uri = ?', [$uri]); }
public function deleteAll(): void { $this->db->pdo()->exec('DELETE FROM backlink'); }
/** * @param array<string, mixed> $row */ private function hydrate(array $row): Backlink { return new Backlink( uri: Row::str($row, 'uri'), path: Row::str($row, 'path'), linkTo: Row::str($row, 'link_to'), ); }}