0.15.0
Итерация 11 плана аудита: Postgres-режим — миграции, email-store, унификация времени.
Added
pgmigrations/014_agent_providers.up.sqlи016_email_accounts.up.sql— недостающие PG-миграции, синхронизированные с SQLite-версиями (BIGSERIAL, BOOLEAN, TIMESTAMPTZ, IF NOT EXISTS)- Down-миграции (
*.down.sql) для всех 20 миграций вmigrations/иpgmigrations/(40 файлов) - Email-методы в
PostgresStore:CreateEmailAccount(RETURNING id),GetEmailAccount,ListEmailAccountsByAgent,UpdateEmailAccount,DeleteEmailAccount,ListAllEnabledChannelAccounts— ранее заглушки scanPGEmailAccount/scanPGEmailAccountRowsс конвертацией TIMESTAMPTZ → RFC3339NanoconvertSQLiteToPG— schema-aware приведение типов при копировании SQLite→PG: INTEGER 0/1 → BOOLEAN, TEXT → time.Time для TIMESTAMPTZsyncSequences—SELECT setval(table_id_seq, MAX(id))после копирования данныхgetPGColumnTypes— запросinformation_schema.columnsдля определения типов PG-колонок при копировании- 30 новых тестов: конвертация типов (18 кейсов), миграции CRUD (5 тестов), совместимость времени (5 тестов), проверка наличия down-миграций
Fixed
dual.goпередавалMigrationsFSвместоPGMigrationsFSвNewPostgresStore— PG-миграции не находили файлы вpgmigrations/MigrateToPGне запускал PG-миграции перед копированием — таблицы в PG не создавалисьSQLiteStore.CreateEmailAccount: не хватало одного?в VALUES (25 колонок, 24 плейсхолдера)- SQLite
Now()/ParseTime()использовалиtime.RFC3339вместоtime.RFC3339Nano— разнобой с PG
Changed
copyTableпереписан наgetColumnNames(возвращает[]string) + schema-aware конвертацию вместо «сырого» копированияcopyAllTablesдобавленыemail_accounts,agent_providers,oauth_sessionsв порядок копирования- Удалён
splitCSV— заменён наgetColumnNames - Унифицированный формат времени
time.RFC3339Nanoв обоих хранилищах