Alexandre Brandizzi
5c93e4ecec
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-348-region-filter
...
# Conflicts:
# SeaHaven.Services/Helpers/DashboardRegions.cs
2026-09-17 02:20:44 -03:00
Alexandre Brandizzi
f564e1b112
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-347-dashboard-contract
...
# Conflicts:
# Api.SeaHavenIndustries.Tests/DashboardServiceTests.cs
2026-09-17 02:18:22 -03:00
Alexandre Brandizzi
daf3ed9210
fix(team-members): map duplicate-email race to conflict error (SH-325)
...
CreateAsync checks FindByEmailAsync and then inserts, so two concurrent
creates with the same email can both pass the check and hit the unique
user-name index. That DbUpdateException was unhandled and surfaced as a
500. Catch it at the CreateAsync call and return the existing
"Email is already in use." message, matching the check-then-insert
converge pattern already used by SetOverrideCoreAsync.
2026-09-17 01:40:40 -03:00
Alexandre Brandizzi
782165a4cf
Merge pull request #133 from Sea-Haven-Industries/feat/ab/sh-348-dashboard-region
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-348: Add dashboard region metrics
2026-09-17 01:36:09 -03:00
Alexandre Brandizzi
7e06d1c51b
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-17 01:30:08 -03:00
Alexandre Brandizzi
e07f04a6af
Merge pull request #131 from Sea-Haven-Industries/feat/ab/sh-187-service-picker
...
SH-187: Connect work-order service selection to the registry
2026-09-17 01:28:09 -03:00
Alexandre Brandizzi
b10956d731
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-17 01:24:07 -03:00
Adam Moussa
7d728d9101
Merge branch 'dev' into feat/ab/sh-187-service-picker
2026-09-17 00:20:59 -04:00
Alexandre Brandizzi
da80595321
Merge pull request #125 from Sea-Haven-Industries/feat/ab/sh-303-services-registry
...
SH-303: Add the global Services registry API
2026-09-17 01:20:08 -03:00
Alexandre Brandizzi
2e983b1f6a
Merge branch 'dev' into feat/ab/sh-303-services-registry
2026-09-17 01:12:07 -03:00
Alexandre Brandizzi
039a9c8d7e
style(tests): fix whitespace formatting in UpliftQueueReadTests
...
The Document(...) helper object initializer was under-indented, failing the G3 dotnet format changed-file gate in the architecture and deployable-bundle checks. Reindented to satisfy dotnet format --verify-no-changes.
2026-09-17 00:08:42 -03:00
albrand
dfd248cfcb
feat(uplifts): expose queue closed flag, attachments, decider, pending exposure (SH-207, SH-208)
...
The approvals queue frontend needs four list-contract additions the read
contract PRs do not carry yet: workOrderClosed so the Approved tab can
disable Revoke on terminal work orders (mirroring the SH-196 revoke
guard), attachmentCount from non-deleted UpliftEvidence documents so the
+N chip renders, decidedByName for the Approved By column, and the
queue-wide pendingExposureTotal for the header total.
2026-09-16 22:48:47 -03:00
Alexandre Brandizzi
e0ec8dbc73
Merge remote-tracking branch 'origin/feat/ab/sh-207-uplift-queue' into feat/ab/sh-210-uplift-decisions
2026-09-16 22:48:17 -03:00
Alexandre Brandizzi
fbae09136b
fix(uplifts): update test data service contract (SH-208)
2026-09-16 22:48:07 -03:00
Alexandre Brandizzi
1b73593189
style(uplifts): format queue contract tests (SH-208)
2026-09-16 22:43:51 -03:00
Alexandre Brandizzi
b5e8f038c1
test(uplifts): cover queue contract fields (SH-208)
...
Behavior coverage for the new queue read fields so the contract cannot
regress silently: workOrderClosed follows terminal lifecycle statuses,
decidedByName resolves from the deciding user, attachmentCount counts
active dispatch documents, and pendingExposureTotal sums granted amounts
across all pending requests independent of paging.
2026-09-16 22:38:23 -03:00
Alexandre Brandizzi
bd98ea5629
merge: carry approval queue contract fields into decisions
2026-09-16 22:32:35 -03:00
Alexandre Brandizzi
e0e45d5ed3
feat(uplifts): expose approval queue contract fields (SH-208)
2026-09-16 22:32:23 -03:00
Alexandre Brandizzi
65b04687bc
fix(work-orders): honor edited service labels
2026-09-16 22:30:32 -03:00
Alexandre Brandizzi
b3e9a2eec3
fix(services): allow admins to reactivate services
2026-09-16 22:30:32 -03:00
Alexandre Brandizzi
162bb4d80e
merge: reconcile dashboard review updates
2026-09-16 22:24:20 -03:00
Alexandre Brandizzi
e5e4cd0b58
merge: carry uplift queue corrections into decisions
...
# Conflicts:
# Api.SeaHavenIndustries.Tests/UpliftQueueReadTests.cs
# SeaHaven.DataServices/Implementation/UpliftDataService.cs
2026-09-16 22:21:21 -03:00
Alexandre Brandizzi
316d1e6a63
fix(uplifts): correct queue exposure projections (SH-210)
2026-09-16 22:19:43 -03:00
Alexandre Brandizzi
60e006e8d7
fix(uplifts): calculate granted exposure amounts (SH-207)
2026-09-16 22:17:59 -03:00
Alexandre Brandizzi
dab39e78be
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-348-dashboard-region
2026-09-16 22:06:49 -03:00
Alexandre Brandizzi
6edcd2a463
Merge pull request #138 from Sea-Haven-Industries/feat/ab/sh-353-dashboard-kpis-stacked
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-353: Expose dashboard KPI counts
2026-09-16 22:02:17 -03:00
Alexandre Brandizzi
bdfe666b8d
chore(team-members): sync SH-326 with reviewed branch
2026-09-16 21:56:53 -03:00
Alexandre Brandizzi
8acc580c5b
Merge branch 'dev' into feat/ab/sh-353-dashboard-kpis-stacked
2026-09-16 21:56:23 -03:00
Alexandre Brandizzi
a3a4ddde2a
Merge pull request #143 from Sea-Haven-Industries/feat/ab/sh-330-sites-list
...
SH-330: support site registry queries
2026-09-16 21:54:24 -03:00
Alexandre Brandizzi
db8470fbf9
chore(team-members): sync with dev (SH-325)
2026-09-16 21:52:44 -03:00
Alexandre Brandizzi
a0b9fabb69
fix(team-members): preserve update semantics and validate identity results (SH-326)
2026-09-16 21:48:21 -03:00
Alexandre Brandizzi
b9c916cb22
feat(team-members): add member detail editing (SH-326)
2026-09-16 21:41:55 -03:00
Alexandre Brandizzi
8a00476d38
feat(team-members): support pending member creation (SH-325)
2026-09-16 21:41:55 -03:00
Alexandre Brandizzi
69798b3e86
feat(permissions): protect configured account owner (SH-329)
2026-09-16 21:40:22 -03:00
Alexandre Brandizzi
dca8d898cb
feat(dashboard): add scoped metrics contract (SH-347)
2026-09-16 21:37:17 -03:00
Alexandre Brandizzi
738c9eaf45
feat(work-orders): add region filtering (SH-348)
2026-09-16 21:27:05 -03:00
Adam Moussa
f6bd779fe0
Merge branch 'dev' into feat/ab/sh-353-dashboard-kpis-stacked
2026-09-16 20:00:32 -04:00
Adam Moussa
e7e196caba
Merge branch 'dev' into feat/ab/sh-329-account-owner
2026-09-16 20:00:18 -04:00
Alexandre Brandizzi
9bf45d65ff
Merge branch 'dev' into feat/ab/sh-330-sites-list
2026-09-16 20:58:16 -03:00
Alexandre Brandizzi
db9a94f335
Merge pull request #132 from Sea-Haven-Industries/feat/ab/sh-328-permission-overrides
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-328: expose per-person permission overrides
2026-09-16 20:52:16 -03:00
Alexandre Brandizzi
660ebac628
feat(locations): support site registry queries (SH-330)
2026-09-16 20:45:15 -03:00
Alexandre Brandizzi
21b7083160
Merge branch 'dev' into feat/ab/sh-328-permission-overrides
2026-09-16 20:44:20 -03:00
Alexandre Brandizzi
1c0865ae15
Merge pull request #136 from Sea-Haven-Industries/feat/ab/sh-350-dashboard-trend
...
SH-350: Add dashboard trend metrics
2026-09-16 20:42:14 -03:00
Alexandre Brandizzi
63bda30595
Merge branch 'dev' into feat/ab/sh-328-permission-overrides
2026-09-16 20:36:19 -03:00
Alexandre Brandizzi
c605ceefae
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-16 20:36:16 -03:00
Alexandre Brandizzi
0bda64efc4
Merge branch 'dev' into feat/ab/sh-350-dashboard-trend
2026-09-16 20:36:14 -03:00
Alexandre Brandizzi
452d666547
Merge pull request #142 from Sea-Haven-Industries/fix/ab/sh-374-getworkorderbyid-binding
...
SH-374: return the work order from GetWorkorderById?id=
2026-09-16 20:34:16 -03:00
Alexandre Brandizzi
af441894d7
fix(permissions): clean up overrides on user delete and converge concurrent override writes (SH-328)
...
DeleteUserWithCascadeAsync never removed UserPermissionOverrides rows, and
the FK on UserId is Restrict. Once an override was saved for a member, the
admin hard-delete (DeleteUserAsync -> DeleteUserWithCascadeAsync) failed the
foreign key inside the transaction and the controller surfaced it as a 400,
so the user was never deleted. Add an explicit ExecuteDelete on
UserPermissionOverrides before the user is removed, matching how UserRoles is
already cleared in the same method (no schema change).
SetOverrideAsync was check-then-insert on the composite key with no
DbUpdateException handling, so two concurrent PUTs for the same
(UserId, PermissionKey) let the loser violate PK_UserPermissionOverrides and
return 500. Catch the conflict, detach the pending insert, and converge by
updating the persisted row to the caller's requested state.
2026-09-16 20:27:26 -03:00
Alexandre Brandizzi
e8feed1d1b
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-16 20:26:26 -03:00
Alexandre Brandizzi
fed45f423e
Merge branch 'dev' into feat/ab/sh-350-dashboard-trend
2026-09-16 20:26:23 -03:00