package store import ( "database/sql" _ "modernc.org/sqlite" ) type Store struct { db *sql.DB } func Open(dbPath string) (*Store, error) { db, err := sql.Open("sqlite", dbPath) if err != nil { return nil, err } if err := migrate(db); err != nil { db.Close() return nil, err } return &Store{db: db}, nil } func (s *Store) Close() error { return s.db.Close() } func migrate(db *sql.DB) error { schema := ` CREATE TABLE IF NOT EXISTS files ( id TEXT PRIMARY KEY, original_name TEXT NOT NULL, storage_name TEXT NOT NULL UNIQUE, dir TEXT NOT NULL CHECK (dir IN ('inbox','outbox')), size INTEGER NOT NULL, created_at INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS shares ( id TEXT PRIMARY KEY, file_id TEXT NOT NULL REFERENCES files(id) ON DELETE CASCADE, token TEXT NOT NULL UNIQUE, password_hash TEXT, expires_at INTEGER, created_at INTEGER NOT NULL, last_accessed_at INTEGER ); ` _, err := db.Exec(schema) return err }