mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-09-24 16:05:44 +08:00
## Bug fixes - EditAccountModal: auto-generated profiles (__auto__:acc-*) are no longer hidden from the dropdown; accounts bound to their own auto profile can now see and keep the selection. - AccountResponse DTO: emit tls_fingerprint_randomized so the "randomized" badge and reshuffle affordance render on subsequent edits. ## Feature - TLS fingerprint profile list returns bound_account_count per profile, aggregated via a single grouped SQL query over accounts.extra. - Dropdowns and admin management table surface the binding count so admins can judge whether a fingerprint is shared before editing or deleting it. ## Performance - Migration 108 adds a partial + expression index on (extra->>'tls_fingerprint_profile_id') WHERE extra ? '...', enabling Index Only Scan + HashAggregate for the new query. - Extraction uses (extra->>'...')::bigint so PostgreSQL performs the cast; Go-side parsing and NullString plumbing are removed. ## Backend - AccountRepository: add CountByTLSFingerprintProfile; implement in ent repo via grouped raw SQL. - TLSFingerprintProfileService: add ProfileWithBinding + ListWithBindingCount. - Admin handler List now returns the enriched payload. - AccountResponse DTO: add tls_fingerprint_randomized (optional, omitempty). - Update all five AccountRepository test stubs for the new interface method (account_service_delete_test, gateway_multiplatform_test, gemini_multiplatform_test, ratelimit_session_window_test, server/api_contract_test). ## Frontend - TLSFingerprintProfile type: add optional bound_account_count. - EditAccountModal + CreateAccountModal: show " (N)" suffix on options with active bindings; drop the auto-profile filter. - TLSFingerprintProfilesModal admin table: new "使用中 / In use" column with amber-highlighted count. - i18n zh/en: add columns.boundAccounts. ## Compatibility - New fields are all optional (omitempty) — existing OAuth accounts and older frontends behave as before. - No data migration required; empty extra entries are ignored by index and aggregation alike.