Files
yatm/apis/file_get.go
2023-10-20 20:22:07 +08:00

53 lines
1.1 KiB
Go

package apis
import (
"context"
"errors"
"github.com/samber/lo"
"github.com/samuelncui/yatm/entity"
"github.com/samuelncui/yatm/library"
)
func (api *API) FileGet(ctx context.Context, req *entity.FileGetRequest) (*entity.FileGetReply, error) {
libFile, err := api.lib.GetFile(ctx, req.Id)
if err != nil && !errors.Is(err, library.ErrFileNotFound) {
return nil, err
}
var file *entity.File
if libFile != nil {
file = convertFiles(libFile)[0]
}
positions, err := api.lib.GetPositionByFileID(ctx, req.Id)
if err != nil {
return nil, err
}
reply := &entity.FileGetReply{
File: file,
Positions: convertPositions(positions...),
}
if req.GetNeedSize() {
children, err := api.lib.ListWithSize(ctx, req.Id)
if err != nil {
return nil, err
}
reply.Children = convertFiles(children...)
if reply.File != nil {
reply.File.Size += lo.Sum(lo.Map(children, func(file *library.File, _ int) int64 { return file.Size }))
}
} else {
children, err := api.lib.List(ctx, req.Id)
if err != nil {
return nil, err
}
reply.Children = convertFiles(children...)
}
return reply, nil
}