mirror of
https://github.com/wgh136/nysoure.git
synced 2025-09-27 12:17:24 +00:00
Add user files.
This commit is contained in:
@@ -30,6 +30,7 @@ func AddFileRoutes(router fiber.Router) {
|
||||
fileGroup.Delete("/:id", deleteFile)
|
||||
fileGroup.Get("/download/local", downloadLocalFile)
|
||||
fileGroup.Get("/download/:id", downloadFile, middleware.NewDynamicRequestLimiter(config.MaxDownloadsPerDayForSingleIP, 24*time.Hour))
|
||||
fileGroup.Get("/user/:username", listUserFiles, middleware.NewRequestLimiter(100, 24*time.Hour))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,3 +274,22 @@ func createServerDownloadTask(c fiber.Ctx) error {
|
||||
Data: result,
|
||||
})
|
||||
}
|
||||
|
||||
func listUserFiles(c fiber.Ctx) error {
|
||||
username := c.Params("username")
|
||||
page, err := strconv.Atoi(c.Query("page", "1"))
|
||||
if err != nil || page < 1 {
|
||||
return model.NewRequestError("Invalid page number")
|
||||
}
|
||||
|
||||
files, totalPages, err := service.ListUserFiles(username, page)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(model.PageResponse[*model.FileView]{
|
||||
Success: true,
|
||||
Data: files,
|
||||
TotalPages: totalPages,
|
||||
})
|
||||
}
|
||||
|
@@ -215,3 +215,20 @@ func SetFileStorageKeyAndSize(id string, storageKey string, size int64) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ListUserFiles(userID uint, page, pageSize int) ([]*model.File, int64, error) {
|
||||
var files []*model.File
|
||||
var count int64
|
||||
|
||||
if err := db.Model(&model.File{}).
|
||||
Preload("Resource").
|
||||
Where("user_id = ?", userID).
|
||||
Count(&count).
|
||||
Order("created_at DESC").
|
||||
Offset((page - 1) * pageSize).
|
||||
Limit(pageSize).
|
||||
Find(&files).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return files, count, nil
|
||||
}
|
||||
|
@@ -21,12 +21,13 @@ type File struct {
|
||||
}
|
||||
|
||||
type FileView struct {
|
||||
ID string `json:"id"`
|
||||
Filename string `json:"filename"`
|
||||
Description string `json:"description"`
|
||||
Size int64 `json:"size"`
|
||||
IsRedirect bool `json:"is_redirect"`
|
||||
User UserView `json:"user"`
|
||||
ID string `json:"id"`
|
||||
Filename string `json:"filename"`
|
||||
Description string `json:"description"`
|
||||
Size int64 `json:"size"`
|
||||
IsRedirect bool `json:"is_redirect"`
|
||||
User UserView `json:"user"`
|
||||
Resource *ResourceView `json:"resource,omitempty"`
|
||||
}
|
||||
|
||||
func (f *File) ToView() *FileView {
|
||||
@@ -39,3 +40,21 @@ func (f *File) ToView() *FileView {
|
||||
User: f.User.ToView(),
|
||||
}
|
||||
}
|
||||
|
||||
func (f *File) ToViewWithResource() *FileView {
|
||||
var resource *ResourceView
|
||||
if f.Resource.ID != 0 {
|
||||
rv := f.Resource.ToView()
|
||||
resource = &rv
|
||||
}
|
||||
|
||||
return &FileView{
|
||||
ID: f.UUID,
|
||||
Filename: f.Filename,
|
||||
Description: f.Description,
|
||||
Size: f.Size,
|
||||
IsRedirect: f.RedirectUrl != "",
|
||||
User: f.User.ToView(),
|
||||
Resource: resource,
|
||||
}
|
||||
}
|
||||
|
@@ -614,3 +614,26 @@ func CreateServerDownloadTask(uid uint, url, filename, description string, resou
|
||||
|
||||
return file.ToView(), nil
|
||||
}
|
||||
|
||||
func ListUserFiles(username string, page int) ([]*model.FileView, int, error) {
|
||||
user, err := dao.GetUserByUsername(username)
|
||||
if err != nil {
|
||||
log.Error("failed to get user by username: ", err)
|
||||
return nil, 0, model.NewNotFoundError("user not found")
|
||||
}
|
||||
uid := user.ID
|
||||
files, total, err := dao.ListUserFiles(uid, page, pageSize)
|
||||
if err != nil {
|
||||
log.Error("failed to list user files: ", err)
|
||||
return nil, 0, model.NewInternalServerError("failed to list user files")
|
||||
}
|
||||
|
||||
fileViews := make([]*model.FileView, len(files))
|
||||
for i, file := range files {
|
||||
fileViews[i] = file.ToViewWithResource()
|
||||
}
|
||||
|
||||
totalPages := (total + pageSize - 1) / pageSize
|
||||
|
||||
return fileViews, int(totalPages), nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user