修复共享链接无法被连带删除
This commit is contained in:
@@ -2,11 +2,12 @@
|
||||
|
||||
> 基于原作者v0.29.1代码修改
|
||||
|
||||
#### v0.29.1-1补丁
|
||||
#### v0.29.1-2
|
||||
1. 置顶内容新增自动折叠;置顶效果及图标改为全局显示
|
||||
2. 归档页面新增(取消)置顶、编辑、复制按钮
|
||||
3. 权限图标改为全局显示
|
||||
4. 修复中文目录锚点无效;优化目录显示效果
|
||||
5. 备忘录被删除时显式删除其分享链接
|
||||
|
||||
#### v0.29.1-1
|
||||
1. 修改默认配置
|
||||
|
||||
@@ -116,6 +116,9 @@ func (d *DB) DeleteMemoShare(ctx context.Context, delete *store.DeleteMemoShare)
|
||||
if delete.UID != nil {
|
||||
where, args = append(where, "`uid` = ?"), append(args, *delete.UID)
|
||||
}
|
||||
if delete.MemoID != nil {
|
||||
where, args = append(where, "`memo_id` = ?"), append(args, *delete.MemoID)
|
||||
}
|
||||
_, err := d.db.ExecContext(ctx, "DELETE FROM `memo_share` WHERE "+strings.Join(where, " AND "), args...)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -137,6 +137,9 @@ func (d *DB) DeleteMemoShare(ctx context.Context, delete *store.DeleteMemoShare)
|
||||
if delete.UID != nil {
|
||||
where, args = append(where, "uid = "+placeholder(len(args)+1)), append(args, *delete.UID)
|
||||
}
|
||||
if delete.MemoID != nil {
|
||||
where, args = append(where, "memo_id = "+placeholder(len(args)+1)), append(args, *delete.MemoID)
|
||||
}
|
||||
_, err := d.db.ExecContext(ctx, "DELETE FROM memo_share WHERE "+strings.Join(where, " AND "), args...)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -139,6 +139,9 @@ func (d *DB) DeleteMemoShare(ctx context.Context, delete *store.DeleteMemoShare)
|
||||
if delete.UID != nil {
|
||||
where, args = append(where, "`uid` = ?"), append(args, *delete.UID)
|
||||
}
|
||||
if delete.MemoID != nil {
|
||||
where, args = append(where, "`memo_id` = ?"), append(args, *delete.MemoID)
|
||||
}
|
||||
_, err := d.db.ExecContext(ctx, "DELETE FROM `memo_share` WHERE "+strings.Join(where, " AND "), args...)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -145,6 +145,11 @@ func (s *Store) DeleteMemo(ctx context.Context, delete *DeleteMemo) error {
|
||||
if err := s.driver.DeleteMemoRelation(ctx, &DeleteMemoRelation{RelatedMemoID: &delete.ID}); err != nil {
|
||||
return err
|
||||
}
|
||||
// Clean up share links for this memo. SQLite runs with foreign keys disabled,
|
||||
// so it cannot rely on ON DELETE CASCADE for memo_share rows.
|
||||
if err := s.driver.DeleteMemoShare(ctx, &DeleteMemoShare{MemoID: &delete.ID}); err != nil {
|
||||
return err
|
||||
}
|
||||
// Clean up attachments linked to this memo.
|
||||
attachments, err := s.ListAttachments(ctx, &FindAttachment{MemoID: &delete.ID})
|
||||
if err != nil {
|
||||
|
||||
@@ -24,6 +24,7 @@ type FindMemoShare struct {
|
||||
type DeleteMemoShare struct {
|
||||
ID *int32
|
||||
UID *string
|
||||
MemoID *int32
|
||||
}
|
||||
|
||||
// CreateMemoShare creates a new share grant.
|
||||
|
||||
@@ -112,10 +112,35 @@ func TestDeleteMemoStore(t *testing.T) {
|
||||
memo, err := ts.CreateMemo(ctx, memoCreate)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, memoCreate.Content, memo.Content)
|
||||
otherMemo, err := ts.CreateMemo(ctx, &store.Memo{
|
||||
UID: "test-other-memo",
|
||||
CreatorID: user.ID,
|
||||
Content: "other test content",
|
||||
Visibility: store.Public,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
share, err := ts.CreateMemoShare(ctx, &store.MemoShare{
|
||||
UID: "test-delete-memo-share",
|
||||
MemoID: memo.ID,
|
||||
CreatorID: user.ID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
keptShare, err := ts.CreateMemoShare(ctx, &store.MemoShare{
|
||||
UID: "test-keep-memo-share",
|
||||
MemoID: otherMemo.ID,
|
||||
CreatorID: user.ID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = ts.DeleteMemo(ctx, &store.DeleteMemo{
|
||||
ID: memo.ID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
deletedShare, err := ts.GetMemoShare(ctx, &store.FindMemoShare{ID: &share.ID})
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, deletedShare)
|
||||
keptShareAfterDelete, err := ts.GetMemoShare(ctx, &store.FindMemoShare{ID: &keptShare.ID})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, keptShareAfterDelete)
|
||||
ts.Close()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user