Skip to content

Updates - #65

Merged
GinoCanessa merged 7 commits into
mainfrom
dev
Jul 8, 2026
Merged

GinoCanessa merged 7 commits into
mainfrom
dev

Conversation

@GinoCanessa

Copy link
Copy Markdown
Collaborator

Fix #62
Update dependencies

GinoCanessa and others added 7 commits July 6, 2026 19:54
A plain `POST [type]` carrying only control parameters (_format, _pretty,
_summary, _elements) was mis-handled as a conditional create: the store
re-derived conditionality from the raw UrlQuery and ran an unfiltered type
search, returning a pre-existing resource (200) or 412 instead of creating.

Add a single shared predicate FhirCandle.Search.Common.QueryContainsSearchParameters
that reports whether a query carries a real (non-control, non-result) search
parameter, and gate DoInstanceCreate's conditional trigger on the resolved
interaction plus that predicate. Conditional create via If-None-Exist or a
resolved TypeCreateConditional with real criteria is unchanged (incl. 412 on
multi-match). Also refactor FhirRequestContext.hasQueryParameters to reuse the
predicate (DRY, behavior-preserving).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Control-only query params on a PUT were mis-handled as a conditional update:
the store ran an unfiltered type search off the raw UrlQuery. Gate the
conditional-update branch of DoInstanceUpdate on the resolved
InstanceUpdateConditional interaction, and (since the REST controller hard-sets
that interaction for any non-empty query) reject a control-only conditional
update with 400 before searching. Plain instance PUT with control params is now
a normal update.

Also re-gate the strict-mode URL-id-regex and PUT-on-missing checks on the
interaction rather than UrlQuery emptiness, so a control-only query no longer
suppresses them (strict PUT-on-missing again returns 404).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A type-level DELETE with no real search criteria (empty or control-only query)
resolved to TypeDeleteConditional and ran an unfiltered "match everything"
search. Reject such requests with 400 in DoTypeDelete before searching, so a
control-param-only or criteria-less DELETE [type] no longer risks deleting every
resource of the type. Conditional deletes with real criteria are unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add DetermineInteraction parse-lock cases pinning that control-only POST/PUT
queries do not resolve as conditional operations, and an R4 FromIssues pointer
test reproducing issue #62 (POST Organization?_pretty=true&_format=json with
pre-existing organizations must return 201 Created).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add the four published-but-unrecorded NuGet versions
(v2026.526.2054/#50, v2026.527.1737/#52, v2026.528.2036/#58,
v2026.623.2024/#60) as reverse-chronological entries above
v2026.415.1643, with grouped thematic bullets and external-contributor
credit. The relocated issue #40 backport-IG link fix is written into
v2026.528.2036.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the stale issue #41 backport-IG bullet (which actually shipped
in v2026.528.2036 as the #40 fix) with the four genuinely-unreleased
post-#60 dev store fixes: type-level delete search criteria, conditional
update interaction gating, control-only POST create handling, and the
control-only write parse-lock (issue #62).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@GinoCanessa
GinoCanessa merged commit f04a1d4 into main Jul 8, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

POST operation returns random resource instead of newly created resource when _format and/or _pretty are used in the request parameters

1 participant