70 lines
2.7 KiB
Java
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);
|
|
}
|
|
}
|