Skip to content

Commit

Permalink
update: [Rest] Delete and BulkDelete events add deleted data
Browse files Browse the repository at this point in the history
  • Loading branch information
kainonly committed Oct 26, 2023
1 parent cc9aa6d commit 78fab3f
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 11 deletions.
4 changes: 2 additions & 2 deletions rest/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ func (x *Controller) Delete(ctx context.Context, c *app.RequestContext) {
return
}

r, err := x.Service.Delete(ctx, dto.Collection, id)
r, err := x.Service.Delete(ctx, dto.Collection, id, false)
if err != nil {
c.Error(err)
return
Expand Down Expand Up @@ -534,7 +534,7 @@ func (x *Controller) BulkDelete(ctx context.Context, c *app.RequestContext) {
return
}

r, err := x.Service.BulkDelete(ctx, dto.Collection, dto.Filter)
r, err := x.Service.BulkDelete(ctx, dto.Collection, dto.Filter, false)
if err != nil {
c.Error(err)
return
Expand Down
8 changes: 5 additions & 3 deletions rest/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1327,6 +1327,8 @@ func TestDeleteEvent(t *testing.T) {
case msg := <-ch:
assert.Equal(t, rest.ActionDelete, msg.Action)
assert.Equal(t, projectId, msg.Id)
t.Log(msg.Data)
assert.Equal(t, projectId, msg.Data.(M)["_id"])
assert.Equal(t, result, msg.Result)
break
}
Expand Down Expand Up @@ -1425,7 +1427,7 @@ func TestBulkDeleteEvent(t *testing.T) {

resp, err := Req("POST", "/projects/bulk_delete", M{
"filter": M{
"namespace": M{"$in": []string{"test1", "test2"}},
"namespace": M{"$in": []string{"test8", "test9"}},
},
})
assert.NoError(t, err)
Expand All @@ -1438,8 +1440,8 @@ func TestBulkDeleteEvent(t *testing.T) {
select {
case msg := <-ch:
assert.Equal(t, rest.ActionBulkDelete, msg.Action)
assert.Equal(t, M{"$in": []interface{}{"test1", "test2"}}, msg.Filter["namespace"])
//assert.Equal(t, 2, len(msg.Data.([]interface{})))
assert.Equal(t, M{"$in": []interface{}{"test8", "test9"}}, msg.Filter["namespace"])
assert.Equal(t, 2, len(msg.Data.([]interface{})))
assert.Equal(t, result, msg.Result)
break
}
Expand Down
31 changes: 26 additions & 5 deletions rest/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,33 +154,54 @@ func (x *Service) Replace(ctx context.Context, name string, id primitive.ObjectI
return
}

func (x *Service) Delete(ctx context.Context, name string, id primitive.ObjectID) (result interface{}, err error) {
func (x *Service) Delete(ctx context.Context, name string, id primitive.ObjectID, transaction bool) (result interface{}, err error) {
filter := M{
"_id": id,
"_durable": bson.M{"$exists": false},
}
var doc M
if !transaction {
if err = x.Db.Collection(name).
FindOne(ctx, filter).
Decode(&doc); err != nil {
return
}
}
if result, err = x.Db.Collection(name).
DeleteOne(ctx, filter); err != nil {
return
}
if err = x.Publish(ctx, name, PublishDto{
Action: ActionDelete,
Id: id.Hex(),
Data: doc,
Result: result,
}); err != nil {
return
}
return
}

func (x *Service) BulkDelete(ctx context.Context, name string, filter M) (result interface{}, err error) {
func (x *Service) BulkDelete(ctx context.Context, name string, filter M, transaction bool) (result interface{}, err error) {
filter["_durable"] = bson.M{"$exists": false}
if result, err = x.Db.Collection(name).DeleteMany(ctx, filter); err != nil {
var docs []M
if !transaction {
var cursor *mongo.Cursor
if cursor, err = x.Db.Collection(name).Find(ctx, filter); err != nil {
return
}
if err = cursor.All(ctx, &docs); err != nil {
return
}
}
if result, err = x.Db.Collection(name).
DeleteMany(ctx, filter); err != nil {
return
}
if err = x.Publish(ctx, name, PublishDto{
Action: ActionBulkDelete,
Filter: filter,
Data: docs,
Result: result,
}); err != nil {
return
Expand Down Expand Up @@ -315,9 +336,9 @@ func (x *Service) Invoke(ctx context.Context, dto PendingDto) (_ interface{}, _
case ActionReplace:
return x.Replace(ctx, dto.Name, dto.Id, dto.Data.(M))
case ActionDelete:
return x.Delete(ctx, dto.Name, dto.Id)
return x.Delete(ctx, dto.Name, dto.Id, true)
case ActionBulkDelete:
return x.BulkDelete(ctx, dto.Name, dto.Filter)
return x.BulkDelete(ctx, dto.Name, dto.Filter, true)
case ActionSort:
data := dto.Data.(M)
var ids []primitive.ObjectID
Expand Down
2 changes: 1 addition & 1 deletion rest/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func TestDeleteDurable(t *testing.T) {
assert.NoError(t, err)

id := r.InsertedID.(primitive.ObjectID)
_, err = service.Delete(ctx, "x_users", id)
_, err = service.Delete(ctx, "x_users", id, false)

count, err := service.Db.Collection("x_users").CountDocuments(ctx, bson.M{"_id": id})
assert.NoError(t, err)
Expand Down

0 comments on commit 78fab3f

Please sign in to comment.