feat(dashboard): traverse file URI from file ID (#2412)

This commit is contained in:
Aaron Liu
2025-05-29 09:44:11 +08:00
parent 65095855c1
commit 51fa9f66a5
9 changed files with 67 additions and 3 deletions

View File

@@ -208,6 +208,7 @@ func (service *AdminListService) Files(c *gin.Context) (*ListFileResponse, error
return GetFileResponse{
File: file,
UserHashID: hashid.EncodeUserID(hasher, file.OwnerID),
FileHashID: hashid.EncodeFileID(hasher, file.ID),
}
}),
}, nil
@@ -251,6 +252,7 @@ func (service *SingleFileService) Get(c *gin.Context) (*GetFileResponse, error)
return &GetFileResponse{
File: file,
UserHashID: hashid.EncodeUserID(hasher, file.OwnerID),
FileHashID: hashid.EncodeFileID(hasher, file.ID),
DirectLinkMap: directLinkMap,
}, nil
}

View File

@@ -54,6 +54,7 @@ type ListFileResponse struct {
type GetFileResponse struct {
*ent.File
UserHashID string `json:"user_hash_id,omitempty"`
FileHashID string `json:"file_hash_id,omitempty"`
DirectLinkMap map[int]string `json:"direct_link_map,omitempty"`
}

View File

@@ -584,7 +584,8 @@ func (s *UnlockFileService) Unlock(c *gin.Context) error {
type (
GetFileInfoParameterCtx struct{}
GetFileInfoService struct {
Uri string `form:"uri" binding:"required"`
Uri string `form:"uri"`
ID string `form:"id"`
ExtendedInfo bool `form:"extended"`
FolderSummary bool `form:"folder_summary"`
}
@@ -596,6 +597,24 @@ func (s *GetFileInfoService) Get(c *gin.Context) (*FileResponse, error) {
m := manager.NewFileManager(dep, user)
defer m.Recycle()
if s.ID != "" && s.Uri == "" {
fileId, err := dep.HashIDEncoder().Decode(s.ID, hashid.FileID)
if err != nil {
return nil, serializer.NewError(serializer.CodeParamErr, "unknown file id", err)
}
file, err := m.TraverseFile(c, fileId)
if err != nil {
return nil, fmt.Errorf("failed to traverse file: %w", err)
}
s.Uri = file.Uri(true).String()
}
if s.Uri == "" {
return nil, serializer.NewError(serializer.CodeParamErr, "uri is required", nil)
}
uri, err := fs.NewUriFromString(s.Uri)
if err != nil {
return nil, serializer.NewError(serializer.CodeParamErr, "unknown uri", err)