- commit
- 8014605
- parent
- d15bf3c
- author
- Eric Bower
- date
- 2024-07-21 11:02:27 -0400 EDT
refactor: create events within tx
3 files changed,
+92,
-27
M
cli.go
+1,
-1
1@@ -231,7 +231,7 @@ Here's how it works:
2 return fmt.Errorf("you are not authorized to delete a patchset")
3 }
4
5- err = pr.DeletePatchsetByID(patchsetID)
6+ err = pr.DeletePatchsetByID(user.ID, patchset.PatchRequestID, patchsetID)
7 if err != nil {
8 return err
9 }
M
pr.go
+89,
-26
1@@ -39,8 +39,8 @@ type GitPatchRequest interface {
2 GetPatchesByPatchsetID(prID int64) ([]*Patch, error)
3 UpdatePatchRequestStatus(prID, userID int64, status string) error
4 UpdatePatchRequestName(prID, userID int64, name string) error
5- DeletePatchsetByID(patchsetID int64) error
6- CreateEventLog(eventLog EventLog) error
7+ DeletePatchsetByID(userID, prID int64, patchsetID int64) error
8+ CreateEventLog(tx *sqlx.Tx, eventLog EventLog) error
9 GetEventLogs() ([]*EventLog, error)
10 GetEventLogsByRepoID(repoID string) ([]*EventLog, error)
11 GetEventLogsByPrID(prID int64) ([]*EventLog, error)
12@@ -297,18 +297,35 @@ func (cmd PrCmd) GetPatchRequestByID(prID int64) (*PatchRequest, error) {
13
14 // Status types: open, closed, accepted, reviewed.
15 func (cmd PrCmd) UpdatePatchRequestStatus(prID int64, userID int64, status string) error {
16- _, err := cmd.Backend.DB.Exec(
17+ tx, err := cmd.Backend.DB.Beginx()
18+ if err != nil {
19+ return err
20+ }
21+
22+ defer func() {
23+ _ = tx.Rollback()
24+ }()
25+
26+ _, err = tx.Exec(
27 "UPDATE patch_requests SET status=? WHERE id=?",
28 status,
29 prID,
30 )
31- _ = cmd.CreateEventLog(EventLog{
32+ if err != nil {
33+ return err
34+ }
35+
36+ err = cmd.CreateEventLog(tx, EventLog{
37 UserID: userID,
38 PatchRequestID: sql.NullInt64{Int64: prID},
39 Event: "pr_status_changed",
40 Data: fmt.Sprintf(`{"status":"%s"}`, status),
41 })
42- return err
43+ if err != nil {
44+ return err
45+ }
46+
47+ return tx.Commit()
48 }
49
50 func (cmd PrCmd) UpdatePatchRequestName(prID int64, userID int64, name string) error {
51@@ -316,24 +333,41 @@ func (cmd PrCmd) UpdatePatchRequestName(prID int64, userID int64, name string) e
52 return fmt.Errorf("must provide name or text in order to update patch request")
53 }
54
55- _, err := cmd.Backend.DB.Exec(
56+ tx, err := cmd.Backend.DB.Beginx()
57+ if err != nil {
58+ return err
59+ }
60+
61+ defer func() {
62+ _ = tx.Rollback()
63+ }()
64+
65+ _, err = tx.Exec(
66 "UPDATE patch_requests SET name=? WHERE id=?",
67 name,
68 prID,
69 )
70- _ = cmd.CreateEventLog(EventLog{
71+ if err != nil {
72+ return err
73+ }
74+
75+ err = cmd.CreateEventLog(tx, EventLog{
76 UserID: userID,
77 PatchRequestID: sql.NullInt64{Int64: prID},
78 Event: "pr_name_changed",
79 Data: fmt.Sprintf(`{"name":"%s"}`, name),
80 })
81- return err
82+ if err != nil {
83+ return err
84+ }
85+
86+ return tx.Commit()
87 }
88
89-func (cmd PrCmd) CreateEventLog(eventLog EventLog) error {
90+func (cmd PrCmd) CreateEventLog(tx *sqlx.Tx, eventLog EventLog) error {
91 if eventLog.RepoID == "" && eventLog.PatchRequestID.Valid {
92 var pr PatchRequest
93- err := cmd.Backend.DB.Get(
94+ err := tx.Get(
95 &pr,
96 "SELECT repo_id FROM patch_requests WHERE id=?",
97 eventLog.PatchRequestID,
98@@ -348,7 +382,7 @@ func (cmd PrCmd) CreateEventLog(eventLog EventLog) error {
99 eventLog.RepoID = pr.RepoID
100 }
101
102- _, err := cmd.Backend.DB.Exec(
103+ _, err := tx.Exec(
104 "INSERT INTO event_logs (user_id, repo_id, patch_request_id, patchset_id, event, data) VALUES (?, ?, ?, ?, ?, ?)",
105 eventLog.UserID,
106 eventLog.RepoID,
107@@ -471,17 +505,20 @@ func (cmd PrCmd) SubmitPatchRequest(repoID string, userID int64, patchset io.Rea
108 }
109 }
110
111- err = tx.Commit()
112- if err != nil {
113- return nil, err
114- }
115-
116- _ = cmd.CreateEventLog(EventLog{
117+ err = cmd.CreateEventLog(tx, EventLog{
118 UserID: userID,
119 PatchRequestID: sql.NullInt64{Int64: prID},
120 PatchsetID: sql.NullInt64{Int64: patchsetID},
121 Event: "pr_created",
122 })
123+ if err != nil {
124+ return nil, err
125+ }
126+
127+ err = tx.Commit()
128+ if err != nil {
129+ return nil, err
130+ }
131
132 var pr PatchRequest
133 err = cmd.Backend.DB.Get(&pr, "SELECT * FROM patch_requests WHERE id=?", prID)
134@@ -533,33 +570,59 @@ func (cmd PrCmd) SubmitPatchset(prID int64, userID int64, op PatchsetOp, patchse
135 }
136 }
137
138- err = tx.Commit()
139- if err != nil {
140- return fin, err
141- }
142-
143 if len(fin) > 0 {
144 event := "pr_patchset_added"
145 if op == OpReview {
146 event = "pr_reviewed"
147 }
148
149- _ = cmd.CreateEventLog(EventLog{
150+ err = cmd.CreateEventLog(tx, EventLog{
151 UserID: userID,
152 PatchRequestID: sql.NullInt64{Int64: prID},
153 PatchsetID: sql.NullInt64{Int64: patchsetID},
154 Event: event,
155 })
156+ if err != nil {
157+ return fin, err
158+ }
159+ }
160+
161+ err = tx.Commit()
162+ if err != nil {
163+ return fin, err
164 }
165
166 return fin, err
167 }
168
169-func (cmd PrCmd) DeletePatchsetByID(patchsetID int64) error {
170- _, err := cmd.Backend.DB.Exec(
171+func (cmd PrCmd) DeletePatchsetByID(userID int64, prID int64, patchsetID int64) error {
172+ tx, err := cmd.Backend.DB.Beginx()
173+ if err != nil {
174+ return err
175+ }
176+
177+ defer func() {
178+ _ = tx.Rollback()
179+ }()
180+
181+ _, err = tx.Exec(
182 "DELETE FROM patchsets WHERE id=?", patchsetID,
183 )
184- return err
185+ if err != nil {
186+ return err
187+ }
188+
189+ err = cmd.CreateEventLog(tx, EventLog{
190+ UserID: userID,
191+ PatchRequestID: sql.NullInt64{Int64: prID},
192+ PatchsetID: sql.NullInt64{Int64: patchsetID},
193+ Event: "pr_patchset_deleted",
194+ })
195+ if err != nil {
196+ return err
197+ }
198+
199+ return tx.Commit()
200 }
201
202 func (cmd PrCmd) GetEventLogs() ([]*EventLog, error) {
+2,
-0
1@@ -29,6 +29,8 @@
2 created pr with <code>{{.FormattedPatchsetID}}</code>
3 {{else if eq .Event "pr_patchset_added"}}
4 added <code>{{.FormattedPatchsetID}}</code>
5+ {{else if eq .Event "pr_patchset_deleted"}}
6+ deleted <code>{{.FormattedPatchsetID}}</code>
7 {{else if eq .Event "pr_reviewed"}}
8 reviewed pr with <code class="pill-review">{{.FormattedPatchsetID}}</code>
9 {{else if eq .Event "pr_patchset_replaced"}}