feat(api): add device identity and lifecycle columns - #1029
madhavilosetty-intel wants to merge 1 commit into
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #1029 +/- ##
==========================================
+ Coverage 61.74% 62.04% +0.30%
==========================================
Files 158 158
Lines 13239 13314 +75
==========================================
+ Hits 8174 8261 +87
+ Misses 5065 5053 -12 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
07c8f53 to
6afe2b0
Compare
There was a problem hiding this comment.
Pull request overview
Adds device-identity and lifecycle columns (id, createddate, softdelete, controlmode, upid, sku, connectiontype) to the devices storage layer across all three backends (SQLite/Postgres via a new migration + sqldb repo updates, and MongoDB via the mongo repo + a partial unique index). Surfaces the new fields on the v1 dto.Device, makes id/createdDate server-managed in UseCase.Insert, and adds round-trip / immutability tests plus a Postman assertion for the server-managed identity fields.
Changes:
- Schema + repo plumbing for the seven new columns (SQL migrations, SQL
Insert/Update/Get*builders, MongoUpdate$setmap and partial uniqueidx_devices_id). - Use-case wiring:
dtoToEntity/entityToDTO/deviceFieldSetterspropagate the new fields;Insertgeneratesid(UUID) andcreatedDate(RFC3339Nano UTC) server-side. - Tests + Postman: sqldb identity round-trip and immutability tests, mongo
GetByIDidentity-columns test, custom gomock matcher to ignore server-set fields, Postman assertion thatid/createdDateare returned.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| internal/app/migrations/20260526000000_migrate_device_identity.up.sql | Adds the 7 columns + partial unique index on id. |
| internal/app/migrations/20260526000000_migrate_device_identity.down.sql | Drops the index and the 7 columns. |
| internal/entity/device.go | Adds the 7 fields to the Device entity with bson tags. |
| internal/entity/dto/v1/device.go | Exposes the 7 fields on the v1 DTO with json tags. |
| internal/usecase/devices/usecase.go | Maps the new fields in dtoToEntity/entityToDTO and patch setters. |
| internal/usecase/devices/repo.go | Server-generates ID (UUID) and CreatedDate on Insert. |
| internal/usecase/devices/repo_test.go | Adds a gomock matcher that ignores server-set ID/CreatedDate. |
| internal/usecase/sqldb/device.go | Extends Get/GetByID/GetByTags/GetByColumn/Insert/Update SQL for new columns; omits id/createddate from Update. |
| internal/usecase/sqldb/device_test.go | Adds round-trip + immutability tests and extends in-test CREATE TABLE schemas. |
| internal/usecase/nosqldb/mongo/fields.go | Adds fieldID constant. |
| internal/usecase/nosqldb/mongo/device.go | Adds the new fields to the mongo Update $set map (omitting id/createddate). |
| internal/usecase/nosqldb/mongo/device_test.go | Adds a GetByID identity-columns test. |
| internal/usecase/nosqldb/mongo/client.go | Creates partial unique index idx_devices_id mirroring the SQL one. |
| internal/controller/httpapi/v1/devices_test.go | Marks softdelete as always-present (no omitempty) in PATCH expectations. |
| integration-test/collections/console_mps_apis.postman_collection.json | Asserts id/createdDate are returned by the relevant endpoint. |
c2cc9a6 to
6b6866c
Compare
6b6866c to
34633ae
Compare
34633ae to
a778742
Compare
33a5ca7 to
28b71a5
Compare
28b71a5 to
fbf95a6
Compare
Add server-generated device IDs and creation/update timestamps across SQLite, Postgres, and MongoDB. Preserve identity and creation dates on updates; refresh lastUpdate on record edits without changing it during connection-status or last-seen heartbeats. Expose the fields through device DTOs and all device query paths, including activated/discovered filters. Add partial unique ID indexes while leaving legacy records with empty identity and timestamp values. Order the SQL migration after the current main schema migration. Retain productType and connectionType as optional client-supplied metadata. Neither is automatically populated or used for device behavior; CIRA/direct routing continues to use mpsusername. isDeleted and read-only deletedDate are scaffolding only: deletion remains physical, reads are not filtered, and no deletion timestamp is generated. Update OpenAPI descriptions and Postman examples. Cover query field preservation and SQLite upgrade, rollback, and reapplication. Validation: full tests pass with isolated machine configuration; go vet, installed golangci-lint, and OpenAPI generation pass. Race tests require a missing C compiler; Docker lint and live database checks were not run successfully because Docker is unavailable. No physical AMT validation. Refs: #843
fbf95a6 to
2b849ad
Compare
Add seven additive columns to the devices table across all three
backends (SQLite, Postgres, MongoDB) for issue #843:
id, createddate, and deleteddate are server-managed and immutable.
lastupdate is server-managed and refreshed only on the main device
Update path; the high-frequency UpdateLastSeen/connection-status
heartbeats deliberately leave it untouched to avoid write
amplification at fleet scale. A partial unique index on id enforces
dedup. DTO, OpenAPI, Postman, and tests are updated. Soft-delete
behavior (DELETE handling, read filtering) lands in a separate PR.
Resolves: #843