121 lines
3.6 KiB
Go
121 lines
3.6 KiB
Go
package filicop
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type Mission struct {
|
|
Id int64 `json:"id"`
|
|
IdRequestor int64 `json:"id_requestor"`
|
|
IdVehicle *int64 `json:"id_vehicle"`
|
|
Creation time.Time `json:"creation"`
|
|
LocationFrom Point `json:"from"`
|
|
LocationTo Point `json:"to"`
|
|
}
|
|
|
|
func GetMissions() (missions []Mission, err error) {
|
|
if rows, errr := DBQuery("SELECT id_mission, id_requestor, id_vehicle, creation, location_source, location_destination FROM missions"); errr != nil {
|
|
return nil, errr
|
|
} else {
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
var m Mission
|
|
if err = rows.Scan(&m.Id, &m.IdRequestor, &m.IdVehicle, &m.Creation, &m.LocationFrom, &m.LocationTo); err != nil {
|
|
return
|
|
}
|
|
missions = append(missions, m)
|
|
}
|
|
if err = rows.Err(); err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
}
|
|
|
|
func GetMission(id int64) (m Mission, err error) {
|
|
err = DBQueryRow("SELECT id_mission, id_requestor, id_vehicle, creation, location_source,location_destination FROM missions WHERE id_requestor = ?", id).Scan(&m.Id, &m.IdRequestor, &m.IdVehicle, &m.Creation, &m.LocationFrom, &m.LocationTo)
|
|
return
|
|
}
|
|
|
|
func (r Requestor) GetMissions() (missions []Mission, err error) {
|
|
if rows, errr := DBQuery("SELECT id_mission, id_requestor, id_vehicle, creation, location_source, location_destination FROM missions WHERE id_requestor = ?", r.Id); errr != nil {
|
|
return nil, errr
|
|
} else {
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
var m Mission
|
|
if err = rows.Scan(&m.Id, &m.IdRequestor, &m.IdVehicle, &m.Creation, &m.LocationFrom, &m.LocationTo); err != nil {
|
|
return
|
|
}
|
|
missions = append(missions, m)
|
|
}
|
|
if err = rows.Err(); err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
}
|
|
|
|
func (r Requestor) GetMission(id int64) (m Mission, err error) {
|
|
err = DBQueryRow("SELECT id_mission, id_requestor, id_vehicle, creation, location_source,location_destination FROM missions WHERE id_mission = ? AND id_requestor = ?", id, r.Id).Scan(&m.Id, &m.IdRequestor, &m.IdVehicle, &m.Creation, &m.LocationFrom, &m.LocationTo)
|
|
return
|
|
}
|
|
|
|
func (r Requestor) NewMission(m Mission) (Mission, error) {
|
|
if m.IdRequestor != 0 && m.IdRequestor != r.Id {
|
|
return m, errors.New(fmt.Sprintf("Requestor ID is %d, but try to add mission as requestor %d.", m.IdRequestor, r.Id))
|
|
}
|
|
|
|
if res, err := DBExec("INSERT INTO missions (id_requestor, id_vehicle, location_source, location_destination) VALUES (?, ?, ?, ?)", r.Id, m.IdVehicle, m.LocationFrom, m.LocationTo); err != nil {
|
|
return Mission{}, err
|
|
} else if mid, err := res.LastInsertId(); err != nil {
|
|
return Mission{}, err
|
|
} else {
|
|
m.Id = mid
|
|
m.Creation = time.Now()
|
|
return m, nil
|
|
}
|
|
}
|
|
|
|
func (m Mission) Update(um Mission) (Mission, error) {
|
|
_, err := DBExec("UPDATE missions SET id_requestor = ?, creation = ?, location_source = ?, location_destination = ? WHERE id_mission = ?", um.IdRequestor, um.Creation, um.LocationFrom, um.LocationTo, m.Id)
|
|
um.Id = m.Id
|
|
return um, err
|
|
}
|
|
|
|
func (m Mission) Delete() (int64, error) {
|
|
if res, err := DBExec("DELETE FROM missions WHERE id_mission = ?", m.Id); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
func ClearMissions() (int64, error) {
|
|
if res, err := DBExec("DELETE FROM missions"); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|
|
|
|
func (r Requestor) ClearMissions() (int64, error) {
|
|
if res, err := DBExec("DELETE FROM missions WHERE id_requestor = ?", r.Id); err != nil {
|
|
return 0, err
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
return 0, err
|
|
} else {
|
|
return nb, err
|
|
}
|
|
}
|