/
tickets.go
59 lines (50 loc) · 1.8 KB
/
tickets.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
Copyright 2023 Adevinta
*/
package postgresql
import (
"github.com/lib/pq"
"github.com/adevinta/vulcan-tracker/pkg/model"
)
// FindingTicket represents a relation between tickets and findings.
type FindingTicket struct {
model.FindingTicket
CreatedAt pq.NullTime `db:"created_at"`
UpdatedAt pq.NullTime `db:"updated_at"`
}
// CreateFindingTicket inserts a row in the database to store the relation between a finding, a team and a ticket.
func (db *PostgresStore) CreateFindingTicket(t model.Ticket) (model.FindingTicket, error) {
query := `
INSERT INTO finding_tickets (finding_id, team_id, url_tracker, created_at)
SELECT $1, $2, $3, now() RETURNING *
`
result := db.DB.QueryRow(query, t.FindingID, t.TeamID, t.URLTracker)
var created FindingTicket
err := result.Scan(&created.ID, &created.TeamID, &created.FindingID, &created.URLTracker, &created.CreatedAt, &created.UpdatedAt)
if err != nil {
return model.FindingTicket{}, err
}
return model.FindingTicket{
ID: created.ID,
FindingID: created.FindingID,
TeamID: created.TeamID,
URLTracker: created.URLTracker,
}, nil
}
// GetFindingTicket retrieves a row from the database that contains the link to the ticket tracker for a specific
// finding and team.
func (db *PostgresStore) GetFindingTicket(findingID, teamID string) (model.FindingTicket, error) {
var findingTicket FindingTicket
query := "SELECT * FROM finding_tickets WHERE finding_id = $1 and team_id = $2"
logQuery(db.Logger, "GetFindingTicket", query, findingID, teamID)
err := db.DB.Get(&findingTicket, query, findingID, teamID)
if err != nil {
return model.FindingTicket{}, err
}
return model.FindingTicket{
ID: findingTicket.ID,
FindingID: findingTicket.FindingID,
TeamID: findingTicket.TeamID,
URLTracker: findingTicket.URLTracker,
}, nil
}