Create Event Implementation
In this lesson, we'll implement the service layer logic to create events in our event tick platform.
Implementation Details
The event creation service needs two pieces of information: the organizer's ID and the event details.
@Service
@RequiredArgsConstructor
public class EventServiceImpl implements EventService {
private final UserRepository userRepository;
private final EventRepository eventRepository;
@Override
public Event createEvent(UUID organizerId, CreateEventRequest event) {
// Find the organizer or throw an exception if not found
User organizer = userRepository.findById(organizerId)
.orElseThrow(() -> new UserNotFoundException(
String.format("User with ID '%s' not found", organizerId))
);
// Create ticket types
List<TicketType> ticketTypesToCreate = event.getTicketTypes().stream().map(
ticketType -> {
TicketType ticketTypeToCreate = new TicketType();
ticketTypeToCreate.setName(ticketType.getName());
ticketTypeToCreate.setPrice(ticketType.getPrice());
ticketTypeToCreate.setDescription(ticketType.getDescription());
ticketTypeToCreate.setTotalAvailable(ticketType.getTotalAvailable());
return ticketTypeToCreate;
}).toList();
// Create and populate the event
Event eventToCreate = new Event();
eventToCreate.setName(event.getName());
eventToCreate.setStart(event.getStart());
eventToCreate.setEnd(event.getEnd());
eventToCreate.setVenue(event.getVenue());
eventToCreate.setSalesStart(event.getSalesStart());
eventToCreate.setSalesEnd(event.getSalesEnd());
eventToCreate.setStatus(event.getStatus());
eventToCreate.setOrganizer(organizer);
eventToCreate.setTicketTypes(ticketTypesToCreate);
return eventRepository.save(eventToCreate);
}
}Error Handling
The service includes error handling for cases where the organizer doesn't exist:
- We use
userRepository.findById()to look up the organizer - If not found, we throw a
UserNotFoundExceptionwith a clear message - The exception includes the ID that wasn't found to help with troubleshooting
Summary
- Created the
EventRepositoryinterface - Created the
EventServiceImplclass - Implemented the
createEventmethod