Files
controls-web/shared-endpoint/.github/copilot-instructions.md
2026-02-17 09:29:34 -06:00

30 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LASUCA Shared Endpoint AI Guide
## Architecture
- Single PHP micro-endpoint; every request enters `public/index.php`, loads config, calls `Lasuca\SharedEndpoint\fetchLatestItems()` from `src/Database.php`, then JSON-encodes the payload.
- No frameworks or Composer setup; stick to core PHP 8+ features already in use (`strict_types`, namespaced functions, `mysqli`).
- Output contract is the canonical data feed for multiple dashboards; preserve field names (`status`, `metadata`, `items`) and the nested keys consumed by clients.
## Data access
- `fetchLatestItems()` opens a short-lived `mysqli` connection using the array returned by `config.php`; closes connections explicitly after the query.
- Query targets the `items` table ordered by `ID`; schema is assumed to expose `ID`, `Name`, `Value`, and `Timestamp`. Add columns by extending both the `SELECT` statement and the array mapping.
- Values are normalised before returning: `tagId` → int, `value`/`rounded1`/`rounded2` → float, `timestamp` stays as the DB-provided string. Keep these conversions when expanding the payload.
## Configuration & caching
- `config.php` reads environment variables (`LASUCA_DB_*`, `LASUCA_CACHE_TTL`) with sensible on-prem defaults; prefer overriding via env vars rather than editing the file.
- `LASUCA_CACHE_TTL` controls both the config cache and the HTTP `Cache-Control` header (currently hard-coded to `1` second in `public/index.php`). Align these when making caching changes.
## Response handling
- Success responses include `metadata.generatedAt` as an ISO 8601 (UTC) timestamp via `gmdate(DATE_ATOM)` and `metadata.count` from `count($items)`.
- Errors are caught in `public/index.php`: respond with HTTP 500 and a JSON body `{ "status": "error", "message": ... }`. Preserve this shape so clients can detect failure without parsing HTML.
- Use `JSON_PRETTY_PRINT` when changing serialization to keep human-readable outputs during troubleshooting.
## Local workflows
- Serve locally from the parent directory with `php -S localhost:8081 shared-endpoint/public/index.php`; this mimics production routing without extra tooling.
- Database connectivity is the only external dependency; mock or stub calls by swapping `fetchLatestItems()` for a fixture in tests or by wrapping the function in a seam.
## Extension tips
- When adding new endpoints, follow the same pattern: thin public script, shared logic in `src/` under the `Lasuca\SharedEndpoint` namespace, and configuration driven by env-aware arrays.
- Keep new helpers free of side effects beyond DB reads so downstream caching remains predictable.
- Document any new environment variables in both `config.php` comments and the top-level `README.md` so operators stay in sync.