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(*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 }