269 lines
6.9 KiB
Go
269 lines
6.9 KiB
Go
package fic
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
)
|
|
|
|
type Claim struct {
|
|
Id int64 `json:"id"`
|
|
Subject string `json:"subject"`
|
|
IdTeam *int64 `json:"id_team"`
|
|
IdAssignee *int64 `json:"id_assignee"`
|
|
Creation time.Time `json:"creation"`
|
|
State string `json:"state"`
|
|
Priority string `json:"priority"`
|
|
}
|
|
|
|
func GetClaim(id int) (c Claim, err error) {
|
|
err = DBQueryRow("SELECT id_claim, subject, id_team, id_assignee, creation, state, priority FROM claims WHERE id_claim = ?", id).Scan(&c.Id, &c.Subject, &c.IdTeam, &c.IdAssignee, &c.Creation, &c.State, &c.Priority)
|
|
return
|
|
}
|
|
|
|
func GetClaims() (res []Claim, err error) {
|
|
var rows *sql.Rows
|
|
if rows, err = DBQuery("SELECT id_claim, subject, id_team, id_assignee, creation, state, priority FROM claims"); err != nil {
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
var c Claim
|
|
if err = rows.Scan(&c.Id, &c.Subject, &c.IdTeam, &c.IdAssignee, &c.Creation, &c.State, &c.Priority); err != nil {
|
|
return
|
|
}
|
|
res = append(res, c)
|
|
}
|
|
err = rows.Err()
|
|
|
|
return
|
|
}
|
|
|
|
func (t Team) GetClaims() (res []Claim, err error) {
|
|
var rows *sql.Rows
|
|
if rows, err = DBQuery("SELECT id_claim, subject, IdTeam, id_assignee, creation, state, priority FROM claims WHERE IdTeam = ?", t.Id); err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
var c Claim
|
|
if err = rows.Scan(&c.Id, &c.Subject, &c.IdTeam, &c.IdAssignee, &c.Creation, &c.State, &c.Priority); err != nil {
|
|
return
|
|
}
|
|
res = append(res, c)
|
|
}
|
|
err = rows.Err()
|
|
|
|
return
|
|
}
|
|
|
|
func NewClaim(subject string, team *Team, assignee *ClaimAssignee, priority string) (Claim, error) {
|
|
var tid *int64
|
|
if team == nil {
|
|
tid = nil
|
|
} else {
|
|
tid = &team.Id
|
|
}
|
|
|
|
var aid *int64
|
|
if assignee == nil {
|
|
aid = nil
|
|
} else {
|
|
aid = &assignee.Id
|
|
}
|
|
|
|
if res, err := DBExec("INSERT INTO claims (subject, id_team, id_assignee, creation, state, priority) VALUES (?, ?, ?, ?, ?, ?)", subject, tid, aid, time.Now(), "new", priority); err != nil {
|
|
return Claim{}, err
|
|
} else if cid, err := res.LastInsertId(); err != nil {
|
|
return Claim{}, err
|
|
} else {
|
|
return Claim{cid, subject, tid, aid, time.Now(), "new", priority}, nil
|
|
}
|
|
}
|
|
|
|
func (c Claim) GetTeam() (*Team, error) {
|
|
if c.IdTeam == nil {
|
|
return nil, nil
|
|
} else if t, err := GetTeam(int(*c.IdTeam)); err != nil {
|
|
return nil, err
|
|
} else {
|
|
return &t, nil
|
|
}
|
|
}
|
|
|
|
func (c Claim) SetTeam(t Team) {
|
|
c.IdTeam = &t.Id
|
|
}
|
|
|
|
func (c Claim) Update() (int64, error) {
|
|
if res, err := DBExec("UPDATE claims SET subject = ?, id_team = ?, id_assignee = ?, creation = ?, state = ?, priority = ? WHERE id_claim = ?", c.Subject, c.IdTeam, c.IdAssignee, c.Creation, c.State, c.Priority, c.Id); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
func (c Claim) Delete() (int64, error) {
|
|
if res, err := DBExec("DELETE FROM claims WHERE id_claim = ?", c.Id); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
func ClearClaims() (int64, error) {
|
|
if res, err := DBExec("DELETE FROM claims"); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
|
|
type ClaimDescription struct {
|
|
Id int64 `json:"id"`
|
|
IdAssignee int64 `json:"id_assignee"`
|
|
Content string `json:"content"`
|
|
Date time.Time `json:"date"`
|
|
}
|
|
|
|
func (c Claim) GetDescriptions() (res []ClaimDescription, err error) {
|
|
var rows *sql.Rows
|
|
if rows, err = DBQuery("SELECT id_description, id_assignee, content, date FROM claim_descriptions WHERE id_claim = ?", c.Id); err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
var d ClaimDescription
|
|
if err = rows.Scan(&d.Id, &d.IdAssignee, &d.Content, &d.Date); err != nil {
|
|
return
|
|
}
|
|
res = append(res, d)
|
|
}
|
|
err = rows.Err()
|
|
|
|
return
|
|
}
|
|
|
|
func (c Claim) AddDescription(content string, assignee ClaimAssignee) (ClaimDescription, error) {
|
|
if res, err := DBExec("INSERT INTO claim_descriptions (id_claim, id_assignee, content, date) VALUES (?, ?, ?, ?)", c.Id, assignee.Id, content, time.Now()); err != nil {
|
|
return ClaimDescription{}, err
|
|
} else if did, err := res.LastInsertId(); err != nil {
|
|
return ClaimDescription{}, err
|
|
} else {
|
|
return ClaimDescription{did, assignee.Id, content, time.Now()}, nil
|
|
}
|
|
}
|
|
|
|
func (d ClaimDescription) Update() (int64, error) {
|
|
if res, err := DBExec("UPDATE claim_descriptions SET id_assignee = ?, content = ?, date = ? WHERE id_description = ?", d.IdAssignee, d.Content, d.Date, d.Id); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
func (d ClaimDescription) Delete() (int64, error) {
|
|
if res, err := DBExec("DELETE FROM claim_descriptions WHERE id_description = ?", d.Id); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
|
|
type ClaimAssignee struct {
|
|
Id int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func GetAssignee(id int64) (a ClaimAssignee, err error) {
|
|
err = DBQueryRow("SELECT id_assignee, name FROM claim_assignees WHERE id_assignee = ?", id).Scan(&a.Id, &a.Name)
|
|
return
|
|
}
|
|
|
|
func GetAssignees() (res []ClaimAssignee, err error) {
|
|
var rows *sql.Rows
|
|
if rows, err = DBQuery("SELECT id_assignee, name FROM claim_assignees"); err != nil {
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
var a ClaimAssignee
|
|
if err = rows.Scan(&a.Id, &a.Name); err != nil {
|
|
return
|
|
}
|
|
res = append(res, a)
|
|
}
|
|
err = rows.Err()
|
|
|
|
return
|
|
}
|
|
|
|
func NewClaimAssignee(name string) (ClaimAssignee, error) {
|
|
if res, err := DBExec("INSERT INTO claim_assignees (name) VALUES (?)", name); err != nil {
|
|
return ClaimAssignee{}, err
|
|
} else if aid, err := res.LastInsertId(); err != nil {
|
|
return ClaimAssignee{}, err
|
|
} else {
|
|
return ClaimAssignee{aid, name}, nil
|
|
}
|
|
}
|
|
|
|
func (a ClaimAssignee) Update() (int64, error) {
|
|
if res, err := DBExec("UPDATE claim_assignees SET name = ? WHERE id_assignee = ?", a.Name, a.Id); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
func (a ClaimAssignee) Delete() (int64, error) {
|
|
if res, err := DBExec("DELETE FROM claim_assignees WHERE id_assignee = ?", a.Id); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
func ClearAssignees() (int64, error) {
|
|
if res, err := DBExec("DELETE FROM claim_assignees"); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
func (c Claim) GetAssignee() (*ClaimAssignee, error) {
|
|
if c.IdAssignee == nil {
|
|
return nil, nil
|
|
} else if a, err := GetAssignee(*c.IdAssignee); err != nil {
|
|
return nil, err
|
|
} else {
|
|
return &a, nil
|
|
}
|
|
}
|
|
|
|
func (c Claim) SetAssignee(a ClaimAssignee) {
|
|
c.IdAssignee = &a.Id
|
|
}
|