mirror of
https://github.com/wgh136/nysoure.git
synced 2025-09-27 12:17:24 +00:00
Add new file activity.
This commit is contained in:
@@ -29,6 +29,15 @@ func AddNewCommentActivity(userID, commentID uint) error {
|
||||
return db.Create(activity).Error
|
||||
}
|
||||
|
||||
func AddNewFileActivity(userID, fileID uint) error {
|
||||
activity := &model.Activity{
|
||||
UserID: userID,
|
||||
Type: model.ActivityTypeNewFile,
|
||||
RefID: fileID,
|
||||
}
|
||||
return db.Create(activity).Error
|
||||
}
|
||||
|
||||
func DeleteResourceActivity(resourceID uint) error {
|
||||
return db.Where("ref_id = ? AND (type = ? OR type = ?)", resourceID, model.ActivityTypeNewResource, model.ActivityTypeUpdateResource).Delete(&model.Activity{}).Error
|
||||
}
|
||||
|
@@ -106,6 +106,8 @@ func CreateFile(filename string, description string, resourceID uint, storageID
|
||||
return nil, err
|
||||
}
|
||||
|
||||
_ = AddNewFileActivity(userID, f.ID)
|
||||
|
||||
return f, nil
|
||||
}
|
||||
|
||||
@@ -120,6 +122,17 @@ func GetFile(id string) (*model.File, error) {
|
||||
return f, nil
|
||||
}
|
||||
|
||||
func GetFileByID(id uint) (*model.File, error) {
|
||||
f := &model.File{}
|
||||
if err := db.Preload("Storage").Where("id = ?", id).First(f).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, model.NewNotFoundError("file not found")
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return f, nil
|
||||
}
|
||||
|
||||
func DeleteFile(id string) error {
|
||||
f := &model.File{}
|
||||
if err := db.Where("uuid = ?", id).First(f).Error; err != nil {
|
||||
@@ -130,8 +143,21 @@ func DeleteFile(id string) error {
|
||||
if err := tx.Delete(f).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Model(&model.User{}).Where("id = ?", f.UserID).
|
||||
UpdateColumn("files_count", gorm.Expr("files_count - ?", 1)).Error
|
||||
if err := tx.
|
||||
Model(&model.User{}).
|
||||
Where("id = ?", f.UserID).
|
||||
UpdateColumn("files_count", gorm.Expr("files_count - ?", 1)).
|
||||
Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.
|
||||
Model(&model.Activity{}).
|
||||
Where("type = ? AND ref_id = ?", model.ActivityTypeNewFile, f.ID).
|
||||
Delete(&model.Activity{}).
|
||||
Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -122,6 +122,9 @@ func DeleteResource(id uint) error {
|
||||
}
|
||||
return err
|
||||
}
|
||||
if err := tx.Unscoped().Model(&model.File{}).Where("resource_id = ?", id).Delete(&model.File{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Model(&model.User{}).Where("id = ?", r.UserID).Update("resources_count", gorm.Expr("resources_count - ?", 1)).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -540,7 +543,10 @@ func RandomResource() (model.Resource, error) {
|
||||
return model.Resource{}, err
|
||||
}
|
||||
for {
|
||||
randomID := uint(1 + rand.Int63n(maxID-1))
|
||||
randomID := uint(1)
|
||||
if maxID > 1 {
|
||||
randomID = uint(1 + rand.Int63n(maxID-1))
|
||||
}
|
||||
var resource model.Resource
|
||||
if err := db.
|
||||
Preload("User").
|
||||
|
@@ -13,6 +13,7 @@ const (
|
||||
ActivityTypeNewResource
|
||||
ActivityTypeUpdateResource
|
||||
ActivityTypeNewComment
|
||||
ActivityTypeNewFile
|
||||
)
|
||||
|
||||
type Activity struct {
|
||||
@@ -29,4 +30,5 @@ type ActivityView struct {
|
||||
User UserView `json:"user"`
|
||||
Comment *CommentView `json:"comment,omitempty"`
|
||||
Resource *ResourceView `json:"resource,omitempty"`
|
||||
File *FileView `json:"file,omitempty"`
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@ func GetActivityList(page int) ([]model.ActivityView, int, error) {
|
||||
}
|
||||
var comment *model.CommentView
|
||||
var resource *model.ResourceView
|
||||
var file *model.FileView
|
||||
switch activity.Type {
|
||||
case model.ActivityTypeNewComment:
|
||||
c, err := dao.GetCommentByID(activity.RefID)
|
||||
@@ -37,6 +38,19 @@ func GetActivityList(page int) ([]model.ActivityView, int, error) {
|
||||
}
|
||||
rv := r.ToView()
|
||||
resource = &rv
|
||||
case model.ActivityTypeNewFile:
|
||||
f, err := dao.GetFileByID(activity.RefID)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
fv := f.ToView()
|
||||
file = fv
|
||||
r, err := dao.GetResourceByID(f.ResourceID)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
rv := r.ToView()
|
||||
resource = &rv
|
||||
}
|
||||
view := model.ActivityView{
|
||||
ID: activity.ID,
|
||||
@@ -45,6 +59,7 @@ func GetActivityList(page int) ([]model.ActivityView, int, error) {
|
||||
Time: activity.CreatedAt,
|
||||
Comment: comment,
|
||||
Resource: resource,
|
||||
File: file,
|
||||
}
|
||||
views = append(views, view)
|
||||
}
|
||||
|
@@ -176,6 +176,13 @@ func DeleteResource(uid, id uint) error {
|
||||
return model.NewUnAuthorizedError("You have not permission to delete this resource")
|
||||
}
|
||||
}
|
||||
r, err := GetResource(id, "")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(r.Files) > 0 {
|
||||
return model.NewRequestError("This resource has files, please delete them first")
|
||||
}
|
||||
if err := dao.DeleteResource(id); err != nil {
|
||||
return err
|
||||
}
|
||||
|
Reference in New Issue
Block a user