towerops/lib
Graham McIntire a680d5ea94 refactor: split accounts.ex into cohesive submodules
Continues the extraction begun with Accounts.TOTP and Accounts.Sessions.
The context module shrinks from ~1198 to 577 lines by moving cohesive
sub-domains into dedicated submodules under lib/towerops/accounts/:

  * Consents          - grant/revoke/list user consents (+ private
                        grant_consents_sequential helper used by
                        register_user/1)
  * PolicyVersions    - policy version CRUD + reconsent detection
  * LoginHistory      - record/list/count login attempts, GDPR anonymize
  * MagicLinks        - magic-link login flow
  * Passwords         - change/update/reset + reset-instruction email
  * Emails            - change/update + update-instruction email

The Accounts module retains a defdelegate facade so existing callers
across lib/towerops_web and other contexts continue to work unchanged.

Two shared transaction helpers (update_user_and_delete_all_tokens/1 and
unwrap_transaction_result/1) are used by multiple extracted modules; they
remain in Accounts but are now public with @doc false rather than
duplicated.
2026-04-30 14:26:30 -05:00
..
mix/tasks tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
snmpkit refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
towerops refactor: split accounts.ex into cohesive submodules 2026-04-30 14:26:30 -05:00
towerops_web fix: allow Plausible analytics domain in CSP 2026-04-29 14:24:04 -05:00
snmp_lib.ex bring in snmpkit 2026-01-23 12:52:17 -06:00
snmp_mgr.ex credo fixes 2026-01-23 14:01:52 -06:00
snmpkit.ex complete overhaul of snmp engine 2026-01-30 10:41:07 -06:00
towerops.ex init 2025-12-21 11:10:43 -06:00
towerops_native.ex dialyzer: replace suppressions with real fixes where possible 2026-04-21 11:01:30 -05:00
towerops_web.ex i18n: wrap all user-facing strings in gettext() 2026-02-14 17:44:01 -06:00