#268 Код-ревью сервиса создания тикетов
Сделать код-ревью:
@Service
class TicketService {
@Autowired
public UserRepository userRepository;
@Autowired
public TicketRepository ticketRepository;
@Autowired
private NotificationService notificationService;
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional(
propagation = Propagation.REQUIRES_NEW,
isolation = Isolation.REPEATABLE_READ
)
public String createTicket(String username, String password, String content) {
Collection<Ticket> tickets = ticketRepository.findByUsername(username);
boolean canCreateTicket = true;
for (Ticket ticket : tickets) {
if ("OPEN" == ticket.getStatus()) {
canCreateTicket = false;
}
}
if (!canCreateTicket) {
return "Can not create ticket";
}
long newTicketId = tickets.stream()
.map(Ticket::getId)
.max(Long::compare)
.map(maxTicketId -> maxTicketId + 1)
.orElse(1L);
Optional<User> userOptional = userRepository.findByUsernameAndPassword(username, password);
if (userOptional.get() == null) {
return "User not found or password is incorrect";
}
User user = userOptional.get();
Ticket newTicket = new Ticket(newTicketId, user, "OPEN", content);
ticketRepository.save(newTicket);
notificationService.sendNotification(newTicketId);
jdbcTemplate.execute(
("INSERT INTO public.ticket_history (ticket_id, status, created_by, created_at) "
+ "VALUES (%d, '%s', '%s', CURRENT_TIMESTAMP)")
.formatted(newTicket.getId(), "OPEN", username)
);
return "OK";
}
}
Разбор вопроса
Войди, чтобы начать диалог
Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти
Доступно с Premium
Это лишь одно из решений, доступных с Premium. А ещё:
- 250+ продвинутых лекций
- 1300+ практических заданий
- 500+ решений задач с реальных собеседований
- Именные сертификаты Java Hub
- Расширенный доступ к AI-ментору