74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
package model
|
|
|
|
import (
|
|
"gorm.io/gorm"
|
|
"next-terminal/pkg/global"
|
|
"next-terminal/pkg/utils"
|
|
)
|
|
|
|
type Resource struct {
|
|
ID string `gorm:"primary_key" json:"name"`
|
|
ResourceId string `json:"resourceId"`
|
|
ResourceType string `json:"resourceType"`
|
|
UserId string `json:"userId"`
|
|
}
|
|
|
|
func (r *Resource) TableName() string {
|
|
return "resources"
|
|
}
|
|
|
|
func FindUserIdsByResourceId(resourceId string) (r []string, err error) {
|
|
db := global.DB
|
|
err = db.Table("resources").Select("user_id").Where("resource_id = ?", resourceId).Find(&r).Error
|
|
if r == nil {
|
|
r = make([]string, 0)
|
|
}
|
|
return
|
|
}
|
|
|
|
func OverwriteUserIdsByResourceId(resourceId, resourceType string, userIds []string) {
|
|
db := global.DB.Begin()
|
|
db.Where("resource_id = ?", resourceId).Delete(&Resource{})
|
|
|
|
for i := range userIds {
|
|
userId := userIds[i]
|
|
if len(userId) == 0 {
|
|
continue
|
|
}
|
|
id := utils.Sign([]string{resourceId, resourceType, userId})
|
|
resource := &Resource{
|
|
ID: id,
|
|
ResourceId: resourceId,
|
|
ResourceType: resourceType,
|
|
UserId: userId,
|
|
}
|
|
_ = db.Create(resource).Error
|
|
}
|
|
db.Commit()
|
|
}
|
|
|
|
func DeleteByUserIdAndResourceTypeAndResourceIdIn(userId, resourceType string, resourceIds []string) error {
|
|
return global.DB.Where("user_id = ? and resource_type = ? and resource_id in ?", userId, resourceType, resourceIds).Delete(&Resource{}).Error
|
|
}
|
|
|
|
func AddSharerResources(userId, resourceType string, resourceIds []string) error {
|
|
return global.DB.Transaction(func(tx *gorm.DB) (err error) {
|
|
|
|
for i := range resourceIds {
|
|
resourceId := resourceIds[i]
|
|
id := utils.Sign([]string{resourceId, resourceType, userId})
|
|
resource := &Resource{
|
|
ID: id,
|
|
ResourceId: resourceId,
|
|
ResourceType: resourceType,
|
|
UserId: userId,
|
|
}
|
|
err = tx.Create(resource).Error
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
}
|