package de.itsolutions.ticketsystem.service; import de.itsolutions.ticketsystem.dto.Dtos; import de.itsolutions.ticketsystem.entity.Room; import de.itsolutions.ticketsystem.entity.Ticket; import de.itsolutions.ticketsystem.entity.User; import de.itsolutions.ticketsystem.repository.RoomRepository; import de.itsolutions.ticketsystem.repository.TicketRepository; import de.itsolutions.ticketsystem.repository.UserRepository; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @Service public class TicketService { private final TicketRepository ticketRepository; private final RoomRepository roomRepository; private final UserRepository userRepository; public TicketService(TicketRepository ticketRepository, RoomRepository roomRepository, UserRepository userRepository) { this.ticketRepository = ticketRepository; this.roomRepository = roomRepository; this.userRepository = userRepository; } public Ticket createTicket(Dtos.TicketRequest request, String ownerEmail) { User owner = userRepository.findByEmail(ownerEmail) .orElseThrow(() -> new RuntimeException("User not found")); Room room = roomRepository.findById(request.getRoomId()) .orElseThrow(() -> new RuntimeException("Room not found")); Ticket ticket = new Ticket(); ticket.setRoom(room); ticket.setTitle(request.getTitle()); ticket.setDescription(request.getDescription()); ticket.setOwner(owner); return ticketRepository.save(ticket); } public List getTicketsForUser(String email) { User user = userRepository.findByEmail(email) .orElseThrow(() -> new RuntimeException("User not found")); if ("LEHRKRAFT".equals(user.getRole())) { return ticketRepository.findByOwnerIdOrderByCreatedAtDesc(user.getId()); } else if ("RAUMBETREUER".equals(user.getRole())) { List roomIds = user.getSupervisedRooms().stream() .map(Room::getId) .collect(Collectors.toList()); if (roomIds.isEmpty()) { return Collections.emptyList(); } return ticketRepository.findByRoomIdInOrderByCreatedAtDesc(roomIds); } return Collections.emptyList(); } public Ticket updateTicketStatus(Long ticketId, String status) { Ticket ticket = ticketRepository.findById(ticketId) .orElseThrow(() -> new RuntimeException("Ticket not found")); ticket.setStatus(status); return ticketRepository.save(ticket); } }