/
Namespace.go
68 lines (54 loc) · 1.56 KB
/
Namespace.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
package models
import (
"github.com/jinzhu/gorm"
)
// Namespace a namespace for files
type Namespace struct {
gorm.Model
Name string `gorm:"not null"`
UserID uint `gorm:"column:creator;index"`
User *User `gorm:"association_autoupdate:false;association_autocreate:false"`
}
// GetNamespaceFromString return namespace from string
func GetNamespaceFromString(ns string) *Namespace {
return &Namespace{
Name: ns,
}
}
// FindNamespace find namespace in DB
func FindNamespace(db *gorm.DB, ns string, user *User) *Namespace {
// Add username prefix if not provided
ns = user.GetNamespaceName(ns)
var namespace Namespace
err := db.Where(&Namespace{
UserID: user.ID,
}).Where("LOWER(name)=LOWER(?)", ns).Limit(1).Find(&namespace).Error
if err != nil {
return nil
}
return &namespace
}
// IsOwnedBy returns true if namespace is users
func (namespace *Namespace) IsOwnedBy(user *User) bool {
if user == nil || namespace == nil {
return false
}
return namespace.UserID == user.ID
}
// FindUserNamespaces get all namespaces for user
func FindUserNamespaces(db *gorm.DB, user *User) ([]Namespace, error) {
var namespaces []Namespace
err := db.Model(&Namespace{}).Where("creator = ?", user.ID).Find(&namespaces).Error
if err != nil {
return []Namespace{}, err
}
return namespaces, nil
}
//IsValid return true if namespace is valid
func (namespace *Namespace) IsValid() bool {
return (namespace != nil && namespace.ID > 0)
}
// Create a namespace
func (namespace *Namespace) Create(db *gorm.DB) error {
return db.Model(&Namespace{}).Create(namespace).Error
}