diff --git a/.gitignore b/.gitignore index a2afc5df..5ff6309b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,13 @@ target/ !**/src/test/**/target/ ### IntelliJ IDEA ### -.idea - +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr ### Eclipse ### .apt_generated diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..7e449279 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,29 @@ +version: '3.8' + +services: + mysql: + image: mysql:8 + container_name: mysql_hibernate_final + restart: unless-stopped + ports: + - "3306:3306" + environment: + MYSQL_ROOT_PASSWORD: root + volumes: + - mysql_data:/var/lib/mysql + + redis-stack: + image: redis/redis-stack:latest + container_name: redis-stack + restart: unless-stopped + ports: + - "6379:6379" + - "8001:8001" + volumes: + - redis_data:/data + +volumes: + mysql_data: + name: v_mysql_hibernate + redis_data: + name: v_redis_data \ No newline at end of file diff --git a/pom.xml b/pom.xml index 78ee59db..55a1a515 100644 --- a/pom.xml +++ b/pom.xml @@ -1,94 +1,56 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.javarush.khmelov - project-ledzeppelin + com.javarush + module4 1.0-SNAPSHOT - ProjectLedzeppelin - war - UTF-8 - 21 21 - 5.10.2 + 21 + UTF-8 - - org.springframework.boot - spring-boot-starter-parent - 3.3.5 - - - - - - org.springframework.boot - spring-boot-dependencies - pom - import - 3.3.5 - - - - - jakarta.servlet - jakarta.servlet-api - provided + mysql + mysql-connector-java + 8.0.30 + - jakarta.servlet.jsp.jstl - jakarta.servlet.jsp.jstl-api + org.hibernate + hibernate-core-jakarta + 5.6.14.Final + - org.glassfish.web - jakarta.servlet.jsp.jstl + p6spy + p6spy + 3.9.1 - org.projectlombok - lombok - provided + io.lettuce + lettuce-core + 6.2.2.RELEASE + - org.junit.jupiter - junit-jupiter-api - test + com.fasterxml.jackson.core + jackson-databind + 2.14.0 + - org.junit.jupiter - junit-jupiter-engine - test + org.projectlombok + lombok + 1.18.36 + provided - - - - - org.apache.maven.plugins - maven-war-plugin - 3.4.0 - - - org.apache.maven.plugins - maven-compiler-plugin - - - - org.projectlombok - lombok - 1.18.34 - - - - - - - \ No newline at end of file diff --git a/src/main/java/com/javarush/Main.java b/src/main/java/com/javarush/Main.java new file mode 100644 index 00000000..9590e157 --- /dev/null +++ b/src/main/java/com/javarush/Main.java @@ -0,0 +1,194 @@ +package com.javarush; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.javarush.dao.CityDAO; +import com.javarush.dao.CountryDAO; +import com.javarush.domain.City; +import com.javarush.domain.Country; +import com.javarush.domain.CountryLanguage; +import com.javarush.redis.CityCountry; +import com.javarush.redis.Language; +import io.lettuce.core.RedisClient; +import io.lettuce.core.RedisURI; +import io.lettuce.core.api.StatefulRedisConnection; +import io.lettuce.core.api.sync.RedisStringCommands; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; +import org.hibernate.cfg.Environment; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import java.util.stream.Collectors; + +import static java.util.Objects.nonNull; + +public class Main { + + private final SessionFactory sessionFactory; + private final RedisClient redisClient; + + private final ObjectMapper mapper; + + private final CityDAO cityDAO; + private final CountryDAO countryDAO; + + public Main() { + sessionFactory = prepareRelationalDb(); + cityDAO = new CityDAO(sessionFactory); + countryDAO = new CountryDAO(sessionFactory); + + redisClient = prepareRedisClient(); + mapper = new ObjectMapper(); + } + + + public static void main(String[] args) { + Main main = new Main(); + List allCities = main.fetchData(main); + List preparedData = main.transformData(allCities); + main.pushToRedis(preparedData); + + main.sessionFactory.getCurrentSession().close(); + + List ids = List.of(50, 1984, 42, 1, 2026, 49, 1337, 666, 15, 244); + + long startRedis = System.currentTimeMillis(); + main.testRedisData(ids); + long stopRedis = System.currentTimeMillis(); + + long startMysql = System.currentTimeMillis(); + main.testMysqlData(ids); + long stopMysql = System.currentTimeMillis(); + + System.out.printf("%s:\t%d ms\n", "Redis", (stopRedis - startRedis)); + System.out.printf("%s:\t%d ms\n", "MySQL", (stopMysql - startMysql)); + + main.shutdown(); + } + + private void testMysqlData(List ids) { + try (Session session = sessionFactory.getCurrentSession()) { + session.beginTransaction(); + for (Integer id : ids) { + City city = cityDAO.getById(id); + Set languages = city.getCountry().getLanguages(); + } + session.getTransaction().commit(); + } + } + + private void testRedisData(List ids) { + try (StatefulRedisConnection connection = redisClient.connect()) { + RedisStringCommands sync = connection.sync(); + for (Integer id : ids) { + String value = sync.get(String.valueOf(id)); + try { + mapper.readValue(value, CityCountry.class); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + } + } + } + + private void pushToRedis(List data) { + try (StatefulRedisConnection connection = redisClient.connect()) { + RedisStringCommands sync = connection.sync(); + for (CityCountry cityCountry : data) { + try { + sync.set(String.valueOf(cityCountry.getId()), mapper.writeValueAsString(cityCountry)); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + } + + } + } + + private RedisClient prepareRedisClient() { + RedisClient redisClient = RedisClient.create(RedisURI.create("localhost", 6379)); + try (StatefulRedisConnection connection = redisClient.connect()) { + System.out.println("\nConnected to Redis\n"); + } + return redisClient; + } + + private List transformData(List cities) { + return cities.stream().map(city -> { + CityCountry res = new CityCountry(); + res.setId(city.getId()); + res.setName(city.getName()); + res.setPopulation(city.getPopulation()); + res.setDistrict(city.getDistrict()); + + Country country = city.getCountry(); + res.setAlternativeCountryCode(country.getAlternativeCode()); + res.setContinent(country.getContinent()); + res.setCountryCode(country.getCode()); + res.setCountryName(country.getName()); + res.setCountryPopulation(country.getPopulation()); + res.setCountryRegion(country.getRegion()); + res.setCountrySurfaceArea(country.getSurfaceArea()); + Set countryLanguages = country.getLanguages(); + Set languages = countryLanguages.stream().map(cl -> { + Language language = new Language(); + language.setLanguage(cl.getLanguage()); + language.setIsOfficial(cl.getIsOfficial()); + language.setPercentage(cl.getPercentage()); + return language; + }).collect(Collectors.toSet()); + res.setLanguages(languages); + + return res; + }).collect(Collectors.toList()); + } + + private SessionFactory prepareRelationalDb() { + final SessionFactory sessionFactory; + Properties properties = new Properties(); + properties.put(Environment.DIALECT, "org.hibernate.dialect.MySQL8Dialect"); + properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); + properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/world"); + properties.put(Environment.USER, "root"); + properties.put(Environment.PASS, "root"); + properties.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread"); + properties.put(Environment.HBM2DDL_AUTO, "validate"); + properties.put(Environment.STATEMENT_BATCH_SIZE, "100"); + + sessionFactory = new Configuration() + .addAnnotatedClass(City.class) + .addAnnotatedClass(Country.class) + .addAnnotatedClass(CountryLanguage.class) + .addProperties(properties) + .buildSessionFactory(); + return sessionFactory; + } + + private void shutdown() { + if (nonNull(sessionFactory)) { + sessionFactory.close(); + } + if (nonNull(redisClient)) { + redisClient.shutdown(); + } + } + + private List fetchData(Main main) { + try (Session session = main.sessionFactory.getCurrentSession()) { + List allCities = new ArrayList<>(); + session.beginTransaction(); + List countries = main.countryDAO.getAll(); + int totalCount = main.cityDAO.getTotalCount(); + int step = 500; + for (int i = 0; i < totalCount; i += step) { + allCities.addAll(main.cityDAO.getItems(i, step)); + } + session.getTransaction().commit(); + return allCities; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/dao/CityDAO.java b/src/main/java/com/javarush/dao/CityDAO.java new file mode 100644 index 00000000..38eed1a6 --- /dev/null +++ b/src/main/java/com/javarush/dao/CityDAO.java @@ -0,0 +1,33 @@ +package com.javarush.dao; + +import com.javarush.domain.City; +import org.hibernate.SessionFactory; +import org.hibernate.query.Query; + +import java.util.List; + +public class CityDAO { + private final SessionFactory sessionFactory; + + public CityDAO(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + public List getItems(int offset, int limit) { + Query query = sessionFactory.getCurrentSession().createQuery("select c from City c", City.class); + query.setFirstResult(offset); + query.setMaxResults(limit); + return query.list(); + } + + public int getTotalCount() { + Query query = sessionFactory.getCurrentSession().createQuery("select count(c) from City c", Long.class); + return Math.toIntExact(query.uniqueResult()); + } + + public City getById(Integer id) { + Query query = sessionFactory.getCurrentSession().createQuery("select c from City c join fetch c.country where c.id = :ID", City.class); + query.setParameter("ID", id); + return query.getSingleResult(); + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/dao/CountryDAO.java b/src/main/java/com/javarush/dao/CountryDAO.java new file mode 100644 index 00000000..25917b24 --- /dev/null +++ b/src/main/java/com/javarush/dao/CountryDAO.java @@ -0,0 +1,22 @@ +package com.javarush.dao; + +import com.javarush.domain.Country; +import org.hibernate.SessionFactory; +import org.hibernate.query.Query; + +import java.util.List; + +public class CountryDAO { + private final SessionFactory sessionFactory; + + public CountryDAO(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + public List getAll() { + Query query = sessionFactory + .getCurrentSession() + .createQuery("select c from Country c join fetch c.languages", Country.class); + return query.list(); + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/domain/City.java b/src/main/java/com/javarush/domain/City.java new file mode 100644 index 00000000..5b57fdc0 --- /dev/null +++ b/src/main/java/com/javarush/domain/City.java @@ -0,0 +1,28 @@ +package com.javarush.domain; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@RequiredArgsConstructor +@Table(schema = "world", name = "city") +public class City { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + private String name; + + @ManyToOne + @JoinColumn(name = "country_id") + private Country country; + + private String district; + + private Integer population; + +} \ No newline at end of file diff --git a/src/main/java/com/javarush/domain/Continent.java b/src/main/java/com/javarush/domain/Continent.java new file mode 100644 index 00000000..f53bfda1 --- /dev/null +++ b/src/main/java/com/javarush/domain/Continent.java @@ -0,0 +1,11 @@ +package com.javarush.domain; + +public enum Continent { + ASIA, + EUROPE, + NORTH_AMERICA, + AFRICA, + OCEANIA, + ANTARCTICA, + SOUTH_AMERICA +} \ No newline at end of file diff --git a/src/main/java/com/javarush/domain/Country.java b/src/main/java/com/javarush/domain/Country.java new file mode 100644 index 00000000..6270be31 --- /dev/null +++ b/src/main/java/com/javarush/domain/Country.java @@ -0,0 +1,68 @@ +package com.javarush.domain; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +import java.math.BigDecimal; +import java.util.Set; + +@Entity +@Getter +@Setter +@RequiredArgsConstructor +@Table(schema = "world", name = "country") +public class Country { + @Id + @Column(name = "id") + private Integer id; + + private String code; + + @Column(name = "code_2") + private String alternativeCode; + + private String name; + + @Column(name = "continent") + @Enumerated(EnumType.ORDINAL) + private Continent continent; + + private String region; + + @Column(name = "surface_area") + private BigDecimal surfaceArea; + + @Column(name = "indep_year") + private Short independenceYear; + + private Integer population; + + @Column(name = "life_expectancy") + private BigDecimal lifeExpectancy; + + @Column(name = "gnp") + private BigDecimal GNP; + + @Column(name = "gnpo_id") + private BigDecimal GNPOId; + + @Column(name = "local_name") + private String localName; + + @Column(name = "government_form") + private String governmentForm; + + @Column(name = "head_of_state") + private String headOfState; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "capital") + private City city; + + @OneToMany(fetch = FetchType.EAGER) + @JoinColumn(name = "country_id") + private Set languages; + +} \ No newline at end of file diff --git a/src/main/java/com/javarush/domain/CountryLanguage.java b/src/main/java/com/javarush/domain/CountryLanguage.java new file mode 100644 index 00000000..654d8f45 --- /dev/null +++ b/src/main/java/com/javarush/domain/CountryLanguage.java @@ -0,0 +1,34 @@ +package com.javarush.domain; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.Type; + +import java.math.BigDecimal; + +@Entity +@Getter +@Setter +@RequiredArgsConstructor +@Table(schema = "world", name = "country_language") +public class CountryLanguage { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @ManyToOne + @JoinColumn(name = "country_id") + private Country country; + + private String language; + + @Column(name = "is_official", columnDefinition = "BIT") + @Type(type = "org.hibernate.type.NumericBooleanType") + private Boolean isOfficial; + + private BigDecimal percentage; + +} \ No newline at end of file diff --git a/src/main/java/com/javarush/khmelov/lesson14/config/Winter.java b/src/main/java/com/javarush/khmelov/lesson14/config/Winter.java deleted file mode 100644 index 667b058d..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/config/Winter.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.javarush.khmelov.lesson14.config; - -import lombok.SneakyThrows; - -import java.lang.reflect.Constructor; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public class Winter { - - private Winter() { - - } - - private static final Map, Object> beans = new ConcurrentHashMap<>(); - - @SneakyThrows - public static T find(Class clazz) { - if (!beans.containsKey(clazz)) { - Constructor> constructor = clazz.getConstructors()[0]; - Class>[] parameterTypes = constructor.getParameterTypes(); - Object[] parameters = new Object[parameterTypes.length]; - for (int i = 0; i < parameterTypes.length; i++) { - parameters[i] = find(parameterTypes[i]); - } - beans.put(clazz, constructor.newInstance(parameters)); - } - //noinspection unchecked - return (T) beans.get(clazz); - } -} diff --git a/src/main/java/com/javarush/khmelov/lesson14/controller/EditUserServlet.java b/src/main/java/com/javarush/khmelov/lesson14/controller/EditUserServlet.java deleted file mode 100644 index abb624f9..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/controller/EditUserServlet.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.javarush.khmelov.lesson14.controller; - -import com.javarush.khmelov.lesson14.config.Winter; -import com.javarush.khmelov.lesson14.entity.Role; -import com.javarush.khmelov.lesson14.entity.User; -import com.javarush.khmelov.lesson14.service.UserService; -import jakarta.servlet.ServletConfig; -import jakarta.servlet.ServletException; -import jakarta.servlet.annotation.WebServlet; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; -import java.util.Optional; - -@WebServlet(value = "/edit-user", loadOnStartup = 1) -public class EditUserServlet extends HttpServlet { - - private final UserService userService = Winter.find(UserService.class); - - @Override - public void init(ServletConfig config) throws ServletException { - config.getServletContext().setAttribute("roles", Role.values()); - } - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String stringId = req.getParameter("id"); - if (stringId != null) { - long id = Long.parseLong(stringId); - Optional user = userService.get(id); - user.ifPresent(value -> req.setAttribute("user", value)); - } - req.getRequestDispatcher("/WEB-INF/edit-user.jsp").forward(req, resp); - } - - @Override - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String parameter = req.getParameter("id"); - User user = User.builder() - .id(parameter!=null?Long.parseLong(parameter):null) - .login(req.getParameter("login")) - .password(req.getParameter("password")) - .role(Role.valueOf(req.getParameter("role"))) - .build(); - if (req.getParameter("create") != null) { - userService.create(user); - } else if (req.getParameter("update") != null) { - user.setId(Long.parseLong(req.getParameter("id"))); - userService.update(user); - } - resp.sendRedirect(req.getContextPath() + "/edit-user?id=" + user.getId()); - } -} diff --git a/src/main/java/com/javarush/khmelov/lesson14/controller/IndexServlet.java b/src/main/java/com/javarush/khmelov/lesson14/controller/IndexServlet.java deleted file mode 100644 index 702ddaf1..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/controller/IndexServlet.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.javarush.khmelov.lesson14.controller; - -import jakarta.servlet.ServletException; -import jakarta.servlet.annotation.WebServlet; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; - -@WebServlet("") -public class IndexServlet extends HttpServlet { - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - req.setAttribute("source","IndexServlet"); - req.getRequestDispatcher("/WEB-INF/index.jsp").forward(req, resp); - } -} diff --git a/src/main/java/com/javarush/khmelov/lesson14/controller/ListUserServlet.java b/src/main/java/com/javarush/khmelov/lesson14/controller/ListUserServlet.java deleted file mode 100644 index 9fc818fe..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/controller/ListUserServlet.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.javarush.khmelov.lesson14.controller; - -import com.javarush.khmelov.lesson14.config.Winter; -import com.javarush.khmelov.lesson14.entity.User; -import com.javarush.khmelov.lesson14.service.UserService; -import jakarta.servlet.ServletException; -import jakarta.servlet.annotation.WebServlet; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; -import java.util.Collection; - -@WebServlet("/list-user") -public class ListUserServlet extends HttpServlet { - - private final UserService userService= Winter.find(UserService.class); - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - Collection users = userService.getAll(); - req.setAttribute("users", users); - req.getRequestDispatcher("/WEB-INF/list-user.jsp") - .forward(req, resp); - } -} diff --git a/src/main/java/com/javarush/khmelov/lesson14/entity/Role.java b/src/main/java/com/javarush/khmelov/lesson14/entity/Role.java deleted file mode 100644 index 58714242..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/entity/Role.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.javarush.khmelov.lesson14.entity; - -public enum Role { - USER, ADMIN, GUEST -} diff --git a/src/main/java/com/javarush/khmelov/lesson14/entity/User.java b/src/main/java/com/javarush/khmelov/lesson14/entity/User.java deleted file mode 100644 index 96e81530..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/entity/User.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.javarush.khmelov.lesson14.entity; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class User { - - private Long id; - - private String login; - - private String password; - - private Role role; - - public String getImage() { //TODO move to DTO - return "image-" + id; - } - -} diff --git a/src/main/java/com/javarush/khmelov/lesson14/repository/Repository.java b/src/main/java/com/javarush/khmelov/lesson14/repository/Repository.java deleted file mode 100644 index 26f6fada..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/repository/Repository.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.javarush.khmelov.lesson14.repository; - -import com.javarush.khmelov.lesson14.entity.User; - -import java.util.Collection; -import java.util.Optional; - -public interface Repository { - - Collection getAll(); - - Optional get(long id); - - void create(T entity); - - void update(T entity); - - void delete(T entity); -} diff --git a/src/main/java/com/javarush/khmelov/lesson14/repository/UserRepository.java b/src/main/java/com/javarush/khmelov/lesson14/repository/UserRepository.java deleted file mode 100644 index 677450a0..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/repository/UserRepository.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.javarush.khmelov.lesson14.repository; - -import com.javarush.khmelov.lesson14.entity.Role; -import com.javarush.khmelov.lesson14.entity.User; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.concurrent.atomic.AtomicLong; - -public class UserRepository implements Repository { - - private final Map map = new HashMap<>(); - - public static final AtomicLong id = new AtomicLong(System.currentTimeMillis()); - - public UserRepository() { - map.put(1L, new User(1L, "Alisa", "qwerty", Role.USER)); - map.put(2L, new User(2L, "Bob", "", Role.GUEST)); - map.put(3L, new User(3L, "Carl", "admin", Role.ADMIN)); - map.put(4L, new User(4L, "Khmelov", "admin", Role.ADMIN)); - } - - @Override - public Collection getAll() { - return map.values(); - } - - @Override - public Optional get(long id) { - return Optional.ofNullable(map.get(id)); - } - - @Override - public void create(User entity) { - entity.setId(id.incrementAndGet()); - update(entity); - } - - @Override - public void update(User entity) { - map.put(entity.getId(), entity); - } - - @Override - public void delete(User entity) { - map.remove(entity.getId()); - } -} diff --git a/src/main/java/com/javarush/khmelov/lesson14/service/UserService.java b/src/main/java/com/javarush/khmelov/lesson14/service/UserService.java deleted file mode 100644 index c472b39e..00000000 --- a/src/main/java/com/javarush/khmelov/lesson14/service/UserService.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.javarush.khmelov.lesson14.service; - -import com.javarush.khmelov.lesson14.entity.User; -import com.javarush.khmelov.lesson14.repository.UserRepository; - -import java.util.Collection; -import java.util.Optional; - -public class UserService { - - private final UserRepository userRepository; - - public UserService(UserRepository userRepository) { - this.userRepository = userRepository; - } - - public void create(User user) { - userRepository.create(user); - } - - public void update(User user) { - userRepository.update(user); - } - - public void delete(User user) { - userRepository.delete(user); - } - - public Collection getAll() { - return userRepository.getAll(); - } - - public Optional get(long id) { - return userRepository.get(id); - } -} diff --git a/src/main/java/com/javarush/redis/CityCountry.java b/src/main/java/com/javarush/redis/CityCountry.java new file mode 100644 index 00000000..1a64bb68 --- /dev/null +++ b/src/main/java/com/javarush/redis/CityCountry.java @@ -0,0 +1,39 @@ +package com.javarush.redis; + +import com.javarush.domain.Continent; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +import java.math.BigDecimal; +import java.util.Set; + +@Getter +@Setter +@RequiredArgsConstructor +public class CityCountry { + private Integer id; + + private String name; + + private String district; + + private Integer population; + + private String countryCode; + + private String alternativeCountryCode; + + private String countryName; + + private Continent continent; + + private String countryRegion; + + private BigDecimal countrySurfaceArea; + + private Integer countryPopulation; + + private Set languages; + +} \ No newline at end of file diff --git a/src/main/java/com/javarush/redis/Language.java b/src/main/java/com/javarush/redis/Language.java new file mode 100644 index 00000000..9e349fe6 --- /dev/null +++ b/src/main/java/com/javarush/redis/Language.java @@ -0,0 +1,16 @@ +package com.javarush.redis; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +import java.math.BigDecimal; + +@Getter +@Setter +@RequiredArgsConstructor +public class Language { + private String language; + private Boolean isOfficial; + private BigDecimal percentage; +} \ No newline at end of file diff --git a/src/main/resources/spy.properties b/src/main/resources/spy.properties new file mode 100644 index 00000000..dfff2036 --- /dev/null +++ b/src/main/resources/spy.properties @@ -0,0 +1,4 @@ +driverlist=com.mysql.cj.jdbc.Driver +dateformat=yyyy-MM-dd hh:mm:ss a +appender=com.p6spy.engine.spy.appender.StdoutLogger +logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/edit-user.jsp b/src/main/webapp/WEB-INF/edit-user.jsp deleted file mode 100644 index f274104c..00000000 --- a/src/main/webapp/WEB-INF/edit-user.jsp +++ /dev/null @@ -1,73 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@include file="head.jsp" %> - - - - - - - Edit user: - - - - Login - - - min 3 symbols - - - - - - Password - - - min 8 symb - - - - - - - Role - - - - ${role} - - - - - - - - Operation - - - Create - - - Update - - - - - - - - - - diff --git a/src/main/webapp/WEB-INF/head.jsp b/src/main/webapp/WEB-INF/head.jsp deleted file mode 100644 index 3cc70552..00000000 --- a/src/main/webapp/WEB-INF/head.jsp +++ /dev/null @@ -1,11 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> - - - Title - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/index.jsp b/src/main/webapp/WEB-INF/index.jsp deleted file mode 100644 index 0531c1c1..00000000 --- a/src/main/webapp/WEB-INF/index.jsp +++ /dev/null @@ -1,8 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@include file="head.jsp"%> - -<%= "Hello World!" %> - - -List Users - diff --git a/src/main/webapp/WEB-INF/list-user.jsp b/src/main/webapp/WEB-INF/list-user.jsp deleted file mode 100644 index dd52c558..00000000 --- a/src/main/webapp/WEB-INF/list-user.jsp +++ /dev/null @@ -1,9 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@include file="head.jsp"%> - - - ${user.login} - - - - diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 0bf2fcba..00000000 --- a/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - \ No newline at end of file diff --git a/src/main/webapp/images/cat.png b/src/main/webapp/images/cat.png deleted file mode 100644 index 41771a15..00000000 Binary files a/src/main/webapp/images/cat.png and /dev/null differ diff --git a/src/main/webapp/images/logo.png b/src/main/webapp/images/logo.png deleted file mode 100644 index e69de29b..00000000