package dao import ( "gorm.io/gorm" "videoplayer/proto" ) type File struct { gorm.Model // 存储文件名 FileStoreName string `gorm:"column:file_store_name;type:varchar(255);uniqueIndex:idx_file_name"` NeedAuth bool `gorm:"column:need_auth"` FileName string `gorm:"column:file_name"` FileSize int `gorm:"column:file_size"` FileType string `gorm:"column:file_type"` FilePath string `gorm:"column:file_path"` AuthID int `gorm:"column:auth_id"` Md5 string `gorm:"column:md5;type:varchar(255);uniqueIndex:idx_file_name"` } type FileAuth struct { gorm.Model AuthID int `gorm:"column:auth_id"` FileID int `gorm:"column:file_id"` UserFileName string `gorm:"column:user_file_name;type:varchar(255);uniqueIndex:idx_file_name"` //对于同一个文件,不同用户有不同的文件名 UploadType string `gorm:"column:upload_type"` // 上传类型: im,avatar,file,config,config为系统文件 IsPrivate int `gorm:"column:is_private"` // 是否私有,私有文件只能自己下载或者通过分享链接下载,1为私有,0为公开 ShareCode string `gorm:"column:share_code"` // 分享码,用于分享时的验证,构建分享链接 } type ConfigFile struct { gorm.Model AuthID int `gorm:"column:auth_id"` FileName string `gorm:"column:file_name"` FilePath string `gorm:"column:file_path"` } func CreateFile(fileStoreName, fileName, fileType, filePath, md5Str string, fileSize, authID int, NeedAuth bool) File { file := File{FileStoreName: fileStoreName, FileName: fileName, FileType: fileType, FilePath: filePath, FileSize: fileSize, AuthID: authID, NeedAuth: NeedAuth, Md5: md5Str} result := DB.Create(&file) if result.Error != nil { return File{} } return file } func DeleteFileByID(id, user int) bool { res := DB.Model(&File{}).Where("id = ? and auth_id = ?", id, user).Delete(&File{}) if res.Error != nil { return false } return true } func FindFileByID(id, auth_id int) File { var file File DB.Where("id = ? and auth_id = ?", id, auth_id).First(&file) return file } func FindFileByNames(fileName string, auth_id int) File { var file File DB.Where("file_name = ? and auth_id = ?", fileName, auth_id).First(&file) return file } func FindFileByName(fileName string) File { var file File DB.Where("file_store_name = ?", fileName).First(&file) return file } func FindFileByAuthID(auth_id int) []File { var files []File DB.Where("auth_id = ?", auth_id).Find(&files) return files } func UpdateFileByID(id, auth_id int, fileStoreName, fileName, fileType, filePath string, fileSize int) bool { pd := FindFileByID(id, auth_id) if pd.ID == 0 { return false } result := DB.Model(&File{}).Where("id = ? and auth_id = ?", id, auth_id).Updates(File{FileStoreName: fileStoreName, FileName: fileName, FileType: fileType, FilePath: filePath, FileSize: fileSize}) if result.Error != nil { return false } return true } func DeleteFileByAuthID(auth_id int) bool { res := DB.Model(&File{}).Where("auth_id = ?", auth_id).Delete(&File{}) if res.Error != nil { return false } return true } func DeleteFileById(id int) bool { res := DB.Model(&File{}).Where("id = ?", id).Delete(&File{}) if res.Error != nil { return false } return true } func FindFileByMd5(md5 string) File { var file File if proto.Config.SERVER_SQL_LOG { DB.Debug().Where("md5 = ?", md5).First(&file) } else { DB.Where("md5 = ?", md5).First(&file) } return file } func CreateFileAuth(authID, fileID int, userFileName, uploadType string, isPrivate int, shareCode string) FileAuth { fileAuth := FileAuth{AuthID: authID, FileID: fileID, UserFileName: userFileName, UploadType: uploadType, IsPrivate: isPrivate, ShareCode: shareCode} var result *gorm.DB if proto.Config.SERVER_SQL_LOG { result = DB.Debug().Create(&fileAuth) } else { result = DB.Create(&fileAuth) } if result.Error != nil { return FileAuth{} } return fileAuth } func CreateConfigFile(file ConfigFile) (id uint, err error) { var result *gorm.DB if proto.Config.SERVER_SQL_LOG { result = DB.Debug().Create(&file) } else { result = DB.Create(&file) } return file.ID, result.Error } func FindConfigFileByID(id int, user_id int) ConfigFile { var file ConfigFile if proto.Config.SERVER_SQL_LOG { DB.Debug().Where("id = ? and auth_id = ?", id, user_id).First(&file) } else { DB.Where("id = ? and auth_id = ?", id, user_id).First(&file) } return file } func DeleteConfigFileByID(id int) error { var res *gorm.DB if proto.Config.SERVER_SQL_LOG { res = DB.Debug().Delete(&ConfigFile{}, id) } else { res = DB.Delete(&ConfigFile{}, id) } return res.Error } func UpdateConfigFileByID(id int, file ConfigFile) error { var res *gorm.DB if proto.Config.SERVER_SQL_LOG { res = DB.Debug().Model(&ConfigFile{}).Where("id = ?", id).Updates(&file) } else { res = DB.Model(&ConfigFile{}).Where("id = ?", id).Updates(&file) } return res.Error } func FindConfigFileByAuthID(auth_id int) []ConfigFile { var files []ConfigFile if proto.Config.SERVER_SQL_LOG { DB.Debug().Where("auth_id = ?", auth_id).Find(&files) } else { DB.Where("auth_id = ?", auth_id).Find(&files) } return files }