Art Studio: name storage keys for what they hold (#842) #849

Closed
opened 2026-07-25 20:22:25 +00:00 by spikerj · 1 comment
Owner

GridFsIdObjectKey, SourceImageGridFsIdSourceImageKey, SourceArtifactGridFsIdSourceArtifactKey, StagedGridFsIdStagedObjectKey.

Nothing has been in GridFS since the MinIO cutover, and the names were not harmless: the validator followed the NAME instead of the thing and broke every image-upload submission in production. This removes what made that plausible.

Scope is ArtStudio only — Vault, Applications and Activity genuinely still use GridFS and are untouched, which is why it was done compiler-driven rather than with a repo-wide replace.

Nothing moves on disk or on the wire: BSON element names are unchanged, and [JsonPropertyName] pins the API response fields and the two RabbitMQ contracts (a rolling deploy leaves messages published by the previous build). ArtStudioStorageKeyNamingTests asserts the stored names, the serialized names, and that a message from the PREVIOUS build still deserializes — it fails if someone later drops the pinning attributes.

FOLLOW-UP: aligning the BSON element names, JSON wire names, {gridFsId} route params and the Angular models for real is a separate coordinated change.

`GridFsId` → `ObjectKey`, `SourceImageGridFsId` → `SourceImageKey`, `SourceArtifactGridFsId` → `SourceArtifactKey`, `StagedGridFsId` → `StagedObjectKey`. Nothing has been in GridFS since the MinIO cutover, and the names were not harmless: the validator followed the NAME instead of the thing and broke every image-upload submission in production. This removes what made that plausible. Scope is ArtStudio only — Vault, Applications and Activity genuinely still use GridFS and are untouched, which is why it was done compiler-driven rather than with a repo-wide replace. Nothing moves on disk or on the wire: BSON element names are unchanged, and `[JsonPropertyName]` pins the API response fields and the two RabbitMQ contracts (a rolling deploy leaves messages published by the previous build). `ArtStudioStorageKeyNamingTests` asserts the stored names, the serialized names, and that a message from the PREVIOUS build still deserializes — it fails if someone later drops the pinning attributes. FOLLOW-UP: aligning the BSON element names, JSON wire names, `{gridFsId}` route params and the Angular models for real is a separate coordinated change.
Author
Owner

Resolved in spikersoft-backend PR (e63ac276), then largely superseded by #853. Verified against origin/master — all four renames present:

  • ObjectKey (ArtAsset.cs:450)
  • SourceImageKey (:60)
  • SourceArtifactKey (:540, and ArtVariantUploadJob.cs:34)
  • StagedObjectKey (ArtVariantUploadJob.cs:38)

Scope was correctly held to Art Studio — Vault (VaultItem.cs:52), Activity (ComparisonDtos.cs:7) and Profile were left untouched, as intended.

Incident linkage, for the record: this ticket's [JsonPropertyName("gridFsId")] on the Artifacts JSON column is precisely what orphaned the stored PascalCase "GridFsId" and caused #852. The [BsonElement] attribute is inert on an EF JSON-string column, so the rename looked safe and round-trip tests passed. The pinning that would have caught it is absent today because #853 deliberately removed it, not because this ticket failed — ArtStudioStorageKeyNamingTests was inverted rather than deleted, exactly as #853 specified.

Closing. The naming this ticket started is now finished by #853 (also closed).

Resolved in spikersoft-backend PR (`e63ac276`), then largely superseded by #853. Verified against `origin/master` — all four renames present: - `ObjectKey` (`ArtAsset.cs:450`) - `SourceImageKey` (`:60`) - `SourceArtifactKey` (`:540`, and `ArtVariantUploadJob.cs:34`) - `StagedObjectKey` (`ArtVariantUploadJob.cs:38`) Scope was correctly held to Art Studio — Vault (`VaultItem.cs:52`), Activity (`ComparisonDtos.cs:7`) and Profile were left untouched, as intended. **Incident linkage, for the record:** this ticket's `[JsonPropertyName("gridFsId")]` on the `Artifacts` JSON column is precisely what orphaned the stored PascalCase `"GridFsId"` and caused #852. The `[BsonElement]` attribute is inert on an EF JSON-string column, so the rename looked safe and round-trip tests passed. The pinning that would have caught it is absent today because **#853 deliberately removed it**, not because this ticket failed — `ArtStudioStorageKeyNamingTests` was *inverted* rather than deleted, exactly as #853 specified. Closing. The naming this ticket started is now finished by #853 (also closed).
Sign in to join this conversation.