diff --git a/internal/store/channel.go b/internal/store/channel.go index 42808d5..6b53776 100644 --- a/internal/store/channel.go +++ b/internal/store/channel.go @@ -13,7 +13,7 @@ func (s *Store) CreateChannel(ctx context.Context, ch *model.Channel) error { if err != nil { return fmt.Errorf("marshal channel config: %w", err) } - query := `INSERT INTO channel (name, type, config, status) VALUES (?, ?, ?, ?)` + query := `INSERT INTO notification_channel (name, type, config, status) VALUES (?, ?, ?, ?)` result, err := s.DB.ExecContext(ctx, query, ch.Name, ch.Type, configJSON, ch.Status) if err != nil { return fmt.Errorf("create channel: %w", err) @@ -26,7 +26,7 @@ func (s *Store) CreateChannel(ctx context.Context, ch *model.Channel) error { func (s *Store) GetChannel(ctx context.Context, id int) (*model.Channel, error) { var ch model.Channel var configBytes []byte - row := s.DB.QueryRowContext(ctx, `SELECT id, name, type, config, status, created_at, updated_at FROM channel WHERE id = ?`, id) + row := s.DB.QueryRowContext(ctx, `SELECT id, name, type, config, status, created_at, updated_at FROM notification_channel WHERE id = ?`, id) if err := row.Scan(&ch.ID, &ch.Name, &ch.Type, &configBytes, &ch.Status, &ch.CreatedAt, &ch.UpdatedAt); err != nil { return nil, fmt.Errorf("get channel %d: %w", id, err) } @@ -38,7 +38,7 @@ func (s *Store) GetChannel(ctx context.Context, id int) (*model.Channel, error) func (s *Store) GetChannelByName(ctx context.Context, name string) (*model.Channel, error) { var ch model.Channel var configBytes []byte - row := s.DB.QueryRowContext(ctx, `SELECT id, name, type, config, status, created_at, updated_at FROM channel WHERE name = ?`, name) + row := s.DB.QueryRowContext(ctx, `SELECT id, name, type, config, status, created_at, updated_at FROM notification_channel WHERE name = ?`, name) if err := row.Scan(&ch.ID, &ch.Name, &ch.Type, &configBytes, &ch.Status, &ch.CreatedAt, &ch.UpdatedAt); err != nil { return nil, fmt.Errorf("get channel by name %s: %w", name, err) } @@ -48,7 +48,7 @@ func (s *Store) GetChannelByName(ctx context.Context, name string) (*model.Chann } func (s *Store) ListChannels(ctx context.Context) ([]model.Channel, error) { - rows, err := s.DB.QueryContext(ctx, `SELECT id, name, type, config, status, created_at, updated_at FROM channel ORDER BY id`) + rows, err := s.DB.QueryContext(ctx, `SELECT id, name, type, config, status, created_at, updated_at FROM notification_channel ORDER BY id`) if err != nil { return nil, fmt.Errorf("list channels: %w", err) } @@ -73,7 +73,7 @@ func (s *Store) UpdateChannel(ctx context.Context, id int, ch *model.Channel) er if err != nil { return fmt.Errorf("marshal channel config: %w", err) } - query := `UPDATE channel SET name=?, type=?, config=?, status=? WHERE id=?` + query := `UPDATE notification_channel SET name=?, type=?, config=?, status=? WHERE id=?` _, err = s.DB.ExecContext(ctx, query, ch.Name, ch.Type, configJSON, ch.Status, id) if err != nil { return fmt.Errorf("update channel %d: %w", id, err) @@ -82,7 +82,7 @@ func (s *Store) UpdateChannel(ctx context.Context, id int, ch *model.Channel) er } func (s *Store) DeleteChannel(ctx context.Context, id int) error { - _, err := s.DB.ExecContext(ctx, `DELETE FROM channel WHERE id = ?`, id) + _, err := s.DB.ExecContext(ctx, `DELETE FROM notification_channel WHERE id = ?`, id) if err != nil { return fmt.Errorf("delete channel %d: %w", id, err) } diff --git a/internal/store/message_log.go b/internal/store/message_log.go index 74bee67..42d52ce 100644 --- a/internal/store/message_log.go +++ b/internal/store/message_log.go @@ -16,7 +16,7 @@ type MessageLogFilter struct { } func (s *Store) CreateMessageLog(ctx context.Context, ml *model.MessageLog) error { - query := `INSERT INTO message_log (rule_id, channel_id, source, event, payload, content, status, retry_count) VALUES (?, ?, ?, ?, ?, ?, ?, ?)` + query := `INSERT INTO notification_message_log (rule_id, channel_id, source, event, payload, content, status, retry_count) VALUES (?, ?, ?, ?, ?, ?, ?, ?)` result, err := s.DB.ExecContext(ctx, query, ml.RuleID, ml.ChannelID, ml.Source, ml.Event, ml.Payload, ml.Content, ml.Status, ml.RetryCount) if err != nil { return fmt.Errorf("create message_log: %w", err) @@ -27,7 +27,7 @@ func (s *Store) CreateMessageLog(ctx context.Context, ml *model.MessageLog) erro } func (s *Store) UpdateMessageLog(ctx context.Context, id int64, status string, response, errMsg *string) error { - query := `UPDATE message_log SET status=?, response=?, error_msg=? WHERE id=?` + query := `UPDATE notification_message_log SET status=?, response=?, error_msg=? WHERE id=?` _, err := s.DB.ExecContext(ctx, query, status, response, errMsg, id) return err } @@ -49,7 +49,7 @@ func (s *Store) ListMessageLogs(ctx context.Context, filter MessageLogFilter) ([ } var count int - countQuery := "SELECT COUNT(*) FROM message_log " + where + countQuery := "SELECT COUNT(*) FROM notification_message_log " + where if err := s.DB.GetContext(ctx, &count, countQuery, args...); err != nil { return nil, 0, err } @@ -63,7 +63,7 @@ func (s *Store) ListMessageLogs(ctx context.Context, filter MessageLogFilter) ([ offset := (filter.Page - 1) * filter.PageSize var logs []model.MessageLog - query := "SELECT * FROM message_log " + where + " ORDER BY id DESC LIMIT ? OFFSET ?" + query := "SELECT * FROM notification_message_log " + where + " ORDER BY id DESC LIMIT ? OFFSET ?" args = append(args, filter.PageSize, offset) if err := s.DB.SelectContext(ctx, &logs, query, args...); err != nil { return nil, 0, err diff --git a/internal/store/rule.go b/internal/store/rule.go index 504b082..9d2db18 100644 --- a/internal/store/rule.go +++ b/internal/store/rule.go @@ -16,7 +16,7 @@ func (s *Store) CreateRule(ctx context.Context, r *model.Rule, channelIDs []int) } defer tx.Rollback() - query := `INSERT INTO rule (source_id, event, template_id, conditions, enabled) VALUES (?, ?, ?, ?, ?)` + query := `INSERT INTO notification_rule (source_id, event, template_id, conditions, enabled) VALUES (?, ?, ?, ?, ?)` condsJSON, err := marshalJSON(r.Conditions) if err != nil { return fmt.Errorf("marshal conditions: %w", err) @@ -29,7 +29,7 @@ func (s *Store) CreateRule(ctx context.Context, r *model.Rule, channelIDs []int) r.ID = int(id) for _, chID := range channelIDs { - _, err := tx.ExecContext(ctx, `INSERT INTO rule_channel (rule_id, channel_id, enabled) VALUES (?, ?, 1)`, r.ID, chID) + _, err := tx.ExecContext(ctx, `INSERT INTO notification_rule_channel (rule_id, channel_id, enabled) VALUES (?, ?, 1)`, r.ID, chID) if err != nil { return fmt.Errorf("add rule_channel: %w", err) } @@ -40,7 +40,7 @@ func (s *Store) CreateRule(ctx context.Context, r *model.Rule, channelIDs []int) func (s *Store) GetRule(ctx context.Context, id int) (*model.Rule, error) { var r model.Rule var condsBytes []byte - row := s.DB.QueryRowContext(ctx, `SELECT id, source_id, event, template_id, conditions, enabled, created_at, updated_at FROM rule WHERE id = ?`, id) + row := s.DB.QueryRowContext(ctx, `SELECT id, source_id, event, template_id, conditions, enabled, created_at, updated_at FROM notification_rule WHERE id = ?`, id) if err := row.Scan(&r.ID, &r.SourceID, &r.Event, &r.TemplateID, &condsBytes, &r.Enabled, &r.CreatedAt, &r.UpdatedAt); err != nil { return nil, fmt.Errorf("get rule %d: %w", id, err) } @@ -54,7 +54,7 @@ func (s *Store) GetRule(ctx context.Context, id int) (*model.Rule, error) { func (s *Store) GetRuleBySourceEvent(ctx context.Context, sourceID int, event string) (*model.Rule, error) { var r model.Rule var condsBytes []byte - query := `SELECT id, source_id, event, template_id, conditions, enabled, created_at, updated_at FROM rule WHERE source_id = ? AND event = ? AND enabled = 1` + query := `SELECT id, source_id, event, template_id, conditions, enabled, created_at, updated_at FROM notification_rule WHERE source_id = ? AND event = ? AND enabled = 1` row := s.DB.QueryRowContext(ctx, query, sourceID, event) if err := row.Scan(&r.ID, &r.SourceID, &r.Event, &r.TemplateID, &condsBytes, &r.Enabled, &r.CreatedAt, &r.UpdatedAt); err != nil { return nil, fmt.Errorf("get rule by source+event: %w", err) @@ -67,7 +67,7 @@ func (s *Store) GetRuleBySourceEvent(ctx context.Context, sourceID int, event st } func (s *Store) ListRules(ctx context.Context) ([]model.Rule, error) { - rows, err := s.DB.QueryContext(ctx, `SELECT id, source_id, event, template_id, conditions, enabled, created_at, updated_at FROM rule ORDER BY id`) + rows, err := s.DB.QueryContext(ctx, `SELECT id, source_id, event, template_id, conditions, enabled, created_at, updated_at FROM notification_rule ORDER BY id`) if err != nil { return nil, fmt.Errorf("list rules: %w", err) } @@ -86,18 +86,18 @@ func (s *Store) UpdateRule(ctx context.Context, id int, r *model.Rule, channelID if err != nil { return fmt.Errorf("marshal conditions: %w", err) } - _, err = tx.ExecContext(ctx, `UPDATE rule SET source_id=?, event=?, template_id=?, conditions=?, enabled=? WHERE id=?`, + _, err = tx.ExecContext(ctx, `UPDATE notification_rule SET source_id=?, event=?, template_id=?, conditions=?, enabled=? WHERE id=?`, r.SourceID, r.Event, r.TemplateID, condsJSON, r.Enabled, id) if err != nil { return fmt.Errorf("update rule: %w", err) } if channelIDs != nil { - if _, err := tx.ExecContext(ctx, `DELETE FROM rule_channel WHERE rule_id = ?`, id); err != nil { + if _, err := tx.ExecContext(ctx, `DELETE FROM notification_rule_channel WHERE rule_id = ?`, id); err != nil { return fmt.Errorf("delete rule channels: %w", err) } for _, chID := range channelIDs { - _, err := tx.ExecContext(ctx, `INSERT INTO rule_channel (rule_id, channel_id, enabled) VALUES (?, ?, 1)`, id, chID) + _, err := tx.ExecContext(ctx, `INSERT INTO notification_rule_channel (rule_id, channel_id, enabled) VALUES (?, ?, 1)`, id, chID) if err != nil { return fmt.Errorf("add rule_channel: %w", err) } @@ -107,7 +107,7 @@ func (s *Store) UpdateRule(ctx context.Context, id int, r *model.Rule, channelID } func (s *Store) DeleteRule(ctx context.Context, id int) error { - _, err := s.DB.ExecContext(ctx, `DELETE FROM rule WHERE id = ?`, id) + _, err := s.DB.ExecContext(ctx, `DELETE FROM notification_rule WHERE id = ?`, id) if err != nil { return fmt.Errorf("delete rule %d: %w", id, err) } @@ -119,7 +119,7 @@ func (s *Store) SetRuleEnabled(ctx context.Context, id int, enabled bool) error if enabled { v = 1 } - _, err := s.DB.ExecContext(ctx, `UPDATE rule SET enabled = ? WHERE id = ?`, v, id) + _, err := s.DB.ExecContext(ctx, `UPDATE notification_rule SET enabled = ? WHERE id = ?`, v, id) if err != nil { return fmt.Errorf("set rule enabled %d: %w", id, err) } @@ -128,7 +128,7 @@ func (s *Store) SetRuleEnabled(ctx context.Context, id int, enabled bool) error func (s *Store) GetRuleChannels(ctx context.Context, ruleID int) ([]model.RuleChannel, error) { var rcs []model.RuleChannel - err := s.DB.SelectContext(ctx, &rcs, `SELECT id, rule_id, channel_id, enabled FROM rule_channel WHERE rule_id = ? AND enabled = 1`, ruleID) + err := s.DB.SelectContext(ctx, &rcs, `SELECT id, rule_id, channel_id, enabled FROM notification_rule_channel WHERE rule_id = ? AND enabled = 1`, ruleID) if err != nil { return nil, fmt.Errorf("get rule channels: %w", err) } @@ -140,7 +140,7 @@ func (s *Store) SetRuleChannelEnabled(ctx context.Context, ruleID, channelID int if enabled { v = 1 } - _, err := s.DB.ExecContext(ctx, `UPDATE rule_channel SET enabled = ? WHERE rule_id = ? AND channel_id = ?`, v, ruleID, channelID) + _, err := s.DB.ExecContext(ctx, `UPDATE notification_rule_channel SET enabled = ? WHERE rule_id = ? AND channel_id = ?`, v, ruleID, channelID) if err != nil { return fmt.Errorf("set rule channel enabled %d/%d: %w", ruleID, channelID, err) } diff --git a/internal/store/source.go b/internal/store/source.go index 49380f7..f0760b6 100644 --- a/internal/store/source.go +++ b/internal/store/source.go @@ -17,7 +17,7 @@ func generateAPIKey() string { func (s *Store) CreateSource(ctx context.Context, src *model.Source) error { src.APIKey = generateAPIKey() - query := `INSERT INTO source (name, api_key, parse_mode, parse_pattern, status) VALUES (?, ?, ?, ?, ?)` + query := `INSERT INTO notification_source (name, api_key, parse_mode, parse_pattern, status) VALUES (?, ?, ?, ?, ?)` result, err := s.DB.ExecContext(ctx, query, src.Name, src.APIKey, src.ParseMode, src.ParsePattern, src.Status) if err != nil { return fmt.Errorf("create source: %w", err) @@ -29,7 +29,7 @@ func (s *Store) CreateSource(ctx context.Context, src *model.Source) error { func (s *Store) GetSource(ctx context.Context, id int) (*model.Source, error) { var src model.Source - err := s.DB.GetContext(ctx, &src, `SELECT * FROM source WHERE id = ?`, id) + err := s.DB.GetContext(ctx, &src, `SELECT * FROM notification_source WHERE id = ?`, id) if err != nil { return nil, fmt.Errorf("get source %d: %w", id, err) } @@ -38,7 +38,7 @@ func (s *Store) GetSource(ctx context.Context, id int) (*model.Source, error) { func (s *Store) GetSourceByAPIKey(ctx context.Context, apiKey string) (*model.Source, error) { var src model.Source - err := s.DB.GetContext(ctx, &src, `SELECT * FROM source WHERE api_key = ? AND status = 1`, apiKey) + err := s.DB.GetContext(ctx, &src, `SELECT * FROM notification_source WHERE api_key = ? AND status = 1`, apiKey) if err != nil { return nil, fmt.Errorf("get source by api_key: %w", err) } @@ -47,7 +47,7 @@ func (s *Store) GetSourceByAPIKey(ctx context.Context, apiKey string) (*model.So func (s *Store) GetSourceByName(ctx context.Context, name string) (*model.Source, error) { var src model.Source - err := s.DB.GetContext(ctx, &src, `SELECT * FROM source WHERE name = ?`, name) + err := s.DB.GetContext(ctx, &src, `SELECT * FROM notification_source WHERE name = ?`, name) if err != nil { return nil, fmt.Errorf("get source by name %s: %w", name, err) } @@ -56,7 +56,7 @@ func (s *Store) GetSourceByName(ctx context.Context, name string) (*model.Source func (s *Store) ListSources(ctx context.Context) ([]model.Source, error) { var sources []model.Source - err := s.DB.SelectContext(ctx, &sources, `SELECT * FROM source ORDER BY id`) + err := s.DB.SelectContext(ctx, &sources, `SELECT * FROM notification_source ORDER BY id`) if err != nil { return nil, fmt.Errorf("list sources: %w", err) } @@ -64,7 +64,7 @@ func (s *Store) ListSources(ctx context.Context) ([]model.Source, error) { } func (s *Store) UpdateSource(ctx context.Context, id int, src *model.Source) error { - query := `UPDATE source SET name=?, parse_mode=?, parse_pattern=?, status=? WHERE id=?` + query := `UPDATE notification_source SET name=?, parse_mode=?, parse_pattern=?, status=? WHERE id=?` _, err := s.DB.ExecContext(ctx, query, src.Name, src.ParseMode, src.ParsePattern, src.Status, id) if err != nil { return fmt.Errorf("update source %d: %w", id, err) @@ -73,7 +73,7 @@ func (s *Store) UpdateSource(ctx context.Context, id int, src *model.Source) err } func (s *Store) DeleteSource(ctx context.Context, id int) error { - _, err := s.DB.ExecContext(ctx, `DELETE FROM source WHERE id = ?`, id) + _, err := s.DB.ExecContext(ctx, `DELETE FROM notification_source WHERE id = ?`, id) if err != nil { return fmt.Errorf("delete source %d: %w", id, err) } diff --git a/internal/store/template.go b/internal/store/template.go index 5a3748c..d238164 100644 --- a/internal/store/template.go +++ b/internal/store/template.go @@ -8,7 +8,7 @@ import ( ) func (s *Store) CreateTemplate(ctx context.Context, t *model.Template) error { - query := `INSERT INTO template (name, content) VALUES (?, ?)` + query := `INSERT INTO notification_template (name, content) VALUES (?, ?)` result, err := s.DB.ExecContext(ctx, query, t.Name, t.Content) if err != nil { return fmt.Errorf("create template: %w", err) @@ -20,7 +20,7 @@ func (s *Store) CreateTemplate(ctx context.Context, t *model.Template) error { func (s *Store) GetTemplate(ctx context.Context, id int) (*model.Template, error) { var t model.Template - err := s.DB.GetContext(ctx, &t, `SELECT * FROM template WHERE id = ?`, id) + err := s.DB.GetContext(ctx, &t, `SELECT * FROM notification_template WHERE id = ?`, id) if err != nil { return nil, fmt.Errorf("get template %d: %w", id, err) } @@ -29,7 +29,7 @@ func (s *Store) GetTemplate(ctx context.Context, id int) (*model.Template, error func (s *Store) GetTemplateByName(ctx context.Context, name string) (*model.Template, error) { var t model.Template - err := s.DB.GetContext(ctx, &t, `SELECT * FROM template WHERE name = ?`, name) + err := s.DB.GetContext(ctx, &t, `SELECT * FROM notification_template WHERE name = ?`, name) if err != nil { return nil, fmt.Errorf("get template by name %s: %w", name, err) } @@ -38,7 +38,7 @@ func (s *Store) GetTemplateByName(ctx context.Context, name string) (*model.Temp func (s *Store) ListTemplates(ctx context.Context) ([]model.Template, error) { var templates []model.Template - err := s.DB.SelectContext(ctx, &templates, `SELECT * FROM template ORDER BY id`) + err := s.DB.SelectContext(ctx, &templates, `SELECT * FROM notification_template ORDER BY id`) if err != nil { return nil, fmt.Errorf("list templates: %w", err) } @@ -46,7 +46,7 @@ func (s *Store) ListTemplates(ctx context.Context) ([]model.Template, error) { } func (s *Store) UpdateTemplate(ctx context.Context, id int, t *model.Template) error { - query := `UPDATE template SET name=?, content=? WHERE id=?` + query := `UPDATE notification_template SET name=?, content=? WHERE id=?` _, err := s.DB.ExecContext(ctx, query, t.Name, t.Content, id) if err != nil { return fmt.Errorf("update template %d: %w", id, err) @@ -55,7 +55,7 @@ func (s *Store) UpdateTemplate(ctx context.Context, id int, t *model.Template) e } func (s *Store) DeleteTemplate(ctx context.Context, id int) error { - _, err := s.DB.ExecContext(ctx, `DELETE FROM template WHERE id = ?`, id) + _, err := s.DB.ExecContext(ctx, `DELETE FROM notification_template WHERE id = ?`, id) if err != nil { return fmt.Errorf("delete template %d: %w", id, err) } diff --git a/migrations/001_init.down.sql b/migrations/001_init.down.sql index e3f53ec..8f23be2 100644 --- a/migrations/001_init.down.sql +++ b/migrations/001_init.down.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS message_log; -DROP TABLE IF EXISTS rule_channel; -DROP TABLE IF EXISTS rule; -DROP TABLE IF EXISTS channel; -DROP TABLE IF EXISTS template; -DROP TABLE IF EXISTS source; +DROP TABLE IF EXISTS notification_message_log; +DROP TABLE IF EXISTS notification_rule_channel; +DROP TABLE IF EXISTS notification_rule; +DROP TABLE IF EXISTS notification_channel; +DROP TABLE IF EXISTS notification_template; +DROP TABLE IF EXISTS notification_source; diff --git a/migrations/001_init.up.sql b/migrations/001_init.up.sql index ef19e5a..2728a87 100644 --- a/migrations/001_init.up.sql +++ b/migrations/001_init.up.sql @@ -1,4 +1,4 @@ -CREATE TABLE source ( +CREATE TABLE notification_source ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(64) NOT NULL, api_key VARCHAR(128) NOT NULL, @@ -11,7 +11,7 @@ CREATE TABLE source ( UNIQUE KEY uk_api_key (api_key) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE template ( +CREATE TABLE notification_template ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(64) NOT NULL, content TEXT NOT NULL, @@ -20,7 +20,7 @@ CREATE TABLE template ( UNIQUE KEY uk_name (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE channel ( +CREATE TABLE notification_channel ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(32) NOT NULL, type VARCHAR(32) NOT NULL, @@ -31,7 +31,7 @@ CREATE TABLE channel ( UNIQUE KEY uk_name (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE rule ( +CREATE TABLE notification_rule ( id INT AUTO_INCREMENT PRIMARY KEY, source_id INT NOT NULL, event VARCHAR(64) NOT NULL, @@ -41,21 +41,21 @@ CREATE TABLE rule ( created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_source_event (source_id, event), - FOREIGN KEY (source_id) REFERENCES source(id), - FOREIGN KEY (template_id) REFERENCES template(id) + FOREIGN KEY (source_id) REFERENCES notification_source(id), + FOREIGN KEY (template_id) REFERENCES notification_template(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE rule_channel ( +CREATE TABLE notification_rule_channel ( id INT AUTO_INCREMENT PRIMARY KEY, rule_id INT NOT NULL, channel_id INT NOT NULL, enabled TINYINT NOT NULL DEFAULT 1, UNIQUE KEY uk_rule_channel (rule_id, channel_id), - FOREIGN KEY (rule_id) REFERENCES rule(id) ON DELETE CASCADE, - FOREIGN KEY (channel_id) REFERENCES channel(id) + FOREIGN KEY (rule_id) REFERENCES notification_rule(id) ON DELETE CASCADE, + FOREIGN KEY (channel_id) REFERENCES notification_channel(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE message_log ( +CREATE TABLE notification_message_log ( id BIGINT AUTO_INCREMENT PRIMARY KEY, rule_id INT NOT NULL, channel_id INT NOT NULL,