# State Management

> State conventions for server-rendered JSP pages.

---

## Overview

This project does not use React/Vue state libraries or SPA stores. State should
flow through the Servlet/JSP request cycle unless a future explicit decision
changes the frontend architecture.

---

## State Categories

- Request attributes: page data, validation errors, form echoes, table rows,
  reports, and short result messages for a single render.
- Session attributes: authenticated user identity, role, permission summary,
  and short-lived flash-style messages when redirects are used.
- Database state: books, categories, readers, borrowing records,
  administrators, permissions, and logs stored in MySQL through services/DAOs.
- Form state: submitted by browser forms to Servlets and re-rendered from
  validated request attributes on failure.

---

## Rules

- Keep business state in MySQL, not hidden fields or long-lived browser state.
- Keep permission decisions server-side.
- Use redirects after successful mutations such as create/update/delete,
  borrow, return, renew, and permission changes.
- Do not add Redux, Pinia, client caches, or SPA routing state unless the
  developer explicitly introduces that stack later.

---

## Page Scripts

Small JavaScript can improve interaction, such as confirm dialogs or local form
helpers, but server-side validation and service-layer rules remain mandatory.
