feat(group): Add upsert and mCreate/mUpdate/mUpsert actions#431
Merged
feat(group): Add upsert and mCreate/mUpdate/mUpsert actions#431
Conversation
cyrng
requested changes
Aug 5, 2025
github-actions Bot
pushed a commit
that referenced
this pull request
Aug 21, 2025
## [3.0.0-next.7](v3.0.0-next.6...v3.0.0-next.7) (2025-08-21) ### Features * **group:** Add upsert and mCreate/mUpdate/mUpsert actions ([#431](#431)) ([c458f38](c458f38))
github-actions Bot
pushed a commit
that referenced
this pull request
Mar 13, 2026
## 3.0.0-3-dev.1 (2026-03-13) * chore: configure next branch ([2c77332](2c77332)) * chore: linting ([14ba308](14ba308)) * chore: merge '2-dev' into 3-dev ([13e5006](13e5006)) * chore: rebase next on master (#406) ([4d657c1](4d657c1)), closes [#406](#406) [#383](#383) [#386](#386) [#384](#384) [#388](#388) [#389](#389) [#390](#390) [#393](#393) [#395](#395) [#389](#389) [#390](#390) [#393](#393) * chore(ci): update branch names in workflows ([c800422](c800422)) * chore(docs): rename add/remove devices/assets from groups controller ([60ac401](60ac401)) * chore(eslint): configuration ([f326a7e](f326a7e)) * chore(license): updated license file ([e63649b](e63649b)) * chore(release): '2-dev' into beta ([e89d00a](e89d00a)) * chore(release): '3-dev' into next ([d2578bf](d2578bf)) * chore(release): 2-dev into beta ([850583b](850583b)) * chore(release): 2.4.0-beta.21 [skip ci] ([0b9d465](0b9d465)) * chore(release): 2.5.0-beta.1 [skip ci] ([6d46cde](6d46cde)) * chore(release): 2.5.0-beta.2 [skip ci] ([fbe00d4](fbe00d4)) * chore(release): 2.5.0-dev.1 [skip ci] ([8328d57](8328d57)) * chore(release): 2.5.0-dev.2 [skip ci] ([f69c0a7](f69c0a7)) * chore(release): 3.0.0-next.1 [skip ci] ([a691826](a691826)) * chore(release): 3.0.0-next.10 [skip ci] ([000baef](000baef)) * chore(release): 3.0.0-next.11 [skip ci] ([a4869ca](a4869ca)) * chore(release): 3.0.0-next.12 [skip ci] ([742f38d](742f38d)) * chore(release): 3.0.0-next.13 [skip ci] ([6ee87cd](6ee87cd)) * chore(release): 3.0.0-next.14 [skip ci] ([8ba5e32](8ba5e32)) * chore(release): 3.0.0-next.15 [skip ci] ([4e2a854](4e2a854)) * chore(release): 3.0.0-next.16 [skip ci] ([4b0912b](4b0912b)) * chore(release): 3.0.0-next.17 [skip ci] ([9021562](9021562)) * chore(release): 3.0.0-next.18 [skip ci] ([004fb43](004fb43)) * chore(release): 3.0.0-next.19 [skip ci] ([80a0131](80a0131)) * chore(release): 3.0.0-next.2 [skip ci] ([c17e257](c17e257)) * chore(release): 3.0.0-next.20 [skip ci] ([124c717](124c717)) * chore(release): 3.0.0-next.21 [skip ci] ([90c7bcc](90c7bcc)) * chore(release): 3.0.0-next.22 [skip ci] ([3314ef3](3314ef3)) * chore(release): 3.0.0-next.23 [skip ci] ([3e3ce84](3e3ce84)) * chore(release): 3.0.0-next.24 [skip ci] ([1e07d0d](1e07d0d)) * chore(release): 3.0.0-next.25 [skip ci] ([0a00b4c](0a00b4c)) * chore(release): 3.0.0-next.26 [skip ci] ([3ca41f3](3ca41f3)) * chore(release): 3.0.0-next.27 [skip ci] ([12fc8a9](12fc8a9)) * chore(release): 3.0.0-next.3 [skip ci] ([efaa8e1](efaa8e1)), closes [#410](#410) [#408](#408) [#409](#409) * chore(release): 3.0.0-next.4 [skip ci] ([3b48a18](3b48a18)) * chore(release): 3.0.0-next.5 [skip ci] ([baab4c2](baab4c2)) * chore(release): 3.0.0-next.6 [skip ci] ([6084b23](6084b23)) * chore(release): 3.0.0-next.7 [skip ci] ([a836e8a](a836e8a)) * chore(release): 3.0.0-next.8 [skip ci] ([f9e3953](f9e3953)) * chore(release): 3.0.0-next.9 [skip ci] ([24813dd](24813dd)) * chore(release): merge master [skip ci] ([7cbb68c](7cbb68c)) * chore(semantic-release): update config to match new branches ([7cfe498](7cfe498)) * feat: embed measure slots in asset and device documents (#372) ([ffa73b9](ffa73b9)), closes [#372](#372) * feat: stop using measures from assets and devices in exporter (#369) ([6ee21a0](6ee21a0)), closes [#369](#369) * feat(assetModel): add spec artifacts for multi-group asset models (#462) ([e8cff06](e8cff06)), closes [#462](#462) * feat(assets): allow to add or remove measure slots to an asset (#457) ([cafd09a](cafd09a)), closes [#457](#457) * feat(decoder): warn no measures instead of throwing error (#425) ([c2fe3f6](c2fe3f6)), closes [#425](#425) * feat(decoders): add the device payload "route" endpoint (#456) ([9d4c251](9d4c251)), closes [#456](#456) * feat(devices): can create orphan devices (#460) ([0d913ae](0d913ae)), closes [#460](#460) * feat(doc 3): added documentation for the Groups controller ([a22f657](a22f657)) * feat(doc): add breaking changes ([bb1ce3f](bb1ce3f)) * feat(doc): add measure linkage + screenshots ([a552dfb](a552dfb)) * feat(doc): add migration documentation and migration scripts ([fc1cf1c](fc1cf1c)) * feat(doc): add migration scripts ([6eb9515](6eb9515)) * feat(doc): add new group endpoints ([3c04d76](3c04d76)) * feat(doc): add new linkAssets/devices endpoint doc ([6e321ef](6e321ef)) * feat(doc): reword engine into tenant engine where necessary for comprehension ([30c9a52](30c9a52)) * feat(doc): update digitial twins devices assets ([d9b086a](d9b086a)) * feat(doc): update measure-propagation screen + remove tenant references ([3f284e9](3f284e9)) * feat(doc): update migration scripts and docs to be used with npx ([a414c58](a414c58)) * feat(docs): duplicate v2 doc ([d6f6dca](d6f6dca)) * feat(group): add endpoint to list items of a group ([813fe49](813fe49)) * feat(group): Add upsert and mCreate/mUpdate/mUpsert actions (#431) ([c458f38](c458f38)), closes [#431](#431) * feat(groupModels): add group affinity and allow groups to contain devices ([110217e](110217e)) * feat(groups): rework asset groups into broader groups (#424) ([6cfcede](6cfcede)), closes [#424](#424) * feat(groupservice): add refresh option (#437) ([2587f3b](2587f3b)), closes [#437](#437) * feat(logger): add module and decoder scoped logger (#461) ([6f0c6b9](6f0c6b9)), closes [#461](#461) * feat(measure): allow measures to be pushed on Assets via API (no devices) (#344) ([c1073c1](c1073c1)), closes [#344](#344) * feat(measureModel): tenant scoped measure model (#459) ([7659425](7659425)), closes [#459](#459) * feat(models): add tenant-scoped asset models with 3-level fallback (KZLPRD-1150) ([07be354](07be354)) * feat(models): engine-aware conflict detection and API docs for tenant-scoped models (KZLPRD-1150) ([80b6f17](80b6f17)) * feat(twins): many-to-many link relations (#433) ([719b8cd](719b8cd)), closes [#433](#433) * feat!: remove deprecations support (#409) ([3937249](3937249)), closes [#409](#409) * feat!: remove kdm measures export (#410) ([897097f](897097f)), closes [#410](#410) * feat(doc 3) update configuration / measures-ingestion ([c420bc8](c420bc8)) * feat(doc) Add link to kourous doc for migration ([864f175](864f175)) * feat(test):add test for new listItems endpoint ([1a81b91](1a81b91)) * fix!: rename engine collections (#408) ([220aa51](220aa51)), closes [#408](#408) * Merge branch 'next' of github.com:kuzzleio/kuzzle-device-manager into next ([9ceac57](9ceac57)) * Merge pull request #426 from kuzzleio/3-dev ([5bb37cc](5bb37cc)), closes [#426](#426) * Merge pull request #427 from kuzzleio/3-dev ([92f3201](92f3201)), closes [#427](#427) * Merge pull request #428 from kuzzleio/KZLPRD-979-group-affinity ([9ce7c7e](9ce7c7e)), closes [#428](#428) * Merge pull request #429 from kuzzleio/3-dev ([2ea4a8f](2ea4a8f)), closes [#429](#429) * Merge pull request #434 from kuzzleio/FEAT/docs-v3 ([4e2394d](4e2394d)), closes [#434](#434) * Merge pull request #438 from kuzzleio/KZLPRD-1013-await-promise-try-catch ([5c73b8e](5c73b8e)), closes [#438](#438) * Merge pull request #446 from kuzzleio/chore/export-type-internal-collections ([8f0b4d4](8f0b4d4)), closes [#446](#446) * Merge pull request #447 from kuzzleio/chore/export-type-internal-collections ([5cfead0](5cfead0)), closes [#447](#447) * Merge pull request #458 from kuzzleio/feat/KZLPRD-1150_tenant_specific_asset_model ([4fd7f74](4fd7f74)), closes [#458](#458) * Update openspec/changes/tenant-specific-asset-models/design.md ([4d542f4](4d542f4)) * style: fix prettier formatting in ModelService search queries ([351ecfa](351ecfa)) * fix: add prefix to build command ([da91fee](da91fee)) * fix: backport fix (#380) ([5392b56](5392b56)), closes [#380](#380) * fix: create a workspace for the device manager and one for types ([6ccb890](6ccb890)) * fix: engines name ([9cf6da3](9cf6da3)) * fix: fix semantic version ([f64ca2f](f64ca2f)) * fix: fix types from last merge ([5f3c973](5f3c973)) * fix: gitignore and ci cd commands ([c3769c1](c3769c1)) * fix: kuzzle version, semantic version ([c55be75](c55be75)) * fix: launch tests in docker ([a1541a9](a1541a9)) * fix: little change to trigger release ([e3094a9](e3094a9)) * fix: name the service in docker compose ([dff55c1](dff55c1)) * fix: remove metadata property to avoid update (#432) ([6925e81](6925e81)), closes [#432](#432) * fix: restore next version releasing ([9bebc53](9bebc53)) * fix: script in ci ([e782694](e782694)) * fix: semantic-release ([8804514](8804514)) * fix: should fix tests ([8f7c468](8f7c468)) * fix: test app ([f3e3108](f3e3108)) * fix: testing with right node version ([39b8144](39b8144)) * fix: trusted publishing ([691584d](691584d)) * fix: types (#411) ([aeb3e35](aeb3e35)), closes [#411](#411) * fix: typo in docker compose file ([dd12b2f](dd12b2f)) * fix: url of types package ([a548520](a548520)) * fix: use original event with new payload (#414) ([3fd1557](3fd1557)), closes [#414](#414) * fix: use vite, properly launch tests ([37b916a](37b916a)) * fix: version of tests is 24 for now ([396da18](396da18)) * fix(assetsController): await a promise inside of a try-catch ([1720df3](1720df3)) * fix(ci): set runner node-version to 22 ([f4ccead](f4ccead)) * fix(deviceService): fix metadata init to accept 0 (#448) ([30f8ea0](30f8ea0)), closes [#448](#448) * fix(doc): typo ([33fab8a](33fab8a)) * fix(fixtures): add missign groups property in device emptytemp ([bf313e1](bf313e1)) * fix(implicitMeasureLinking): no error if link already exists (#436) ([0e01111](0e01111)), closes [#436](#436) * fix(measureIngest): infer engineGroup from engine (#455) ([1f68e8d](1f68e8d)), closes [#455](#455) * fix(measures): add device groups field to origin of measures documents (#441) ([35aa43d](35aa43d)), closes [#441](#441) * fix(models): address remaining PR #458 review feedback (KZLPRD-1150) ([1394ac2](1394ac2)), closes [#458](#458) * fix(models): filter undefined from ES must arrays and add lang to getAsset queries (KZLPRD-1150) ([f8185d1](f8185d1)) * fix(ModelService): twin types ([7d4fc85](7d4fc85)) * fix(plugin exports): add missing type export InternalCollection ([3624519](3624519)) * fix(test app): fix imports ([b635f59](b635f59)) * fix(tests): replace jest.setTimeout with vitest equivalent (KZLPRD-1150) ([0296f21](0296f21)) * fix(unlinkAsset): throw if no measure to unlink is provided (#453) ([991c21b](991c21b)), closes [#453](#453) * refactor(models): address PR #458 review feedback (KZLPRD-1150) ([0171cf1](0171cf1)), closes [#458](#458) * test(models): add tenant-scoped mapping conflict detection tests (KZLPRD-1150) ([620dff2](620dff2)) * docs(KZLPRD-1150): asset model individual tenant-engine granularity ([f720834](f720834)) ### BREAKING CHANGE * `engineGroup` field renamed to `engineGroups` (string[]) in model documents, API request/response types, and ask events. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(models): add multi-group asset model behavior - Normalize engineGroups containing "commons" to ["commons"] in writeAsset/updateAsset - Enforce single-group constraint for group models in writeGroup - Generate multi-group document IDs: model-asset-{sortedGroups}-{ModelName} - Add 7 functional tests for multi-group scenarios - Add group model rejection test for multiple engineGroups Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(models): use request.getArray() for engineGroups parameter validation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: gitignore .claude/ and openspec/ directories Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * change in the management of measurement models
Member
|
🎉 This PR is included in version 3.0.0-3-dev.1 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do ?
This PR adds several actions to the groups api:
Issues : ticket ticket
How should this be manually tested?
Try the different controllers