diff --git a/docs/interfaces/datastore-service.txt b/docs/interfaces/datastore-service.txt index 582243e6f..b684ad9a0 100644 --- a/docs/interfaces/datastore-service.txt +++ b/docs/interfaces/datastore-service.txt @@ -72,7 +72,7 @@ Interface WriteRequest { locked_fields: { : Position; : Position; - : Position; + : Position | CollectionFieldLock; } } @@ -104,6 +104,15 @@ Interface DeleteEvent { fqid: Fqid; } +// Collection fields can not only be locked to a specific position, but also filtered +// first, e.g. when selecting all models from a specific meeting. WARNING: the filter +// should always contain an equals check with the meeting_id, since this will be +// indexed. Other filters can lead to long query times. +Interface CollectionFieldLock { + position: Position; + filter: Filter; +} + // Note: The modified fqfields include: // - all updated fqfields // - all deleted fqfields @@ -213,16 +222,22 @@ get_all(collection: Collection, mapped_fields?: Field[], get_deleted_models?: De */ get_everything(get_deleted_models?: DeletedModelsBehaviour): Map; +interface FilterResponse { + position: Position; + data: Map>; +} + /** * Returns all models of one collection that satisfy the filter condition. * Url: POST to /internal/datastore/reader/filter * + * The global max position of the datastore is returned next the the filtered data. * This method does not take a position and can not be used when browsing the history. * * @returns see get_many * @throws InvalidFormat */ -filter(collection: Collection, filter: Filter, mapped_fields?: Field[]): Map> +filter(collection: Collection, filter: Filter, mapped_fields?: Field[]): FilterResponse /** * Url: POST to /internal/datastore/reader/exists