proj/Backend/src/main/java/de/itsolutions/ticketsystem/service/TicketService.java
2026-01-21 09:52:33 +01:00

70 lines
2.7 KiB
Java

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<Ticket> 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<Long> 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);
}
}