schema.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import type Database from 'better-sqlite3'
  2. export function initDb(db: Database.Database) {
  3. db.exec(`
  4. CREATE TABLE IF NOT EXISTS watched_addresses (
  5. id INTEGER PRIMARY KEY AUTOINCREMENT,
  6. address TEXT NOT NULL UNIQUE,
  7. label TEXT,
  8. enabled INTEGER NOT NULL DEFAULT 1,
  9. copy_multiplier REAL,
  10. copy_max_usd REAL,
  11. created_at TEXT NOT NULL DEFAULT (datetime('now'))
  12. );
  13. CREATE TABLE IF NOT EXISTS position_mappings (
  14. id INTEGER PRIMARY KEY AUTOINCREMENT,
  15. target_address TEXT NOT NULL,
  16. target_nft_mint TEXT NOT NULL,
  17. target_personal_position TEXT,
  18. our_nft_mint TEXT,
  19. pool_id TEXT NOT NULL,
  20. tick_lower INTEGER NOT NULL,
  21. tick_upper INTEGER NOT NULL,
  22. status TEXT NOT NULL DEFAULT 'active',
  23. created_at TEXT NOT NULL DEFAULT (datetime('now')),
  24. updated_at TEXT NOT NULL DEFAULT (datetime('now')),
  25. UNIQUE(target_nft_mint)
  26. );
  27. CREATE TABLE IF NOT EXISTS copy_history (
  28. id INTEGER PRIMARY KEY AUTOINCREMENT,
  29. target_address TEXT NOT NULL,
  30. target_tx_sig TEXT NOT NULL,
  31. operation TEXT NOT NULL,
  32. target_nft_mint TEXT,
  33. our_nft_mint TEXT,
  34. our_tx_sig TEXT,
  35. pool_id TEXT,
  36. target_amount_a TEXT,
  37. target_amount_b TEXT,
  38. our_amount_a TEXT,
  39. our_amount_b TEXT,
  40. status TEXT NOT NULL DEFAULT 'pending',
  41. error_message TEXT,
  42. swap_tx_sig TEXT,
  43. created_at TEXT NOT NULL DEFAULT (datetime('now'))
  44. );
  45. CREATE TABLE IF NOT EXISTS settings (
  46. key TEXT PRIMARY KEY,
  47. value TEXT NOT NULL,
  48. updated_at TEXT NOT NULL DEFAULT (datetime('now'))
  49. );
  50. `)
  51. // Migration: add columns if they don't exist (for existing DBs)
  52. const cols = db.pragma('table_info(watched_addresses)') as { name: string }[]
  53. const colNames = new Set(cols.map((c) => c.name))
  54. if (!colNames.has('copy_multiplier')) {
  55. db.exec('ALTER TABLE watched_addresses ADD COLUMN copy_multiplier REAL')
  56. }
  57. if (!colNames.has('copy_max_usd')) {
  58. db.exec('ALTER TABLE watched_addresses ADD COLUMN copy_max_usd REAL')
  59. }
  60. if (!colNames.has('referrer_mode')) {
  61. db.exec("ALTER TABLE watched_addresses ADD COLUMN referrer_mode TEXT NOT NULL DEFAULT 'self'")
  62. }
  63. }