package models import ( "time" "gorm.io/gorm" ) // Bookmark 书签结构体 type Bookmark struct { ID int64 `json:"id" gorm:"primaryKey"` Name string `json:"name" gorm:"not null;index;size:255"` Link *string `json:"link" gorm:"type:url"` Detail *string `json:"detail" gorm:"type:text"` Description *string `json:"description" gorm:"type:text"` ParentPathID int64 `json:"parent_path_id" gorm:"index;not null;default:1"` CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"` UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"` DeletedAt gorm.DeletedAt `json:"deleted_at" gorm:"index"` } // Folder 文件夹结构体 type Folder struct { ID int64 `json:"id" gorm:"primaryKey"` Name string `json:"name" gorm:"not null;index;size:255"` ParentPathID int64 `json:"parent_path_id" gorm:"index;not null;default:1"` CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"` UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"` DeletedAt gorm.DeletedAt `json:"deleted_at" gorm:"index"` } // IsValidParent 检查父文件夹ID是否有效 func (f *Folder) IsValidParent(db *gorm.DB, parentID int64) bool { // 检查父文件夹是否存在且未被删除 if err := db.Where("id = ?", parentID).First(&Folder{}).Error; err != nil { return false } // 防止循环引用(不能将文件夹设置为自己的子文件夹) if parentID == f.ID { return false } return true } // IsValidParent 检查书签的父文件夹ID是否有效 func (b *Bookmark) IsValidParent(db *gorm.DB, parentID int64) bool { // 检查父文件夹是否存在且未被删除 if err := db.Where("id = ?", parentID).First(&Folder{}).Error; err != nil { return false } return true }