MCPcopy Create free account
hub / github.com/fnproject/fn / InsertTrigger

Method InsertTrigger

api/datastore/sql/sql.go:784–866  ·  view source on GitHub ↗
(ctx context.Context, newTrigger *models.Trigger)

Source from the content-addressed store, hash-verified

782}
783
784func (ds *SQLStore) InsertTrigger(ctx context.Context, newTrigger *models.Trigger) (*models.Trigger, error) {
785
786 trigger := newTrigger.Clone()
787
788 trigger.CreatedAt = common.DateTime(time.Now())
789 trigger.UpdatedAt = trigger.CreatedAt
790 trigger.ID = id.New().String()
791
792 err := trigger.Validate()
793 if err != nil {
794 return nil, err
795 }
796
797 err = ds.Tx(func(tx *sqlx.Tx) error {
798 query := tx.Rebind(`SELECT 1 FROM apps WHERE id=?`)
799 r := tx.QueryRowContext(ctx, query, trigger.AppID)
800 if err := r.Scan(new(int)); err != nil {
801 if err == sql.ErrNoRows {
802 return models.ErrAppsNotFound
803 } else if err != nil {
804 return err
805 }
806 }
807
808 query = tx.Rebind(`SELECT app_id FROM fns WHERE id=?`)
809 r = tx.QueryRowContext(ctx, query, trigger.FnID)
810 var app_id string
811 if err := r.Scan(&app_id); err != nil {
812 if err == sql.ErrNoRows {
813 return models.ErrFnsNotFound
814 } else if err != nil {
815 return err
816 }
817 }
818 if app_id != trigger.AppID {
819 return models.ErrTriggerFnIDNotSameApp
820 }
821
822 query = tx.Rebind(`SELECT 1 FROM triggers WHERE app_id=? AND type=? and source=?`)
823 r = tx.QueryRowContext(ctx, query, trigger.AppID, trigger.Type, trigger.Source)
824 err := r.Scan(new(int))
825 if err == nil {
826 return models.ErrTriggerSourceExists
827 } else if err != sql.ErrNoRows {
828 return err
829 }
830
831 query = tx.Rebind(`INSERT INTO triggers (
832 id,
833 name,
834 app_id,
835 fn_id,
836 created_at,
837 updated_at,
838 type,
839 source,
840 annotations
841 )

Callers

nothing calls this directly

Calls 9

TxMethod · 0.95
DateTimeTypeAlias · 0.92
NewFunction · 0.92
NowMethod · 0.80
IsDuplicateKeyErrorMethod · 0.65
CloneMethod · 0.45
StringMethod · 0.45
ValidateMethod · 0.45
ScanMethod · 0.45

Tested by

no test coverage detected