feat: add collaborative interview scheduling
Add candidate decisions, co-interviewer accounts, scheduled interview inbox and calendar views, candidate-safe meeting links, shared documents, and private live notes backed by RabbitMQ. Extend the disposable integration environment to validate PostgreSQL migrations, seeded users, interview lifecycle behavior, and RabbitMQ fanout. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
parent
fd06fbbb5d
commit
75e3c73a61
35 changed files with 3621 additions and 58 deletions
18
.github/copilot-instructions.md
vendored
18
.github/copilot-instructions.md
vendored
|
|
@ -5,9 +5,9 @@
|
|||
Run repository-wide commands from the root:
|
||||
|
||||
```bash
|
||||
make dev # run PostgreSQL, API, and frontend with development fixtures
|
||||
make test # complete suite, including disposable PostgreSQL integration tests
|
||||
make test-integration # Go tests; starts its own PostgreSQL Testcontainer
|
||||
make dev # run PostgreSQL, RabbitMQ, API, and frontend with development fixtures
|
||||
make test # complete suite, including disposable infrastructure integration tests
|
||||
make test-integration # Go tests; starts PostgreSQL and RabbitMQ Testcontainers
|
||||
make test-env # isolated seeded UI stack at http://localhost:15173
|
||||
make test-env-down # remove the test stack and its PostgreSQL volume
|
||||
make lint # go vet and ESLint
|
||||
|
|
@ -33,6 +33,10 @@ The required toolchain is Go 1.27.1 and React 19.3 with TypeScript/Vite. Use
|
|||
`internal/database/{repository,mapper,entity}`. Never expose GORM entities from
|
||||
handlers.
|
||||
- `backend/cmd/seed` applies embedded environment-aware fixtures.
|
||||
- `backend/internal/eventbus` publishes persisted interview notes to the durable
|
||||
`go-guess.interview-notes` RabbitMQ fanout exchange. Each API instance consumes
|
||||
through its own exclusive queue and distributes events to authenticated SSE
|
||||
subscribers.
|
||||
- `frontend/src/App.tsx` owns routing/layout/screens, `src/api.ts` is the typed HTTP
|
||||
boundary, and `src/types.ts` contains client domain types. Vite proxies `/api` to
|
||||
the Go service in development.
|
||||
|
|
@ -63,6 +67,14 @@ questions are acceptance-gated and answers are saved before final submission;
|
|||
interviewer review uses
|
||||
`GET /api/jobs/{id}/invitations/{invitationId}`.
|
||||
|
||||
Only completed assessment invitations can receive a `passed` or `failed` outcome,
|
||||
and only passed candidates can be scheduled for an interview. Scheduled
|
||||
interviews include the creator plus selected co-interviewers. Attendees manage
|
||||
their invitation through `/api/inbox`, see accepted interviews in `/api/calendar`,
|
||||
and can write notes only after the interview has started. Notes are private to
|
||||
authenticated attendees. The opaque `/participant/meeting/:candidateToken` view
|
||||
exposes only candidate-safe schedule and shared-document data.
|
||||
|
||||
## Repository conventions
|
||||
|
||||
- Prefix every Go interface name with `I`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue