import 정리

This commit is contained in:
현성필
2024-05-07 14:39:54 +09:00
parent ac88b6388e
commit c3afff535a
79 changed files with 294 additions and 254 deletions
@@ -2,7 +2,6 @@ package com.eactive.testmaster.api.condition;
import com.eactive.testmaster.api.dto.MockRequest;
import com.eactive.testmaster.api.entity.MockCondition;
import java.util.Map;
public interface ConditionMatcher {
@@ -1,11 +1,10 @@
package com.eactive.testmaster.api.condition;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
@Service(value = "ConditionMatcherService")
public class ConditionMatcherService {
@@ -2,9 +2,8 @@ package com.eactive.testmaster.api.condition;
import com.eactive.testmaster.api.dto.MockRequest;
import com.eactive.testmaster.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component
public class HeaderMatcher implements ConditionMatcher {
@@ -4,9 +4,8 @@ import com.eactive.testmaster.api.dto.MockRequest;
import com.eactive.testmaster.api.entity.MockCondition;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.PathNotFoundException;
import org.springframework.stereotype.Component;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component
@@ -2,9 +2,8 @@ package com.eactive.testmaster.api.condition;
import com.eactive.testmaster.api.dto.MockRequest;
import com.eactive.testmaster.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component
public class PathMatcher implements ConditionMatcher {
@@ -2,9 +2,8 @@ package com.eactive.testmaster.api.condition;
import com.eactive.testmaster.api.dto.MockRequest;
import com.eactive.testmaster.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component
@@ -7,6 +7,11 @@ import com.eactive.testmaster.api.entity.MockCondition;
import com.eactive.testmaster.api.entity.MockResponse;
import com.eactive.testmaster.api.entity.MockRoute;
import com.eactive.testmaster.api.service.MockRouteService;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
@@ -15,12 +20,6 @@ import org.springframework.http.ResponseEntity;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
public class MockApiController {
@@ -3,6 +3,8 @@ package com.eactive.testmaster.api.controller;
import com.eactive.testmaster.api.entity.MockRoute;
import com.eactive.testmaster.api.service.MockRouteService;
import com.eactive.testmaster.config.CsrfExclusionService;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,9 +13,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
@Component
public class MockApiHandlerMapping {
@@ -7,6 +7,8 @@ import com.eactive.testmaster.api.dto.MockRouteUpdateDTO;
import com.eactive.testmaster.api.entity.MockRoute;
import com.eactive.testmaster.api.mapper.MockRouteMapper;
import com.eactive.testmaster.api.service.MockRouteService;
import java.util.List;
import javax.annotation.PostConstruct;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -15,12 +17,13 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.PostConstruct;
import java.util.List;
@Controller
@RequestMapping("/mgmt/routes")
public class MockRouteMgmtController {
@@ -1,11 +1,11 @@
package com.eactive.testmaster.api.dto;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
public class MockRequest {
@@ -1,8 +1,8 @@
package com.eactive.testmaster.api.dto;
import javax.validation.constraints.Min;
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.Min;
public class MockResponseDTO {
@@ -1,11 +1,10 @@
package com.eactive.testmaster.api.dto;
import com.eactive.testmaster.common.validator.UniqueRoute;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
@UniqueRoute(path = "pathPattern", method = "method")
public class MockRouteRegisterDTO {
@@ -5,7 +5,6 @@ import com.eactive.testmaster.common.search.BaseSearch;
import com.eactive.testmaster.common.search.ColumnSearchModel;
import com.eactive.testmaster.common.search.SearchCondition;
import com.eactive.testmaster.common.search.SearchModel;
import java.util.ArrayList;
import java.util.List;
@@ -1,9 +1,9 @@
package com.eactive.testmaster.api.dto;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
public class MockRouteUpdateDTO {
@@ -1,7 +1,13 @@
package com.eactive.testmaster.api.entity;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "MOCK_RESPONSE_CONDITION")
@@ -1,10 +1,23 @@
package com.eactive.testmaster.api.entity;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.CascadeType;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.MapKeyColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "MOCK_RESPONSE")
@@ -1,8 +1,15 @@
package com.eactive.testmaster.api.entity;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@@ -7,17 +7,16 @@ import com.eactive.testmaster.api.dto.MockRouteUpdateDTO;
import com.eactive.testmaster.api.entity.MockResponse;
import com.eactive.testmaster.api.entity.MockRoute;
import com.eactive.testmaster.common.mapper.CommonMapper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.ReportingPolicy;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Mapper(componentModel = "spring",
uses = {CommonMapper.class},
unmappedTargetPolicy = ReportingPolicy.IGNORE)
@@ -5,6 +5,10 @@ import com.eactive.testmaster.api.entity.MockResponse;
import com.eactive.testmaster.api.entity.MockRoute;
import com.eactive.testmaster.api.repository.MockRouteRepository;
import com.eactive.testmaster.common.exception.NotFoundException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import javax.transaction.Transactional;
import org.apache.commons.beanutils.BeanUtils;
import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,11 +17,6 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional
public class MockRouteService {
@@ -2,13 +2,12 @@ package com.eactive.testmaster.client.controller;
import com.eactive.testmaster.server.entity.Server;
import com.eactive.testmaster.server.repository.ServerRepository;
import java.util.List;
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
@Controller
public class ApiClientPageController {
@@ -12,12 +12,14 @@ import com.eactive.testmaster.client.service.ApiRequestMgmtService;
import com.eactive.testmaster.common.util.SecurityUtil;
import com.eactive.testmaster.user.entity.StaffUser;
import com.eactive.testmaster.user.service.UserService;
import javax.transaction.Transactional;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import javax.transaction.Transactional;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiRequestMgmtController {
@@ -7,11 +7,14 @@ import com.eactive.testmaster.client.service.ApiScenarioMgmtService;
import com.eactive.testmaster.common.util.SecurityUtil;
import com.eactive.testmaster.user.entity.StaffUser;
import com.eactive.testmaster.user.service.UserService;
import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/mgmt/api_scenario")
@@ -1,8 +1,8 @@
package com.eactive.testmaster.client.dto;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.NotEmpty;
public class ApiCollectionDTO {
@@ -1,6 +1,5 @@
package com.eactive.testmaster.client.dto;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
@@ -253,60 +252,60 @@ public class ApiLayoutItemTreeBuilder {
return siblings.get(closestIndex);
}
public static void main(String[] args) {
ApiLayoutItemDTO root = new ApiLayoutItemDTO();
root.setId(1L);
root.setLoutName("ROOT");
root.setLoutItemDepth(0);
root.setChildren(new ArrayList<>(List.of(
new ApiLayoutItemDTO(2L, 1L, "Field", "Child 2", 1, 10, "TEST11"),
new ApiLayoutItemDTO(3L, 1L, "Group", "Child 3", 1, 0, ""),
new ApiLayoutItemDTO(4L, 1L, "Field", "Child 4", 1, 10, "TEST21"),
new ApiLayoutItemDTO(5L, 1L, "Field", "Child 5", 1, 10, "TEST22"),
// new ApiLayoutItemDTO(6L, 1L, "Group", "Child 6", 1, 0, ""),
new ApiLayoutItemDTO(7L, 1L, "Field", "Child 7", 1, 10, "TEST31"),
new ApiLayoutItemDTO(8L, 1L, "Field", "Child 8", 1, 10, "TEST33"),
new ApiLayoutItemDTO(9L, 1L, "Group", "Child 9", 1, 0, ""),
new ApiLayoutItemDTO(10L, 1L, "Field", "Child 10", 1, 10, "TEST31"),
new ApiLayoutItemDTO(11L, 1L, "Field", "Child 11", 1, 10, "TEST33")
)));
for (ApiLayoutItemDTO item : root.getChildren()) {
item.setChildOccCnt(1);
}
System.out.println("Before moving:");
printTree(root);
moveNodeDepth(root, getNodeById(root, 4L), getNodeById(root, 4L).getLoutItemDepth() + 1);
printTree(root);
moveNodeDepth(root, getNodeById(root, 5L), getNodeById(root, 5L).getLoutItemDepth() + 1);
printTree(root);
moveNodeDepth(root, getNodeById(root, 7L), getNodeById(root, 7L).getLoutItemDepth() + 1);
printTree(root);
moveNodeDepth(root, getNodeById(root, 8L), getNodeById(root, 8L).getLoutItemDepth() + 1);
printTree(root);
moveNodeDepth(root, getNodeById(root, 10L), getNodeById(root, 10L).getLoutItemDepth() + 1);
printTree(root);
moveNodeDepth(root, getNodeById(root, 11L), getNodeById(root, 11L).getLoutItemDepth() + 1);
printTree(root);
moveNodeDepth(root, getNodeById(root, 9L), getNodeById(root, 9L).getLoutItemDepth() + 1);
printTree(root);
// moveNodeDepth(root, getNodeById(root, 6L), getNodeById(root, 6L).getLoutItemDepth() + 1);
// public static void main(String[] args) {
// ApiLayoutItemDTO root = new ApiLayoutItemDTO();
// root.setId(1L);
// root.setLoutName("ROOT");
// root.setLoutItemDepth(0);
// root.setChildren(new ArrayList<>(List.of(
// new ApiLayoutItemDTO(2L, 1L, "Field", "Child 2", 1, 10, "TEST11"),
// new ApiLayoutItemDTO(3L, 1L, "Group", "Child 3", 1, 0, ""),
// new ApiLayoutItemDTO(4L, 1L, "Field", "Child 4", 1, 10, "TEST21"),
// new ApiLayoutItemDTO(5L, 1L, "Field", "Child 5", 1, 10, "TEST22"),
//// new ApiLayoutItemDTO(6L, 1L, "Group", "Child 6", 1, 0, ""),
// new ApiLayoutItemDTO(7L, 1L, "Field", "Child 7", 1, 10, "TEST31"),
// new ApiLayoutItemDTO(8L, 1L, "Field", "Child 8", 1, 10, "TEST33"),
// new ApiLayoutItemDTO(9L, 1L, "Group", "Child 9", 1, 0, ""),
// new ApiLayoutItemDTO(10L, 1L, "Field", "Child 10", 1, 10, "TEST31"),
// new ApiLayoutItemDTO(11L, 1L, "Field", "Child 11", 1, 10, "TEST33")
// )));
//
// for (ApiLayoutItemDTO item : root.getChildren()) {
// item.setChildOccCnt(1);
// }
//
// System.out.println("Before moving:");
// printTree(root);
moveNodeDepth(root, getNodeById(root, 9L), getNodeById(root, 9L).getLoutItemDepth() - 1);
printTree(root);
moveNodeDepth(root, getNodeById(root, 9L), getNodeById(root, 9L).getLoutItemDepth() - 1);
printTree(root);
moveNode(root, getNodeById(root, 9L), true);
moveNodeDepth(root, getNodeById(root, 3L), getNodeById(root, 3L).getLoutItemDepth() + 1);
printTree(root);
ApiLayoutDTO layout = new ApiLayoutDTO();
layout.setComputedLayoutItemRoot(root);
System.out.println(layout.buildMessage());
}
//
// moveNodeDepth(root, getNodeById(root, 4L), getNodeById(root, 4L).getLoutItemDepth() + 1);
// printTree(root);
// moveNodeDepth(root, getNodeById(root, 5L), getNodeById(root, 5L).getLoutItemDepth() + 1);
// printTree(root);
// moveNodeDepth(root, getNodeById(root, 7L), getNodeById(root, 7L).getLoutItemDepth() + 1);
// printTree(root);
// moveNodeDepth(root, getNodeById(root, 8L), getNodeById(root, 8L).getLoutItemDepth() + 1);
// printTree(root);
// moveNodeDepth(root, getNodeById(root, 10L), getNodeById(root, 10L).getLoutItemDepth() + 1);
// printTree(root);
// moveNodeDepth(root, getNodeById(root, 11L), getNodeById(root, 11L).getLoutItemDepth() + 1);
// printTree(root);
// moveNodeDepth(root, getNodeById(root, 9L), getNodeById(root, 9L).getLoutItemDepth() + 1);
// printTree(root);
//// moveNodeDepth(root, getNodeById(root, 6L), getNodeById(root, 6L).getLoutItemDepth() + 1);
//// printTree(root);
// moveNodeDepth(root, getNodeById(root, 9L), getNodeById(root, 9L).getLoutItemDepth() - 1);
// printTree(root);
//
// moveNodeDepth(root, getNodeById(root, 9L), getNodeById(root, 9L).getLoutItemDepth() - 1);
// printTree(root);
//
// moveNode(root, getNodeById(root, 9L), true);
//
// moveNodeDepth(root, getNodeById(root, 3L), getNodeById(root, 3L).getLoutItemDepth() + 1);
// printTree(root);
//
// ApiLayoutDTO layout = new ApiLayoutDTO();
// layout.setComputedLayoutItemRoot(root);
// System.out.println(layout.buildMessage());
// }
}
@@ -1,9 +1,9 @@
package com.eactive.testmaster.client.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import javax.validation.constraints.NotNull;
public class ApiRequestDTO implements Serializable {
@@ -2,7 +2,6 @@ package com.eactive.testmaster.client.dto.internal;
import com.eactive.testmaster.client.dto.ApiRequestDTO;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -1,10 +1,15 @@
package com.eactive.testmaster.client.entity;
import com.eactive.testmaster.user.entity.StaffUser;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "API_COLLECTION")
@@ -2,10 +2,13 @@ package com.eactive.testmaster.client.entity;
import com.eactive.testmaster.server.entity.Server;
import com.eactive.testmaster.user.entity.StaffUser;
import org.hibernate.annotations.Type;
import javax.persistence.*;
import java.time.LocalDateTime;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Type;
public class ApiRequestHistory {
@Id
@@ -2,9 +2,13 @@ package com.eactive.testmaster.client.entity;
import com.eactive.testmaster.server.entity.Server;
import com.eactive.testmaster.user.entity.StaffUser;
import javax.persistence.*;
import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@@ -1,8 +1,12 @@
package com.eactive.testmaster.client.entity;
import com.eactive.testmaster.user.entity.StaffUser;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "API_SCENARIO")
@@ -4,7 +4,6 @@ import com.eactive.testmaster.client.dto.ApiLayoutItemDTO;
import com.eactive.testmaster.client.entity.ApiLayoutItem;
import com.eactive.testmaster.client.repository.ApiLayoutItemRepository;
import com.eactive.testmaster.common.mapper.CommonMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@@ -3,13 +3,12 @@ package com.eactive.testmaster.client.mapper;
import com.eactive.testmaster.client.dto.ApiScenarioDTO;
import com.eactive.testmaster.client.entity.ApiScenario;
import com.eactive.testmaster.client.repository.ApiScenarioRepository;
import java.util.List;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
@Component
public abstract class ApiScenarioMapper {
@@ -2,11 +2,10 @@ package com.eactive.testmaster.client.repository;
import com.eactive.testmaster.client.entity.ApiCollection;
import com.eactive.testmaster.user.entity.StaffUser;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
public interface ApiCollectionRepository extends JpaRepository<ApiCollection, String>, JpaSpecificationExecutor<ApiCollection> {
List<ApiCollection> findAllByOwner(StaffUser owner);
@@ -2,11 +2,10 @@ package com.eactive.testmaster.client.repository;
import com.eactive.testmaster.client.entity.ApiScenario;
import com.eactive.testmaster.user.entity.StaffUser;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
public interface ApiScenarioRepository extends JpaRepository<ApiScenario, String>, JpaSpecificationExecutor<ApiScenario> {
List<ApiScenario> findAllByOwner(StaffUser owner);
@@ -6,14 +6,13 @@ import com.eactive.testmaster.client.repository.ApiCollectionRepository;
import com.eactive.testmaster.client.repository.ApiRequestRepository;
import com.eactive.testmaster.common.exception.NotFoundException;
import com.eactive.testmaster.user.entity.StaffUser;
import java.util.List;
import java.util.UUID;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.StringUtils;
import javax.transaction.Transactional;
import java.util.List;
import java.util.UUID;
@Service
@Transactional
public class ApiRequestMgmtService {
@@ -1,17 +1,16 @@
package com.eactive.testmaster.client.service;
import com.eactive.testmaster.client.repository.ApiRequestRepository;
import java.sql.Connection;
import java.sql.Statement;
import javax.sql.DataSource;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import javax.transaction.Transactional;
import java.sql.Connection;
import java.sql.Statement;
@Service
@Transactional
@@ -2,12 +2,11 @@ package com.eactive.testmaster.client.service;
import com.eactive.testmaster.client.entity.ApiScenario;
import com.eactive.testmaster.client.repository.ApiScenarioRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
import java.util.UUID;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Transactional
@@ -7,7 +7,6 @@ import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.util.CharsetUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -15,20 +15,29 @@ import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.http.*;
import io.netty.handler.codec.http.DefaultFullHttpRequest;
import io.netty.handler.codec.http.DefaultHttpHeaders;
import io.netty.handler.codec.http.HttpClientCodec;
import io.netty.handler.codec.http.HttpContentDecompressor;
import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.codec.http.HttpHeaderValues;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpVersion;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.util.CharsetUtil;
import java.util.concurrent.CompletableFuture;
import javax.net.ssl.SSLException;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.net.ssl.SSLException;
import java.util.concurrent.CompletableFuture;
@Service
public class NettyHttpApiClient implements ApiClient {
@@ -1,5 +1,9 @@
package com.eactive.testmaster.common.entity;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import org.hibernate.annotations.Type;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
@@ -7,11 +11,6 @@ import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Auditable {
@@ -1,5 +1,6 @@
package com.eactive.testmaster.common.exception;
import java.time.LocalDateTime;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -9,8 +10,6 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import java.time.LocalDateTime;
@Order(1)
@RestControllerAdvice(annotations = RestController.class)
public class CustomGlobalExceptionHandler extends ResponseEntityExceptionHandler {
@@ -1,14 +1,13 @@
package com.eactive.testmaster.common.exception;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
@Controller
public class PortalErrorController implements ErrorController {
@@ -1,6 +1,7 @@
package com.eactive.testmaster.common.exception;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
@@ -9,8 +10,6 @@ import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
@ControllerAdvice(annotations = Controller.class)
@Order(2)
public class PortalGlobalExceptionHandler {
@@ -1,17 +1,16 @@
package com.eactive.testmaster.common.mapper;
import com.eactive.testmaster.client.dto.ApiRequestKeyValueDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Named;
import org.mapstruct.ReportingPolicy;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import org.mapstruct.Mapper;
import org.mapstruct.Named;
import org.mapstruct.ReportingPolicy;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.util.StringUtils;
@Mapper(componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.IGNORE)
@@ -1,13 +1,12 @@
package com.eactive.testmaster.common.message;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
public class PortalReloadableResourceBundleMessageSource extends org.springframework.context.support.ReloadableResourceBundleMessageSource {
private static final String CLASSPATH_PREFIX = "classpath:";
@@ -1,8 +1,7 @@
package com.eactive.testmaster.common.search;
import org.springframework.data.jpa.domain.Specification;
import java.util.List;
import org.springframework.data.jpa.domain.Specification;
/**
* Overview:
@@ -1,11 +1,10 @@
package com.eactive.testmaster.common.search;
import com.eactive.testmaster.common.util.SpecificationUtil;
import java.util.Collection;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.ObjectUtils;
import java.util.Collection;
public class ColumnSearchModel implements SearchModel {
private String column;
@@ -1,8 +1,7 @@
package com.eactive.testmaster.common.search;
import org.springframework.data.jpa.domain.Specification;
import java.io.Serializable;
import org.springframework.data.jpa.domain.Specification;
public interface SearchModel extends Serializable {
@@ -1,11 +1,10 @@
package com.eactive.testmaster.common.util;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
/**
* @author
@@ -1,11 +1,14 @@
package com.eactive.testmaster.common.util;
import java.util.Collection;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root;
import org.hibernate.query.criteria.internal.path.PluralAttributePath;
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.*;
import java.util.Collection;
public class SpecificationUtil {
@@ -1,8 +1,12 @@
package com.eactive.testmaster.common.validator;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Constraint(validatedBy = PasswordMatchValidator.class)
@Target({ElementType.TYPE})
@@ -1,14 +1,13 @@
package com.eactive.testmaster.common.validator;
import com.eactive.testmaster.common.util.ApplicationContextUtil;
import java.util.Objects;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Objects;
public class PasswordMatchValidator implements ConstraintValidator<PasswordMatch, Object> {
private String field1;
@@ -1,8 +1,12 @@
package com.eactive.testmaster.common.validator;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Constraint(validatedBy = UniqueUserIdValidator.class)
@Target({ElementType.FIELD})
@@ -1,8 +1,12 @@
package com.eactive.testmaster.common.validator;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Constraint(validatedBy = UniqueRouteValidator.class)
@Target({ElementType.TYPE})
@@ -2,10 +2,9 @@ package com.eactive.testmaster.common.validator;
import com.eactive.testmaster.api.repository.MockRouteRepository;
import com.eactive.testmaster.common.util.ApplicationContextUtil;
import org.apache.commons.beanutils.PropertyUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.apache.commons.beanutils.PropertyUtils;
public class UniqueRouteValidator implements ConstraintValidator<UniqueRoute, Object> {
@@ -3,7 +3,6 @@ package com.eactive.testmaster.common.validator;
import com.eactive.testmaster.common.exception.UserNotFoundException;
import com.eactive.testmaster.common.util.ApplicationContextUtil;
import com.eactive.testmaster.user.service.UserService;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
@@ -1,9 +1,8 @@
package com.eactive.testmaster.config;
import com.eactive.testmaster.common.util.SecurityUtil;
import org.springframework.data.domain.AuditorAware;
import java.util.Optional;
import org.springframework.data.domain.AuditorAware;
public class AuditorAwareImpl implements AuditorAware<String> {
@@ -7,6 +7,9 @@ import com.eactive.testmaster.user.entity.StaffUser;
import com.eactive.testmaster.user.entity.User;
import com.eactive.testmaster.user.repository.StaffUserRepository;
import com.eactive.testmaster.user.service.UserService;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.AuthenticationException;
@@ -15,10 +18,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Service
@Transactional
public class PortalAuthenticationFailureHandler implements AuthenticationFailureHandler {
@@ -5,7 +5,11 @@ import com.eactive.testmaster.common.util.EncryptionUtil;
import com.eactive.testmaster.user.entity.User;
import com.eactive.testmaster.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.*;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.LockedException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -2,6 +2,11 @@ package com.eactive.testmaster.config;
import com.eactive.testmaster.user.entity.User;
import com.eactive.testmaster.user.service.UserService;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
@@ -9,12 +14,6 @@ import org.springframework.security.web.authentication.AuthenticationSuccessHand
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Service
@Transactional
@@ -1,6 +1,5 @@
package com.eactive.testmaster.config;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.springframework.context.annotation.Bean;
@@ -1,12 +1,6 @@
package com.eactive.testmaster.loadtest.dto;
import com.eactive.testmaster.client.entity.ApiScenario;
import com.eactive.testmaster.user.entity.StaffUser;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
public class LoadTestDTO {
private String id;
@@ -3,7 +3,6 @@ package com.eactive.testmaster.loadtest.service;
import com.eactive.testmaster.loadtest.dto.LoadTestDTO;
import java.util.Map;
import java.util.concurrent.Callable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1,6 +1,10 @@
package com.eactive.testmaster.login.controller;
import com.eactive.testmaster.user.service.UserService;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
@@ -12,11 +16,6 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Map;
/**
* 일반 로그인을 처리하는 컨트롤러 클래스
*
@@ -5,6 +5,7 @@ import com.eactive.testmaster.server.dto.ServerSearch;
import com.eactive.testmaster.server.entity.Server;
import com.eactive.testmaster.server.mapper.ServerMapper;
import com.eactive.testmaster.server.service.ServerMgmtService;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -13,9 +14,11 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@@ -5,10 +5,9 @@ import com.eactive.testmaster.common.search.ColumnSearchModel;
import com.eactive.testmaster.common.search.SearchCondition;
import com.eactive.testmaster.common.search.SearchModel;
import com.eactive.testmaster.server.entity.Server;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public class ServerSearch implements BaseSearch<Server> {
@@ -1,11 +1,10 @@
package com.eactive.testmaster.server.repository;
import com.eactive.testmaster.server.entity.Server;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
public interface ServerRepository extends JpaRepository<Server, Long>, JpaSpecificationExecutor<Server> {
@@ -3,14 +3,13 @@ package com.eactive.testmaster.server.service;
import com.eactive.testmaster.common.exception.NotFoundException;
import com.eactive.testmaster.server.entity.Server;
import com.eactive.testmaster.server.repository.ServerRepository;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service
@Transactional
public class ServerMgmtService {
@@ -15,7 +15,11 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/mgmt/users")
@@ -1,7 +1,6 @@
package com.eactive.testmaster.user.dto;
import com.eactive.testmaster.common.validator.PasswordMatch;
import javax.validation.constraints.NotEmpty;
@PasswordMatch(input = "newPassword", confirm = "newPassword2")
@@ -3,10 +3,9 @@ package com.eactive.testmaster.user.dto;
import com.eactive.testmaster.common.validator.PasswordMatch;
import com.eactive.testmaster.common.validator.UniqueId;
import com.eactive.testmaster.user.entity.UserStatus;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import org.hibernate.validator.constraints.Length;
@PasswordMatch(input = "password", confirm = "password2")
public class UserRegisterDTO implements Serializable {
@@ -6,7 +6,6 @@ import com.eactive.testmaster.common.search.SearchCondition;
import com.eactive.testmaster.common.search.SearchModel;
import com.eactive.testmaster.user.entity.StaffUser;
import com.eactive.testmaster.user.entity.UserStatus;
import java.util.ArrayList;
import java.util.List;
@@ -2,10 +2,9 @@ package com.eactive.testmaster.user.dto;
import com.eactive.testmaster.common.entity.EnabledStatus;
import com.eactive.testmaster.user.entity.UserStatus;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
public class UserUpdateDTO implements Serializable {
@@ -1,7 +1,14 @@
package com.eactive.testmaster.user.entity;
import javax.persistence.*;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
* PT_USER 내부사용자정보
@@ -2,20 +2,22 @@ package com.eactive.testmaster.user.entity;
import com.eactive.testmaster.common.entity.Auditable;
import com.eactive.testmaster.common.entity.EnabledStatus;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;
import org.hibernate.annotations.Type;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collection;
@MappedSuperclass
public abstract class User extends Auditable implements Serializable, UserDetails {
@@ -1,8 +1,12 @@
package com.eactive.testmaster.user.entity;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "PT_USER_GROUP")
@@ -1,12 +1,11 @@
package com.eactive.testmaster.user.repository;
import com.eactive.testmaster.user.entity.StaffUser;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface StaffUserRepository extends JpaRepository<StaffUser, String>, JpaSpecificationExecutor<StaffUser> {
@@ -1,10 +1,13 @@
package com.eactive.testmaster.user.service;
import static com.eactive.testmaster.user.service.UserService.USER_NOT_FOUND_MESSAGE;
import com.eactive.testmaster.common.entity.EnabledStatus;
import com.eactive.testmaster.common.exception.UserNotFoundException;
import com.eactive.testmaster.user.entity.StaffUser;
import com.eactive.testmaster.user.entity.UserStatus;
import com.eactive.testmaster.user.repository.StaffUserRepository;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -12,10 +15,6 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.UUID;
import static com.eactive.testmaster.user.service.UserService.USER_NOT_FOUND_MESSAGE;
@Service
@Transactional
public class StaffUserService {
@@ -6,14 +6,13 @@ import com.eactive.testmaster.common.util.EncryptionUtil;
import com.eactive.testmaster.user.entity.StaffUser;
import com.eactive.testmaster.user.entity.User;
import com.eactive.testmaster.user.repository.StaffUserRepository;
import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service
//@Transactional(propagation = Propagation.NESTED)
public class UserService implements UserDetailsService {