feat(api): test doc upload
This commit is contained in:
@@ -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: ¶m.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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user