Skip to content

Release 1.13.0: the visitor log finds a member without the card (Pinakes 0.9.2) - #60

Merged
fabiodalez-dev merged 1 commit into
mainfrom
feat/attendance-member-pick
Nov 6, 2026
Merged

fabiodalez-dev merged 1 commit into
mainfrom
feat/attendance-member-pick

Conversation

@fabiodalez-dev

Copy link
Copy Markdown
Owner

Release 1.13.0 (versionCode 27), paired with Pinakes 0.9.2 (Mobile API 1.11.0, fabiodalez-dev/Pinakes#525). Stacked on #59 (1.12.0); I will retarget it to main once #59 is merged.

Changes

  • Find member in the visitor log. Since Pinakes 0.9.0 the web visitor log checks in a reader who forgot the card by searching the member by name. The desk tab now has a Find member button. It opens the loan desk's borrower search (SearchController + SearchPickerSheet over GET /staff/users, at least two characters). Picking a row sends POST /staff/attendance/check-ins with user_id instead of card_code, under its own Idempotency-Key. The result card, tone and inactive-account warning are the same as for a scanned card.
  • Rows show card and e-mail only (StaffUser.toVisitorItem()). The loan desk's eligibility note, a debt block for example, has no meaning at the entrance.
  • The camera stops reading while the search is open, as with the guest sheet.
  • Errors. 404 member_not_found has its own wording in it, en, de and fr. A 422 keeps the server's text.
  • Shown only when the server says so. The button needs /health.features.staff_attendance_member_pick (new in HealthFeatures, Staff090Flags, Staff090Areas.attendanceMemberPick) and the visitor log on. A 0.9.0 or 0.9.1 server gets the 1.12.0 desk.
  • AttendanceCheckInRequest. card_code and user_id are both optional now. The app Json drops nulls, so exactly one is sent.

Tests

Staff090PatronsParsingTest gains three cases. The fixtures were captured from a real 0.9.2 server: health_092, att_checkin_member, att_member_not_found, att_member_and_card. The cases check:

  • the flag turns the area on, and the 0.9.1 health leaves it off;
  • the request bodies ({"user_id":6805}, card + branch);
  • the member visit is a welcome;
  • the error mapping, with the 422 keeping the server's text;
  • the search row has no eligibility note.

Staff090PatronsParsingTest (15), Staff090PatronsRulesTest (13), Staff090FlagsTest (8) and Staff090LibraryFormsTest (26) pass locally.

…ut the card

With Pinakes 0.9.2 (Mobile API 1.11.0) the desk tab offers Find member: the loan desk's borrower search, and a picked member is checked in with user_id under its own Idempotency-Key. Shown only when /health advertises staff_attendance_member_pick.
@coderabbitai

coderabbitai Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: cd1d11fb-6679-49cd-8a87-3293dc8b0116
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes

I reviewed the 1.13.0 release: the visitor log's new Find member check-in by user_id, its gating, and the matching models, errors, i18n and tests.

  • Member search in the desk tab: Staff090AttendanceViewModel.members is a SearchController(minLength = 2) over StaffCirculationRepository.users. It feeds a SearchPickerSheet. The button is disabled while a check-in is in flight, and while the sheet is open the debouncer is paused and onDecoded drops decodes.
  • Check-in by id: pickMember → checkIn(code = null, userId) → Staff090PatronsRepository.checkInMember. CheckInSubmission now keys on (code, userId, branchId), so a lost answer for the same member replays under the same Idempotency-Key.
  • AttendanceCheckInRequest: card_code is now optional and user_id is new. With explicitNulls = false exactly one is sent, and the encoding test checks this.
  • Gating: staff_attendance_member_pick is threaded through HealthFeatures → Staff090Flags (requires staffAttendance && circulation) → Staff090Areas.attendanceMemberPick. The 0.9.1 health fixture keeps it off.
  • Entrance rows: StaffUser.toVisitorItem() shows only the card and e-mail and leaves rows enabled, so loan eligibility (a debt block, for example) does not hide a member at the door.
  • Errors and copy: member_not_found maps to new wording in all four locales, and a 422 validation keeps the server's text. The new copy has no em dashes and the keys match across locales.

Pullfrog  | View workflow run | Using claude-opus-5-5 | 𝕏

@fabiodalez-dev
fabiodalez-dev changed the base branch from feat/same-day-handover-setting to main November 6, 2026 15:47
@fabiodalez-dev
fabiodalez-dev merged commit c7a99c8 into main Nov 6, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant