/
project.go
71 lines (56 loc) · 1.67 KB
/
project.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
60
61
62
63
64
65
66
67
68
69
70
71
package database
import (
"github.com/bojand/ghz/web/model"
)
// FindProjectByID gets the project by id
func (d *Database) FindProjectByID(id uint) (*model.Project, error) {
p := new(model.Project)
err := d.DB.First(p, id).Error
if err != nil {
p = nil
}
return p, err
}
// CountProjects returns the number of projects
func (d *Database) CountProjects() (uint, error) {
p := new(model.Project)
count := uint(0)
err := d.DB.Model(p).Count(&count).Error
return count, err
}
// CreateProject creates a new project
func (d *Database) CreateProject(p *model.Project) error {
return d.DB.Create(p).Error
}
// UpdateProject update a project
func (d *Database) UpdateProject(p *model.Project) error {
return d.DB.Save(p).Error
}
// DeleteProject deletas an existing project
func (d *Database) DeleteProject(p *model.Project) error {
return d.DB.Delete(p).Error
}
// UpdateProjectStatus updates the project's status
func (d *Database) UpdateProjectStatus(pid uint, status model.Status) error {
p := new(model.Project)
p.ID = pid
// use UpdateColumn to circumvent update hooks and not modify updated at time
return d.DB.Model(p).UpdateColumn("status", status).Error
}
// ListProjects lists projects using sorting
func (d *Database) ListProjects(limit, page uint, sortField, order string) ([]*model.Project, error) {
if sortField != "name" && sortField != "id" {
sortField = "id"
}
if order != "asc" && order != "desc" {
order = "desc"
}
offset := uint(0)
if page > 0 && limit > 0 {
offset = page * limit
}
orderSQL := sortField + " " + string(order)
s := make([]*model.Project, limit)
err := d.DB.Order(orderSQL).Offset(offset).Limit(limit).Find(&s).Error
return s, err
}