use of io.gravitee.repository.management.model.Ticket in project gravitee-management-rest-api by gravitee-io.
the class TicketServiceTest method shouldFindById.
@Test
public void shouldFindById() throws TechnicalException {
Ticket ticket = new Ticket();
ticket.setId("ticket1");
ticket.setApi(API_ID);
ticket.setApplication(APPLICATION_ID);
ticket.setSubject(EMAIL_SUBJECT);
ticket.setContent(EMAIL_CONTENT);
ticket.setCreatedAt(new Date());
ticket.setFromUser(USERNAME);
ApiEntity apiEntity = new ApiEntity();
apiEntity.setName("apiName");
ApplicationEntity appEntity = new ApplicationEntity();
appEntity.setName("appName");
when(ticketRepository.findById("ticket1")).thenReturn(Optional.of(ticket));
when(apiService.findById(API_ID)).thenReturn(apiEntity);
when(applicationService.findById(APPLICATION_ID)).thenReturn(appEntity);
TicketEntity ticketEntity = ticketService.findById("ticket1");
assertEquals("ticket1", ticketEntity.getId());
assertEquals("apiName", ticketEntity.getApi());
assertEquals("appName", ticketEntity.getApplication());
}
use of io.gravitee.repository.management.model.Ticket in project gravitee-management-rest-api by gravitee-io.
the class TicketServiceTest method shouldSearchForTicketsFromUser.
@Test
public void shouldSearchForTicketsFromUser() throws TechnicalException {
Ticket ticket = new Ticket();
ticket.setId("generatedId");
ticket.setApi(API_ID);
ticket.setApplication(APPLICATION_ID);
ticket.setSubject(EMAIL_SUBJECT);
ticket.setContent(EMAIL_CONTENT);
ticket.setCreatedAt(new Date());
ticket.setFromUser(USERNAME);
ApiEntity apiEntity = new ApiEntity();
ApplicationEntity appEntity = new ApplicationEntity();
List<Ticket> ticketList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
Ticket t = new Ticket(ticket);
t.setId("ticket" + i);
ticketList.add(t);
}
when(ticketRepository.search(any(TicketCriteria.class), any(Sortable.class), any(Pageable.class))).thenReturn(new Page<>(ticketList, 0, 20, 20));
when(apiService.findById(API_ID)).thenReturn(apiEntity);
when(applicationService.findById(APPLICATION_ID)).thenReturn(appEntity);
TicketQuery query = new TicketQuery();
query.setFromUser("fromUser");
Page<TicketEntity> searchResult = ticketService.search(query, new SortableImpl("subject", true), new PageableImpl(1, Integer.MAX_VALUE));
assertEquals(searchResult.getContent().size(), 20);
assertEquals(searchResult.getPageNumber(), 1);
assertEquals(searchResult.getTotalElements(), 20);
}
use of io.gravitee.repository.management.model.Ticket in project gravitee-management-rest-api by gravitee-io.
the class TicketServiceImpl method create.
@Override
public TicketEntity create(final String userId, final NewTicketEntity ticketEntity, final String referenceId, final ParameterReferenceType referenceType) {
try {
if (!isEnabled(referenceId, referenceType)) {
throw new SupportUnavailableException();
}
LOGGER.info("Creating a support ticket: {}", ticketEntity);
final Map<String, Object> parameters = new HashMap<>();
final UserEntity user = userService.findById(userId);
if (user.getEmail() == null) {
throw new EmailRequiredException(userId);
}
parameters.put("user", user);
final String emailTo;
final ApiModelEntity api;
final ApplicationEntity applicationEntity;
if (ticketEntity.getApi() == null || ticketEntity.getApi().isEmpty()) {
api = null;
final MetadataEntity emailMetadata = metadataService.findDefaultByKey(DefaultMetadataUpgrader.METADATA_EMAIL_SUPPORT_KEY);
if (emailMetadata == null) {
throw new IllegalStateException("The support email metadata has not been found");
}
emailTo = emailMetadata.getValue();
} else {
api = apiService.findByIdForTemplates(ticketEntity.getApi(), true);
final String apiMetadataEmailSupport = api.getMetadata().get(DefaultMetadataUpgrader.METADATA_EMAIL_SUPPORT_KEY);
if (apiMetadataEmailSupport == null) {
throw new IllegalStateException("The support email API metadata has not been found");
}
emailTo = apiMetadataEmailSupport;
parameters.put("api", api);
}
if (DefaultMetadataUpgrader.DEFAULT_METADATA_EMAIL_SUPPORT.equals(emailTo)) {
throw new IllegalStateException("The support email API metadata has not been changed");
}
if (ticketEntity.getApplication() != null && !ticketEntity.getApplication().isEmpty()) {
applicationEntity = applicationService.findById(ticketEntity.getApplication());
parameters.put("application", applicationEntity);
} else {
applicationEntity = null;
}
parameters.put("content", ticketEntity.getContent().replaceAll("(\r\n|\n)", "<br />"));
parameters.put("ticketSubject", ticketEntity.getSubject());
final String fromName = user.getFirstname() == null ? user.getEmail() : user.getFirstname() + ' ' + user.getLastname();
emailService.sendEmailNotification(new EmailNotificationBuilder().replyTo(user.getEmail()).fromName(fromName).to(emailTo).copyToSender(ticketEntity.isCopyToSender()).template(TEMPLATES_FOR_ACTION_SUPPORT_TICKET).params(parameters).build());
sendUserNotification(user, api, applicationEntity);
Ticket ticket = convert(ticketEntity);
ticket.setId(UuidString.generateRandom());
ticket.setCreatedAt(new Date());
ticket.setFromUser(userId);
Ticket createdTicket = ticketRepository.create(ticket);
return convert(createdTicket);
} catch (TechnicalException ex) {
LOGGER.error("An error occurs while trying to create a ticket {}", ticketEntity, ex);
throw new TechnicalManagementException("An error occurs while trying to create a ticket " + ticketEntity, ex);
}
}
use of io.gravitee.repository.management.model.Ticket in project gravitee-management-rest-api by gravitee-io.
the class TicketServiceImpl method search.
@Override
public Page<TicketEntity> search(TicketQuery query, Sortable sortable, Pageable pageable) {
try {
LOGGER.debug("search tickets");
TicketCriteria criteria = queryToCriteriaBuilder(query).build();
Page<Ticket> tickets = ticketRepository.search(criteria, buildSortable(sortable), new PageableBuilder().pageNumber(pageable.getPageNumber() - 1).pageSize(pageable.getPageSize()).build());
List<TicketEntity> entities = tickets.getContent().stream().map(this::getApiNameAndApplicationName).map(this::convert).collect(Collectors.toList());
LOGGER.debug("search tickets - Done with {} elements", entities.size());
return new Page<>(entities, tickets.getPageNumber() + 1, (int) tickets.getPageElements(), tickets.getTotalElements());
} catch (TechnicalException ex) {
LOGGER.error("An error occurs while trying to search tickets", ex);
throw new TechnicalManagementException("An error occurs while trying to search tickets", ex);
}
}
use of io.gravitee.repository.management.model.Ticket in project gravitee-management-rest-api by gravitee-io.
the class TicketServiceImpl method convert.
private Ticket convert(NewTicketEntity ticketEntity) {
if (ticketEntity == null) {
return null;
}
Ticket ticket = new Ticket();
ticket.setApi(ticketEntity.getApi());
ticket.setApplication(ticketEntity.getApplication());
ticket.setSubject(ticketEntity.getSubject());
ticket.setContent(ticketEntity.getContent());
return ticket;
}
Aggregations