Skip to content

Fix/vet to un assign from case#257

Merged
annikaholmqvist94 merged 6 commits into
mainfrom
fix/vet-to-un-assign-from-case
Apr 24, 2026
Merged

Fix/vet to un assign from case#257
annikaholmqvist94 merged 6 commits into
mainfrom
fix/vet-to-un-assign-from-case

Conversation

@annikaholmqvist94

@annikaholmqvist94 annikaholmqvist94 commented Apr 23, 2026

Copy link
Copy Markdown
Contributor

Tillåter VET att släppa ärenden hen själv är tilldelad, så att ärendet blir ledigt för en kollega att ta över.
"bara den assignade VET:en + ADMIN får un-assigna, kollegor på samma klinik ska inte kunna rycka ärenden från varandra".

Beteende

VET kan:

  • Släppa ett ärende hen är tilldelad (knapp visas bara då)

VET kan inte:

  • Släppa ärenden hen inte är tilldelad (knapp döljs i UI + 403 från policy om endpoint anropas direkt)
  • Släppa stängda ärenden (422)

ADMIN kan: släppa vilket ärende som helst.

OWNER: 403 (oförändrat).

Statuspåverkan

Speglar assignVet-logiken som sätter IN_PROGRESS:

  • Status IN_PROGRESS → OPEN (ärendet blir ledigt igen)
  • Status AWAITING_INFO eller annan VET-satt status → bevaras
  • Status CLOSED → endpoint kastar 422

Ändringar

Backend

  • ActivityType.java — nytt enum-värde UNASSIGNED
  • MedicalRecordPolicy.java — ny canUnassignVet(user, record): OWNER 403, VET endast om record.getAssignedVet().id == user.id, ADMIN ok, CLOSED kastar
    BusinessRuleException
  • MedicalRecordService.java — ny unassignVet(recordId, updatedBy): kastar 422 om ingen handläggare finns, sätter assignedVet = null, återställer
    IN_PROGRESS → OPEN, loggar "Veterinär {namn} har släppt ärendet"
  • MedicalRecordController.java — ny endpoint PUT /api/medical-records/{id}/unassign-vet (ingen body)
  • SecurityConfig.java — URL-regel PUT /api/medical-records/*/unassign-vet → hasAnyRole("VET", "ADMIN")

Backend-tester (12 nya)

  • MedicalRecordPolicyTest: owner/vet-self/vet-colleague/vet-without-assignee/admin/admin-no-assignee/closed
  • MedicalRecordServiceTest: clear-assigned-vet, status-reset-from-IN_PROGRESS, status-preserved-from-AWAITING_INFO, exakt loggtext med vet-namn,
    already-unassigned-throws

Frontend

  • api.jsx — ny unassignVet(id)
  • CaseDetail.jsx:
    • Ny handleReleaseCase med window.confirm, uppdaterar lokal status och refetchar activity log
    • Ny "Släpp ärende"-knapp (UserMinus-ikon) i VET-panelen, bredvid "Stäng Journal"
    • Villkorlig rendering: knappen visas endast om caseData.assignedVetId === currentUserId
    • UserMinus importerad från lucide-react

Test plan

  • ./mvnw test — 512/512 gröna
  • VET öppnar eget tilldelat ärende → "Släpp ärende"-knapp syns bredvid "Stäng Journal"
  • VET öppnar kollegans tilldelade ärende → knappen syns inte
  • VET klickar "Släpp ärende" → confirm → efter bekräftelse: assignedVet rensas, status återgår till "Öppen" (om den var IN_PROGRESS), loggen visar
    "Veterinär [namn] har släppt ärendet"
  • VET försöker släppa ett otilldelat ärende via direkt API-anrop → 403
  • VET försöker släppa ett stängt ärende → 422
  • OWNER försöker släppa via direkt API-anrop → 403
  • ADMIN kan släppa vilket tilldelat ärende som helst
    Closes VET kan ej avregistrera sig från ett ärende #243

@coderabbitai

coderabbitai Bot commented Apr 23, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@annikaholmqvist94 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 6 minutes and 27 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 6 minutes and 27 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7d7886c6-87a3-4de7-b016-c3f8631fe9e7

📥 Commits

Reviewing files that changed from the base of the PR and between 2a6965b and 2cd5032.

📒 Files selected for processing (9)
  • frontend/src/pages/CaseDetail.jsx
  • frontend/src/services/api.jsx
  • src/main/java/org/example/vet1177/controller/MedicalRecordController.java
  • src/main/java/org/example/vet1177/entities/ActivityType.java
  • src/main/java/org/example/vet1177/policy/MedicalRecordPolicy.java
  • src/main/java/org/example/vet1177/security/SecurityConfig.java
  • src/main/java/org/example/vet1177/services/MedicalRecordService.java
  • src/test/java/org/example/vet1177/policy/MedicalRecordPolicyTest.java
  • src/test/java/org/example/vet1177/services/MedicalRecordServiceTest.java
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/vet-to-un-assign-from-case

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@annikaholmqvist94
annikaholmqvist94 merged commit c9de25e into main Apr 24, 2026
2 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.

VET kan ej avregistrera sig från ett ärende

1 participant