core
core copied to clipboard
Add the PublishDocument event trigger after the bulk update
Need to add the PublishDocument trigger to the updateDocuments functions located in database/postgresql/base.go:265 and database/mongo/base.go:369
It will require a new function, something that can grab multiple documents by ID to publish the changed documents they'll need to be fetched, to avoid the usage of the GetByID in a loop.
We will take this opportunity to create a public API function to get multiple documents at once from an array of IDs.
Function could be called GetDocuments and receive a []string of ids.
I'd add this to the Persister interface and implement in the 3 database implementation (postgresql, mongo, and memory).
This function would return a []map[string]any
In db.go line:44:
if len(parts) == 4 {
database.list(w, r)
} else {
I'd check for the presence of the query string byids=1 and create a new function that would get the IDs via the posted body which will be an array if string:
url example: /db/tasks?byids=1
body: ['id1-here', 'id2-here', '...']
Once this is implemented, we will be able to use this in the bulk update to publish all updated documents.
Also once #27 is completed for the delete un bulk, we'll re-use this same concept to publish the deleted document event for all deleted docs.
Let me know if I'm missing something and you think of something else in implementation.
@dstpierre IMO the GET request with the body is a bad practice. Maybe it would be better to pass the ids in the query params?
url example /db/tasks?ids=id1,id2,id3
@rostikts yep totally. although the query string is limited to 1024 characters.
I wonder if using a POST would be more flexible.
Also I'm doing a major refactor of the internal package in #58 - there will be a lot of conflict as I'm moving most of the struct and interface out of the internal package. Not a huge issue if you've already started.
@rostikts just wanted to let you know that the PR #58 is now merge, so it's safe to resume your work for this issue if you'd like.
The internal package is mostly gone, and a new model package replace it.
Let me know if there's any issues.