feat(api): test doc upload

This commit is contained in:
neo-f
2023-03-23 22:28:17 +08:00
parent 6851fe95a0
commit 2d3cf0857a
7 changed files with 45 additions and 47 deletions

View File

@@ -9,7 +9,6 @@ import (
"octopus/internal/dal/model"
"octopus/internal/dal/query"
"octopus/internal/schema"
"strings"
"time"
"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
@@ -19,7 +18,9 @@ import (
)
func ListDocs(ctx context.Context, auth *casdoorsdk.User, param *schema.ListDocQuery) ([]*model.Doc, int64, error) {
base := query.Doc.Where(query.Doc.OrgID.Eq(auth.Owner))
base := query.Doc.
Where(query.Doc.OrgID.Eq(auth.Owner)).
Preload(query.Doc.Folder)
if param.FolderIDs != nil {
base = base.Where(query.Doc.FolderID.In(*param.FolderIDs...))
}
@@ -47,8 +48,8 @@ func CreateDoc(ctx context.Context, auth *casdoorsdk.User, param *schema.CreateD
}
// 将对象从临时地址移动到新地址
newPath := fmt.Sprintf("%s/%s/%s", auth.Owner, folder.ParentPath, param.Name)
if err := storage.MoveObject(ctx, param.ObjectName, newPath); err != nil {
newObjectName := fmt.Sprintf("%s/%s/%s", auth.Owner, time.Now().UTC().Format(time.DateOnly), param.Name)
if err := storage.MoveObject(ctx, param.ObjectName, newObjectName); err != nil {
return nil, fmt.Errorf("failed to move object: %w", err)
}
@@ -58,9 +59,10 @@ func CreateDoc(ctx context.Context, auth *casdoorsdk.User, param *schema.CreateD
IsDeletable: true,
IsEditable: true,
FolderID: param.FolderID,
ObjectName: newPath,
ObjectName: newObjectName,
UploadedAt: stat.LastModified,
CreatedBy: auth.Id,
Folder: folder,
}
if err := query.Doc.Create(&doc); err != nil {
return nil, fmt.Errorf("failed to create doc: %w", err)
@@ -69,7 +71,13 @@ func CreateDoc(ctx context.Context, auth *casdoorsdk.User, param *schema.CreateD
}
func GetDoc(ctx context.Context, auth *casdoorsdk.User, id string) (*model.Doc, error) {
doc, err := query.Doc.Where(query.Doc.OrgID.Eq(auth.Owner), query.Doc.ID.Eq(id)).Take()
doc, err := query.Doc.
Where(
query.Doc.OrgID.Eq(auth.Owner),
query.Doc.ID.Eq(id),
).
Preload(query.Doc.Folder).
Take()
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, fmt.Errorf("specified doc not exists")
}
@@ -80,8 +88,7 @@ func GetDoc(ctx context.Context, auth *casdoorsdk.User, id string) (*model.Doc,
}
func UpdateDoc(ctx context.Context, auth *casdoorsdk.User, id string, body *schema.UpdateDoc) (*model.Doc, error) {
doc, err := GetDoc(ctx, auth, id)
if err != nil {
if _, err := GetDoc(ctx, auth, id); err != nil {
return nil, fmt.Errorf("failed to get doc: %w", err)
}
@@ -94,15 +101,6 @@ func UpdateDoc(ctx context.Context, auth *casdoorsdk.User, id string, body *sche
if _, err := GetDocFolder(ctx, auth, *body.FolderID); err != nil {
return nil, fmt.Errorf("failed to get doc folder: %w", err)
}
// 将对象从临时地址移动到新地址
parts := strings.Split(doc.ObjectName, "/")
objname := parts[len(parts)-1]
newObjectName := fmt.Sprintf("%s/%s/%s", auth.Owner, time.Now().UTC().Format(time.DateOnly), objname)
if err := dal.GetStorage().MoveObject(ctx, doc.ObjectName, newObjectName); err != nil {
return nil, fmt.Errorf("failed to move object: %w", err)
}
updates = append(updates, query.Doc.ObjectName.Value(newObjectName))
updates = append(updates, query.Doc.FolderID.Value(*body.FolderID))
}
@@ -145,7 +143,7 @@ func UpdateDocBatch(ctx context.Context, auth *casdoorsdk.User, param *schema.Do
results := make(schema.DocBatchResults, 0, len(param.IDs))
// NOTE: 后面应该需要优化一下
for _, docID := range param.IDs {
_, err := UpdateDoc(ctx, auth, docID, &schema.UpdateDoc{FolderID: &param.FolderID})
_, err := UpdateDoc(ctx, auth, docID, &schema.UpdateDoc{FolderID: param.FolderID})
if err != nil {
results = append(results, schema.DocBatchResult{ID: docID, Success: false, Error: err.Error()})
} else {
@@ -156,7 +154,7 @@ func UpdateDocBatch(ctx context.Context, auth *casdoorsdk.User, param *schema.Do
}
func CreateUploadURL(ctx context.Context, auth *casdoorsdk.User, param *schema.CreateUploadURL) (u *url.URL, objectName string, err error) {
tmpObjectName := fmt.Sprintf("/tmp/%s/%s-%s", auth.Owner, param.FileName, xid.New())
tmpObjectName := fmt.Sprintf("/tmp/%s/%s-%s", auth.Owner, xid.New(), param.FileName)
u, err = dal.GetStorage().PresignedPutObject(ctx, tmpObjectName, time.Hour)
if err != nil {
return nil, "", fmt.Errorf("failed to create presigned url: %w", err)

View File

@@ -8,6 +8,7 @@ import (
"octopus/internal/dal/model"
"octopus/internal/dal/query"
"octopus/internal/schema"
"octopus/pkg/utils"
"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
"gorm.io/gen/field"
@@ -38,7 +39,7 @@ func GetDocFolderTree(ctx context.Context, auth *casdoorsdk.User, param *schema.
}
// 如果没有的话,就创建一个默认的分组
if len(folders) == 0 {
if utils.Unptr(param.ParentID) == "" && len(folders) == 0 {
folder := model.DocFolder{
Base: model.Base{OrgID: auth.Owner},
Name: "默认分组",
@@ -132,9 +133,9 @@ func DeleteDocFolder(ctx context.Context, auth *casdoorsdk.User, id string) erro
if err != nil {
return fmt.Errorf("failed to get doc folder: %w", err)
}
if folder.IsDefault {
return fmt.Errorf("cannot delete the default folder")
}
// if folder.IsDefault {
// return fmt.Errorf("cannot delete the default folder")
// }
subFolders, err := GetDocFolderChildren(ctx, auth, id)
if err != nil {
return fmt.Errorf("failed to get doc folder children: %w", err)