| 87 | ) |
| 88 | |
| 89 | func (h *Store[H]) Save(ctx context.Context, key string, target string, commit *H) error { |
| 90 | hid := uuid.NewString() |
| 91 | ho := &Commit[H]{ |
| 92 | Id: 0, |
| 93 | UUID: hid, |
| 94 | Target: target, |
| 95 | Key: key, |
| 96 | Data: commit, |
| 97 | CreateAt: time.Now(), |
| 98 | } |
| 99 | lo := &Latest{ |
| 100 | Id: 0, |
| 101 | Target: target, |
| 102 | Key: key, |
| 103 | Latest: hid, |
| 104 | } |
| 105 | |
| 106 | return h.db.DB(ctx).Transaction(func(tx *gorm.DB) error { |
| 107 | err := tx.Table(h.commitTableName).Create(ho).Error |
| 108 | if err != nil { |
| 109 | return err |
| 110 | } |
| 111 | |
| 112 | return tx.Table(h.latestTableName).Clauses(clause.OnConflict{ |
| 113 | Columns: latestUniques, |
| 114 | UpdateAll: true, |
| 115 | }).Create(lo).Error |
| 116 | |
| 117 | }) |
| 118 | } |
| 119 | func (h *Store[H]) Latest(ctx context.Context, key string, target ...string) ([]*Commit[H], error) { |
| 120 | |
| 121 | wheres := make([]string, 0, 2) |