AbstractRepository
extends AbstractRepository
in package
uses
AbstractRepositoryTrait
Base class for the NHA read repositories hung off {@see \NHA\Client}. Each concrete repository groups the endpoints of one OpenAPI tag and resolves {@see \NHA\Parts\Out} parts (or raw bodies for free-form schemas).
Caching note: these repositories intentionally do NOT populate the inherited
DiscordPHP part cache ($this->cache / $this->items). NHA world state
(/world, /market, /scene, /feed, …) changes every ~2s tick, and the
server already single-flights it per tick (X-Cache-Status), so a client-side
copy would just serve stale data. Each getX() therefore performs a live
fetch. Durable, restart-surviving data (agent identity, last-known position)
belongs in StateStore; a last-known observation snapshot lives on
NHA::getCachedObservation(). The inherited fetch()/freshen()/
save()/delete() helpers are unconfigured here (no $endpoints) and reject
gracefully rather than being wired up.
Tags
Table of Contents
Properties
- $class : string
- NHA repositories return one-off `Out` parts rather than a typed collection, but the parent Discord repository constructor requires a non-null class name.
- $discord : mixed
- $nha_http : Http
- The extended HTTP client.
Methods
- __call() : mixed
- This method checks if a method with the name "__Collection__{$name}" exists within the class. If it does, it calls that method with the provided arguments.
- __construct() : mixed
- AbstractRepository constructor.
- __get() : mixed
- Exposes a small allow-list of otherwise-protected properties (`discrim`, `cache`) for read access; any other key returns null.
- clear() : void
- Clears the repository.
- create() : Part
- Builds a new, empty part.
- delete() : PromiseInterface<string|int, Part>
- Attempts to delete a part on the Discord servers.
- fetch() : PromiseInterface<string|int, Part>
- Gets a part from the repository or Discord servers.
- filter() : ExCollectionInterface
- Runs a filter callback over the repository and returns a new collection based on the response of the callback.
- find() : Part|null
- Runs a filter callback over the repository and returns the first part where the callback returns `true` when given the part.
- first() : Part|null
- Returns the first cached part.
- fresh() : PromiseInterface<string|int, Part>
- Returns a part with fresh values.
- freshen() : PromiseInterface<string|int, static>
- Freshens the repository cache.
- get() : Part|null
- Gets a part from the repository.
- getIterator() : Traversable
- Returns an iterator for the cache.
- has() : bool
- Checks if the array has an object.
- jsonSerialize() : array<string|int, mixed>
- keys() : array<string|int, int>|array<string|int, string>
- Get the keys of the items.
- last() : Part|null
- Returns the last cached part.
- offsetExists() : bool
- If the repository has an offset.
- offsetGet() : Part|null
- Gets a part from the repository.
- offsetSet() : void
- Sets a part into the repository.
- offsetUnset() : void
- Unsets an index from the repository.
- pull() : Part|mixed
- Pulls a part from the repository.
- pushItem() : self
- Pushes a single item to the repository.
- save() : PromiseInterface<string|int, Part>
- Attempts to save a part to the Discord servers.
- set() : mixed
- Sets a part in the repository.
- toArray() : array<string|int, mixed>
- Converts the weak caches to array.
- values() : array<string|int, mixed>
- Get the values of the items.
- cacheFreshen() : PromiseInterface<string|int, static>
- fetchOut() : PromiseInterface<string|int, T>
- `GET $endpoint` and hydrate the JSON body into one `$class` {@see Out} part — the shared shape of nearly every `getX()` on the concrete repositories. Methods that return a raw body, build a list of parts in a loop, or map an error to a synthetic part do that inline instead.
Properties
$class
NHA repositories return one-off `Out` parts rather than a typed collection, but the parent Discord repository constructor requires a non-null class name.
protected
string
$class
= \NHA\Parts\Out::class
$discord
protected
mixed
$discord
$nha_http
The extended HTTP client.
protected
Http
$nha_http
Client.
Methods
__call()
This method checks if a method with the name "__Collection__{$name}" exists within the class. If it does, it calls that method with the provided arguments.
public
__call(string $name, array<string|int, mixed> $arguments) : mixed
If the method does not exist, it throws a BadMethodCallException.
Previously, this class utilized parent::method to call methods from the parent class.
This was changed to use the __Collection__method naming convention to avoid conflicts
Parameters
- $name : string
-
The name of the method being called.
- $arguments : array<string|int, mixed>
-
The arguments passed to the method.
Tags
Return values
mixed —The result of the called method.
__construct()
AbstractRepository constructor.
public
__construct(NHA|Discord $discord[, array<string|int, mixed> $vars = [] ]) : mixed
Parameters
- $discord : NHA|Discord
- $vars : array<string|int, mixed> = []
-
An array of variables used for the endpoint.
__get()
Exposes a small allow-list of otherwise-protected properties (`discrim`, `cache`) for read access; any other key returns null.
public
__get(string $key) : mixed
Parameters
- $key : string
-
Property name.
clear()
Clears the repository.
public
clear() : void
Use async $repository->cache->clear()
create()
Builds a new, empty part.
public
create([array<string|int, mixed>|object $attributes = [] ][, bool $created = false ]) : Part
Parameters
- $attributes : array<string|int, mixed>|object = []
-
The attributes for the new part.
- $created : bool = false
Tags
Return values
Part —The new part.
delete()
Attempts to delete a part on the Discord servers.
public
delete(Part|string $part[, string|null $reason = null ]) : PromiseInterface<string|int, Part>
Parameters
- $part : Part|string
-
The part to delete.
- $reason : string|null = null
-
Reason for Audit Log (if supported).
Tags
Return values
PromiseInterface<string|int, Part>fetch()
Gets a part from the repository or Discord servers.
public
fetch(string $id[, bool $fresh = false ]) : PromiseInterface<string|int, Part>
Parameters
- $id : string
-
The ID to search for.
- $fresh : bool = false
-
Whether we should skip checking the cache.
Tags
Return values
PromiseInterface<string|int, Part>filter()
Runs a filter callback over the repository and returns a new collection based on the response of the callback.
public
filter(callable $callback) : ExCollectionInterface
Parameters
- $callback : callable
Tags
Return values
ExCollectionInterfacefind()
Runs a filter callback over the repository and returns the first part where the callback returns `true` when given the part.
public
find(callable $callback) : Part|null
Parameters
- $callback : callable
Return values
Part|null —null if no items returns true when called in the callback.
first()
Returns the first cached part.
public
first() : Part|null
Return values
Part|nullfresh()
Returns a part with fresh values.
public
fresh(Part $part[, array<string|int, mixed> $queryparams = [] ]) : PromiseInterface<string|int, Part>
Parameters
- $part : Part
-
The part to get fresh values.
- $queryparams : array<string|int, mixed> = []
-
Query string params to add to the request (no validation)
Tags
Return values
PromiseInterface<string|int, Part>freshen()
Freshens the repository cache.
public
freshen([array<string|int, mixed> $queryparams = [] ]) : PromiseInterface<string|int, static>
Parameters
- $queryparams : array<string|int, mixed> = []
-
Query string params to add to the request (no validation)
Tags
Return values
PromiseInterface<string|int, static>get()
Gets a part from the repository.
public
get(string $discrim, mixed $key) : Part|null
Parameters
- $discrim : string
- $key : mixed
Return values
Part|nullgetIterator()
Returns an iterator for the cache.
public
& getIterator() : Traversable
Return values
Traversablehas()
Checks if the array has an object.
public
has(string|int ...$keys) : bool
Use async $repository->cache->has()
Parameters
- $keys : string|int
Return values
booljsonSerialize()
public
jsonSerialize([bool $assoc = true ]) : array<string|int, mixed>
Parameters
- $assoc : bool = true
Tags
Return values
array<string|int, mixed>keys()
Get the keys of the items.
public
keys() : array<string|int, int>|array<string|int, string>
Return values
array<string|int, int>|array<string|int, string>last()
Returns the last cached part.
public
last() : Part|null
Return values
Part|nulloffsetExists()
If the repository has an offset.
public
offsetExists(string|int $offset) : bool
Use async $repository->cache->has()
This method is deprecated for userland code but can still be used internally within the library.
Parameters
- $offset : string|int
Return values
booloffsetGet()
Gets a part from the repository.
public
offsetGet(string|int $offset) : Part|null
Use async $repository->cacheGet() or sync $repository->get()
This method is deprecated for userland code but can still be used internally within the library.
Parameters
- $offset : string|int
Return values
Part|nulloffsetSet()
Sets a part into the repository.
public
offsetSet(string|int $offset, Part|null $value) : void
Use async $repository->cache->set()
Parameters
- $offset : string|int
- $value : Part|null
offsetUnset()
Unsets an index from the repository.
public
offsetUnset(string|int $offset) : void
Use async $repository->cache->delete()
Parameters
- $offset : string|int
pull()
Pulls a part from the repository.
public
pull(string|int $key[, mixed $default = null ]) : Part|mixed
Use async $repository->cachePull()
Parameters
- $key : string|int
- $default : mixed = null
Return values
Part|mixedpushItem()
Pushes a single item to the repository.
public
pushItem(Part $item) : self
Use async $repository->cache->set()
This method is deprecated for userland code but can still be used internally within the library.
Parameters
- $item : Part
Return values
selfsave()
Attempts to save a part to the Discord servers.
public
save(Part $part[, string|null $reason = null ]) : PromiseInterface<string|int, Part>
Use Part->save($reason) to ensure permissions are checked.
Parameters
- $part : Part
-
The part to save.
- $reason : string|null = null
-
Reason for Audit Log (if supported).
Tags
Return values
PromiseInterface<string|int, Part>set()
Sets a part in the repository.
public
set(string|int $offset, Part $value) : mixed
Parameters
- $offset : string|int
- $value : Part
toArray()
Converts the weak caches to array.
public
toArray([bool $assoc = true ]) : array<string|int, mixed>
Use jsonSerialize
Parameters
- $assoc : bool = true
Return values
array<string|int, mixed>values()
Get the values of the items.
public
values() : array<string|int, mixed>
Return values
array<string|int, mixed>cacheFreshen()
protected
cacheFreshen(object $response) : PromiseInterface<string|int, static>
Parameters
- $response : object
Return values
PromiseInterface<string|int, static>fetchOut()
`GET $endpoint` and hydrate the JSON body into one `$class` {@see Out} part — the shared shape of nearly every `getX()` on the concrete repositories. Methods that return a raw body, build a list of parts in a loop, or map an error to a synthetic part do that inline instead.
protected
fetchOut(T> $class, Endpoint|string $endpoint) : PromiseInterface<string|int, T>
Parameters
- $class : T>
-
The
Outsubclass to hydrate. - $endpoint : Endpoint|string
-
A bound Endpoint or a raw path constant.