Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/internal/db/label.go
1560 views
1
package db
2
3
import (
4
"github.com/alist-org/alist/v3/internal/model"
5
"github.com/pkg/errors"
6
"gorm.io/gorm"
7
"time"
8
)
9
10
// GetLabels Get all label from database order by id
11
func GetLabels(pageIndex, pageSize int) ([]model.Label, int64, error) {
12
labelDB := db.Model(&model.Label{})
13
var count int64
14
if err := labelDB.Count(&count).Error; err != nil {
15
return nil, 0, errors.Wrapf(err, "failed get label count")
16
}
17
var labels []model.Label
18
if err := labelDB.Order(columnName("id")).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&labels).Error; err != nil {
19
return nil, 0, errors.WithStack(err)
20
}
21
return labels, count, nil
22
}
23
24
// GetLabelById Get Label by id, used to update label usually
25
func GetLabelById(id uint) (*model.Label, error) {
26
var label model.Label
27
label.ID = id
28
if err := db.First(&label).Error; err != nil {
29
return nil, errors.WithStack(err)
30
}
31
return &label, nil
32
}
33
34
// CreateLabel just insert label to database
35
func CreateLabel(label model.Label) (uint, error) {
36
label.CreateTime = time.Now()
37
err := errors.WithStack(db.Create(&label).Error)
38
if err != nil {
39
return label.ID, errors.WithMessage(err, "failed create label in database")
40
}
41
return label.ID, nil
42
}
43
44
// UpdateLabel just update storage in database
45
func UpdateLabel(label *model.Label) (*model.Label, error) {
46
label.CreateTime = time.Now()
47
_, err := GetLabelById(label.ID)
48
if err != nil {
49
return nil, errors.WithMessage(err, "failed get old label")
50
}
51
err = errors.WithStack(db.Save(label).Error)
52
if err != nil {
53
return nil, errors.WithMessage(err, "failed create label in database")
54
}
55
return label, nil
56
}
57
58
// DeleteLabelById just delete label from database by id
59
func DeleteLabelById(id uint) error {
60
return errors.WithStack(db.Delete(&model.Label{}, id).Error)
61
}
62
63
// GetLabelByIds Get label from database order by ids
64
func GetLabelByIds(ids []uint) ([]model.Label, error) {
65
labelDB := db.Model(&model.Label{})
66
var labels []model.Label
67
if err := labelDB.Where(ids).Find(&labels).Error; err != nil {
68
return nil, errors.WithStack(err)
69
}
70
return labels, nil
71
}
72
73
// GetLabelByName Get Label by name
74
func GetLabelByName(name string) bool {
75
var label model.Label
76
result := db.Where("name = ?", name).First(&label)
77
exists := !errors.Is(result.Error, gorm.ErrRecordNotFound)
78
return exists
79
}
80
81