• Steven's avatar
    fix(postgres): handle missing PAT data gracefully and add comprehensive tests · d9e8387d
    Steven authored
    Fixes #5612, #5611
    
    Root cause: PostgreSQL's jsonb_array_elements() throws errors when the
    'tokens' key is missing or malformed, while SQLite/MySQL return NULL
    gracefully. This caused:
    - 502 errors when creating admin after v0.25.3 → v0.26.0 upgrade
    - Settings not persisting and users unable to stay logged in
    
    Changes to store/db/postgres/user_setting.go:
    - Remove strict JSONB operations from GetUserByPATHash query
    - Fetch all PERSONAL_ACCESS_TOKENS rows and filter in Go
    - Skip malformed/invalid JSON rows with continue (error recovery)
    - Match SQLite/MySQL's forgiving error handling
    
    New integration tests (store/test/user_setting_test.go):
    - TestUserSettingGetUserByPATHashNoTokensKey
    - TestUserSettingGetUserByPATHashEmptyTokensArray
    - TestUserSettingGetUserByPATHashWithOtherUsers
    
    New PostgreSQL-specific tests (store/db/postgres/user_setting_test.go):
    - TestGetUserByPATHashWithMissingData (comprehensive edge cases)
    - TestGetUserByPATHashPerformance (100+ users)
    - TestUpsertUserSetting (basic upsert)
    
    Test coverage:
     Missing PERSONAL_ACCESS_TOKENS key
     Empty/malformed JSON data
     Multiple users with mixed valid/invalid data
     Performance with 100+ users
     Error recovery without crashes
    
    Benefits:
    - No database migration required (TEXT column works fine)
    - Backward compatible with v0.25.3 upgrades
    - Handles missing/corrupt data gracefully
    - Consistent behavior across all database drivers
    d9e8387d
Name
Last commit
Last update
.github Loading commit data...
cmd/memos Loading commit data...
internal Loading commit data...
plugin Loading commit data...
proto Loading commit data...
scripts Loading commit data...
server Loading commit data...
store Loading commit data...
web Loading commit data...
.dockerignore Loading commit data...
.gitignore Loading commit data...
.golangci.yaml Loading commit data...
AGENTS.md Loading commit data...
CODEOWNERS Loading commit data...
LICENSE Loading commit data...
README.md Loading commit data...
SECURITY.md Loading commit data...
go.mod Loading commit data...
go.sum Loading commit data...