Introduce typed token value objects (EventToken, OrganizerToken,
RsvpToken) and refactor all existing Event code to use them.
Add POST /events/{token}/rsvps endpoint that persists an RSVP and
returns an rsvpToken. Populate attendeeCount in GET /events/{token}
from a real count query instead of hardcoded 0.
Includes: OpenAPI spec, Liquibase migration (rsvps table with
ON DELETE CASCADE), domain model, hexagonal ports/adapters,
service layer, and full test coverage (unit + integration).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
51 lines
993 B
Java
51 lines
993 B
Java
package de.fete.domain.model;
|
|
|
|
/** Domain entity representing an RSVP. */
|
|
public class Rsvp {
|
|
|
|
private Long id;
|
|
private RsvpToken rsvpToken;
|
|
private Long eventId;
|
|
private String name;
|
|
|
|
/** Returns the internal database ID. */
|
|
public Long getId() {
|
|
return id;
|
|
}
|
|
|
|
/** Sets the internal database ID. */
|
|
public void setId(Long id) {
|
|
this.id = id;
|
|
}
|
|
|
|
/** Returns the RSVP token. */
|
|
public RsvpToken getRsvpToken() {
|
|
return rsvpToken;
|
|
}
|
|
|
|
/** Sets the RSVP token. */
|
|
public void setRsvpToken(RsvpToken rsvpToken) {
|
|
this.rsvpToken = rsvpToken;
|
|
}
|
|
|
|
/** Returns the event ID this RSVP belongs to. */
|
|
public Long getEventId() {
|
|
return eventId;
|
|
}
|
|
|
|
/** Sets the event ID. */
|
|
public void setEventId(Long eventId) {
|
|
this.eventId = eventId;
|
|
}
|
|
|
|
/** Returns the guest's display name. */
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
/** Sets the guest's display name. */
|
|
public void setName(String name) {
|
|
this.name = name;
|
|
}
|
|
}
|