From fbd2e85f50c78de39394eafa1536186b74f80bd2 Mon Sep 17 00:00:00 2001 From: elgekko Date: Mon, 26 Jun 2023 00:07:02 +0200 Subject: [PATCH] JPA and AUTH introduced (bugs: search dropdown, editors) --- .idea/misc.xml | 3 + lis-app/pom.xml | 5 + lis-app/src/main/java/hu/user/lis/Main.java | 19 +-- .../src/main/resources/application-dev.yaml | 7 + .../src/main/resources/application-old.yaml | 62 ++++++++ lis-app/src/main/resources/application.yaml | 70 +++------ .../test/java/hu/user/lis/ITRepository.java | 43 +++++ lis-db/migrations/README | 9 ++ .../migrations/environments/prod.properties | 67 ++++++++ .../scripts/002_create_initial_schema.sql | 148 +++++++++--------- lis-db/pom.xml | 32 ++-- .../main/java/hu/user/lis/db/Associate.java | 4 +- .../main/java/hu/user/lis/db/EDocument.java | 4 +- .../src/main/java/hu/user/lis/db/Invoice.java | 4 +- .../src/main/java/hu/user/lis/db/Partner.java | 4 +- .../src/main/java/hu/user/lis/db/Project.java | 4 +- .../java/hu/user/lis/db/ProjectAssociate.java | 7 +- .../java/hu/user/lis/db/ProjectStatus.java | 2 +- .../java/hu/user/lis/db/ServiceRecord.java | 10 +- .../main/java/hu/user/lis/db/Treasury.java | 4 +- .../db/repository/AssociateRepository.java | 8 + .../repository/AssociateRepositorySearch.java | 16 ++ .../AssociateRepositorySearchImpl.java | 93 +++++++++++ .../lis/db/repository/InvoiceRepository.java | 8 + .../lis/db/repository/PartnerRepository.java | 7 + .../repository/PartnerRepositorySearch.java | 12 ++ .../PartnerRepositorySearchImpl.java | 83 ++++++++++ .../ProjectAssociateRepository.java | 7 + .../lis/db/repository/ProjectRepository.java | 8 + .../repository/ProjectRepositorySearch.java | 13 ++ .../ProjectRepositorySearchImpl.java | 63 ++++++++ .../repository/ProjectStatusRepository.java | 13 +- .../repository/ServiceRecordRepository.java | 12 ++ .../ServiceRecordRepositorySearch.java | 12 ++ .../ServiceRecordRepositorySearchImpl.java | 53 +++++++ .../lis/db/repository/TreasuryRepository.java | 8 + lis-services/pom.xml | 5 - .../hu/user/lis/services/OneTwoService.java | 19 --- .../user/lis/services/api/AssociateApi.java | 19 ++- .../java/hu/user/lis/services/api/DbApi.java | 40 ++--- .../hu/user/lis/services/api/GenerateApi.java | 50 +++--- .../hu/user/lis/services/api/InvoiceApi.java | 20 ++- .../hu/user/lis/services/api/PartnerApi.java | 20 ++- .../hu/user/lis/services/api/ProjectApi.java | 19 ++- .../lis/services/api/ProjectAssociateApi.java | 19 ++- .../lis/services/api/ProjectStatusApi.java | 42 ++--- .../lis/services/api/ServiceRecordApi.java | 19 ++- .../hu/user/lis/services/api/TreasuryApi.java | 19 ++- .../lis/services/data/AssociateService.java | 2 - .../user/lis/services/data/DataService.java | 4 + .../lis/services/data/DataServiceImpl.java | 6 +- .../lis/services/data/EDocumentService.java | 4 - .../lis/services/data/InvoiceService.java | 2 - .../lis/services/data/PartnerService.java | 11 +- .../lis/services/data/PartnerServiceImpl.java | 39 ----- .../data/ProjectAssociateService.java | 6 +- .../lis/services/data/ProjectService.java | 9 +- .../services/data/ProjectStatusService.java | 3 - .../data/ProjectStatusServiceImpl.java | 4 +- .../services/data/ServiceRecordService.java | 1 - .../data/ServiceRecordServiceImpl.java | 77 ++++----- .../lis/services/data/SupplierService.java | 5 +- .../lis/services/data/TreasuryService.java | 11 +- .../services/nosql/AssociateDbService.java | 36 ----- .../hu/user/lis/services/nosql/DbService.java | 65 -------- .../lis/services/nosql/InvoiceDbService.java | 29 ---- .../lis/services/nosql/PartnerDbService.java | 33 ---- .../nosql/ProjectAssociateDbService.java | 25 --- .../lis/services/nosql/ProjectDbService.java | 29 ---- .../nosql/ProjectStatusDbService.java | 29 ---- .../nosql/ServiceRecordDbService.java | 28 ---- .../lis/services/nosql/TreasuryDbService.java | 24 --- .../user/lis/ui/config/DevelopmentConfig.java | 10 +- .../lis/ui/config/ResourceConfigurer.java | 7 +- .../user/lis/ui/config/WebSecurityConfig.java | 27 ++-- .../ui/data/AssociateSelectorDataModel.java | 41 ++--- .../user/lis/ui/data/AssociatesDataModel.java | 54 ++----- .../hu/user/lis/ui/data/CachedDataModel.java | 50 +++++- .../lis/ui/data/CachedSpringDataModel.java | 27 ++++ .../user/lis/ui/data/PartnersDataModel.java | 58 ++----- .../lis/ui/data/ProjectSelectorDataModel.java | 47 ++---- .../lis/ui/data/ProjectStatusDataModel.java | 27 ++-- .../lis/ui/data/ServiceRecordsDataModel.java | 70 ++++----- .../hu/user/lis/ui/view/IndexViewModel.java | 23 ++- lis-ui/src/main/resources/web/login.zul | 20 ++- .../main/resources/web/service-records.zul | 4 +- pom.xml | 5 + 87 files changed, 1158 insertions(+), 1009 deletions(-) create mode 100644 lis-app/src/main/resources/application-old.yaml create mode 100644 lis-app/src/test/java/hu/user/lis/ITRepository.java create mode 100644 lis-db/migrations/environments/prod.properties create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepository.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepositorySearch.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepositorySearchImpl.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepository.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepositorySearch.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepositorySearchImpl.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/ProjectAssociateRepository.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepository.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearch.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearchImpl.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepository.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepositorySearch.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepositorySearchImpl.java create mode 100644 lis-db/src/main/java/hu/user/lis/db/repository/TreasuryRepository.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/OneTwoService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/AssociateDbService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/DbService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/InvoiceDbService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/PartnerDbService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/ProjectAssociateDbService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/ProjectDbService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/ProjectStatusDbService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/ServiceRecordDbService.java delete mode 100644 lis-services/src/main/java/hu/user/lis/services/nosql/TreasuryDbService.java create mode 100644 lis-ui/src/main/java/hu/user/lis/ui/data/CachedSpringDataModel.java diff --git a/.idea/misc.xml b/.idea/misc.xml index d5cd614..b0e4237 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -9,4 +9,7 @@ + + \ No newline at end of file diff --git a/lis-app/pom.xml b/lis-app/pom.xml index f59bdf6..7935481 100644 --- a/lis-app/pom.xml +++ b/lis-app/pom.xml @@ -117,5 +117,10 @@ lis-services 0.0.1-SNAPSHOT + + junit + junit + test + diff --git a/lis-app/src/main/java/hu/user/lis/Main.java b/lis-app/src/main/java/hu/user/lis/Main.java index a0d6f73..70cad68 100644 --- a/lis-app/src/main/java/hu/user/lis/Main.java +++ b/lis-app/src/main/java/hu/user/lis/Main.java @@ -5,7 +5,6 @@ package hu.user.lis; -import hu.user.lis.ui.config.WebSecurityConfig; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.boot.SpringApplication; @@ -14,23 +13,21 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.FilterType; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.core.SpringVersion; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -//@SpringBootApplication(scanBasePackages = {"hu.user.lis"}) -@SpringBootApplication(exclude = { - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, - org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class} -) -@ComponentScan(basePackages = {"hu.user.lis"}, excludeFilters = { - @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = WebSecurityConfig.class)}) +@SpringBootApplication(scanBasePackages = {"hu.user.lis"}) +//@SpringBootApplication(exclude = { +// org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, +// org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class} +//) +//@ComponentScan(basePackages = {"hu.user.lis"}, excludeFilters = { +// @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = WebSecurityConfig.class)}) @EnableWebMvc //@EnableMongoRepositories(basePackages = "hu.user.lis.db.repository") -@EnableJpaRepositories(basePackages = "hu.user.lis.db.repository") +@EnableJpaRepositories("hu.user.lis.db.repository") public class Main extends SpringBootServletInitializer implements ApplicationListener { private static final Logger logger = LogManager.getLogger(); diff --git a/lis-app/src/main/resources/application-dev.yaml b/lis-app/src/main/resources/application-dev.yaml index ffbd75e..ecc9b0f 100644 --- a/lis-app/src/main/resources/application-dev.yaml +++ b/lis-app/src/main/resources/application-dev.yaml @@ -6,6 +6,13 @@ zk: homepage: index zul-view-resolver-enabled: true spring: + jpa: + hibernate: + use-new-id-generator-mappings: false + show-sql: true + properties: + hibernate: + format_sql: true output: ansi: enabled: always diff --git a/lis-app/src/main/resources/application-old.yaml b/lis-app/src/main/resources/application-old.yaml new file mode 100644 index 0000000..df7e097 --- /dev/null +++ b/lis-app/src/main/resources/application-old.yaml @@ -0,0 +1,62 @@ +### HTTP server +server: + port: 8080 + servlet: + context-path: / + +### ZKoss +zk: + homepage: index + zul-view-resolver-enabled: true +### Spring +spring: + #active: dev + # profiles: + #main: + # banner-mode: off + output: + ansi: + enabled: always + mail: + host: smtp.gmail.com + port: 465 + username: mediacubeserver@gmail.com + password: salabakter + protocol: smtps + properties: + mail: + smtp: + auth: true + starttls: + enable: true + #datasources: + # maszkaweb: + # driver-class-name: com.mysql.jdbc.Driver + # type: com.zaxxer.hikari.HikariDataSource + # jdbcUrl: jdbc:mysql://localhost:3306/maszkaweb?useUnicode=true&characterEncoding=UTF-8 + # username: root + # password: password + # pool-name: pool-maszkaweb + # maximum-pool-size: 50 + # minimum-idle: 10 + # data: + # mongodb: + # # host: dvdev.in.useribm.hu + # host: localvm + # port: 27017 + # database: lis + + # username: db2admin + # password: password +# datasource: +# # driver-class-name: com.mysql.jdbc.Driver +# type: com.zaxxer.hikari.HikariDataSource +# url: jdbc:db2://localvm:50000/testmc +# username: db2admin +# password: password +# hikari: +# pool-name: testmc +# maximum-pool-size: 50 +# minimum-idle: 10 +service: + message: Hello, World diff --git a/lis-app/src/main/resources/application.yaml b/lis-app/src/main/resources/application.yaml index df7e097..4f0ccb0 100644 --- a/lis-app/src/main/resources/application.yaml +++ b/lis-app/src/main/resources/application.yaml @@ -1,62 +1,30 @@ -### HTTP server server: port: 8080 servlet: context-path: / - -### ZKoss zk: homepage: index zul-view-resolver-enabled: true -### Spring spring: - #active: dev - # profiles: - #main: - # banner-mode: off + jpa: + hibernate: + use-new-id-generator-mappings: false + show-sql: false + properties: + hibernate: + format_sql: true output: ansi: enabled: always - mail: - host: smtp.gmail.com - port: 465 - username: mediacubeserver@gmail.com - password: salabakter - protocol: smtps - properties: - mail: - smtp: - auth: true - starttls: - enable: true - #datasources: - # maszkaweb: - # driver-class-name: com.mysql.jdbc.Driver - # type: com.zaxxer.hikari.HikariDataSource - # jdbcUrl: jdbc:mysql://localhost:3306/maszkaweb?useUnicode=true&characterEncoding=UTF-8 - # username: root - # password: password - # pool-name: pool-maszkaweb - # maximum-pool-size: 50 - # minimum-idle: 10 - # data: - # mongodb: - # # host: dvdev.in.useribm.hu - # host: localvm - # port: 27017 - # database: lis - - # username: db2admin - # password: password -# datasource: -# # driver-class-name: com.mysql.jdbc.Driver -# type: com.zaxxer.hikari.HikariDataSource -# url: jdbc:db2://localvm:50000/testmc -# username: db2admin -# password: password -# hikari: -# pool-name: testmc -# maximum-pool-size: 50 -# minimum-idle: 10 -service: - message: Hello, World + datasource: + type: com.zaxxer.hikari.HikariDataSource + url: jdbc:db2://dvdev.in.useribm.hu:50000/lis + username: db2admin + password: password +logging: + level: + org.hibernate.engine.jdbc.spi.SqlExceptionHelper: ERROR + org.springframework.security.web: DEBUG +# pattern: +# console: "%d %-5level %logger : %msg%n" +# file: "%d %-5level [%thread] %logger : %msg%n" \ No newline at end of file diff --git a/lis-app/src/test/java/hu/user/lis/ITRepository.java b/lis-app/src/test/java/hu/user/lis/ITRepository.java new file mode 100644 index 0000000..b45fb5b --- /dev/null +++ b/lis-app/src/test/java/hu/user/lis/ITRepository.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) $today.year-$today.month-24. + * By elGekko + */ + +package hu.user.lis; + +import hu.user.lis.db.ServiceRecord; +import hu.user.lis.db.repository.ServiceRecordRepository; +import lombok.extern.log4j.Log4j2; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; + + +@Log4j2 +@RunWith(SpringRunner.class) +@ComponentScan("hu.user.lis") +@SpringBootTest +//@TestPropertySource("classpath:application.yaml") +//@AutoConfigureMockMvc +public class ITRepository { + @Autowired + private ServiceRecordRepository serviceRecordRepository; + + @Test + public void testRepositoryCapabilities() { + List allItems = serviceRecordRepository.findAll(); + ServiceRecord serviceRecord = allItems.get(0); + + List filteredItems1 = serviceRecordRepository.findByProjectIdAndAssociateId(serviceRecord.getProject().getId(), serviceRecord.getAssociate().getId()); + log.info("Found {} items", filteredItems1.size()); + + List filteredItems2 = serviceRecordRepository.findByProjectIdAndAssociateId(serviceRecord.getProject().getId(), null); + log.info("Found {} items", filteredItems2.size()); + } + +} diff --git a/lis-db/migrations/README b/lis-db/migrations/README index 48ba8a5..641e4e9 100644 --- a/lis-db/migrations/README +++ b/lis-db/migrations/README @@ -44,3 +44,12 @@ For more information about commands and options, run the MyBatis Migration script with the --help option. Enjoy. + + + +DOCKER +docker run -itd --name lis --privileged=true -p 50000:50000 -p 27017:27017 -e LICENSE=accept -e DB2INSTANCE=db2admin -e DB2INST1_PASSWORD=password -e DBNAME=lis -e PERSISTENT_HOME=true -v /Docker:/database ibmcom/db2 +docker logs -f lis +docker exec -it lis bash +docker stop lis +docker remove lis diff --git a/lis-db/migrations/environments/prod.properties b/lis-db/migrations/environments/prod.properties new file mode 100644 index 0000000..52d2dfd --- /dev/null +++ b/lis-db/migrations/environments/prod.properties @@ -0,0 +1,67 @@ +## Base time zone to ensure times are consistent across machines +time_zone=GMT+0:00 + +## The character set that scripts are encoded with +script_char_set=UTF-8 + +## JDBC connection properties. +driver=com.ibm.db2.jcc.DB2Driver +url=jdbc:db2://dvdev.in.useribm.hu:50000/lis +username=db2admin +password=password + +# +# A NOTE ON STORED PROCEDURES AND DELIMITERS +# +# Stored procedures and functions commonly have nested delimiters +# that conflict with the schema migration parsing. If you tend +# to use procs, functions, triggers or anything that could create +# this situation, then you may want to experiment with +# send_full_script=true (preferred), or if you can't use +# send_full_script, then you may have to resort to a full +# line delimiter such as "GO" or "/" or "!RUN!". +# +# Also play with the autocommit settings, as some drivers +# or databases don't support creating procs, functions or +# even tables in a transaction, and others require it. +# + +# This ignores the line delimiters and +# simply sends the entire script at once. +# Use with JDBC drivers that can accept large +# blocks of delimited text at once. +send_full_script=false + +# This controls how statements are delimited. +# By default statements are delimited by an +# end of line semicolon. Some databases may +# (e.g. MS SQL Server) may require a full line +# delimiter such as GO. +# These are ignored if send_full_script is true. +delimiter=; +full_line_delimiter=false + +# If set to true, each statement is isolated +# in its own transaction. Otherwise the entire +# script is executed in one transaction. +# Few databases should need this set to true, +# but some do. +auto_commit=false + +# If set to false, warnings from the database will interrupt migrations. +ignore_warnings=false + +# Custom driver path to allow you to centralize your driver files +# Default requires the drivers to be in the drivers directory of your +# initialized migration directory (created with "migrate init") +# driver_path= + +# Name of the table that tracks changes to the database +changelog=CHANGELOG + +# Migrations support variable substitutions in the form of ${variable} +# in the migration scripts. All of the above properties will be ignored though, +# with the exception of changelog. +# Example: The following would be referenced in a migration file as ${ip_address} +# ip_address=192.168.0.1 + diff --git a/lis-db/migrations/scripts/002_create_initial_schema.sql b/lis-db/migrations/scripts/002_create_initial_schema.sql index a1dc58c..a76420a 100644 --- a/lis-db/migrations/scripts/002_create_initial_schema.sql +++ b/lis-db/migrations/scripts/002_create_initial_schema.sql @@ -1,111 +1,111 @@ -- // create_initial_schema -- Migration SQL that makes the change goes here. CREATE TABLE associate ( - id BIGINT NOT NULL, - name VARCHAR(255), - login VARCHAR(255), - password VARCHAR(255), - monthly_cost DOUBLE NOT NULL, - active SMALLINT NOT NULL, - CONSTRAINT pk_associate PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + name VARCHAR(255), + login VARCHAR(255), + password VARCHAR(255), + monthly_cost DOUBLE NOT NULL, + active SMALLINT NOT NULL, + CONSTRAINT pk_associate PRIMARY KEY (id) ); CREATE TABLE edocument ( - id BIGINT NOT NULL, - created TIMESTAMP, - name VARCHAR(255), - description VARCHAR(255), - size INTEGER NOT NULL, - file BLOB, - CONSTRAINT pk_edocument PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + created TIMESTAMP, + name VARCHAR(255), + description VARCHAR(255), + size INTEGER NOT NULL, + file BLOB, + CONSTRAINT pk_edocument PRIMARY KEY (id) ); CREATE TABLE project_status ( - id BIGINT NOT NULL, - name VARCHAR(255), - active SMALLINT NOT NULL, - order INTEGER NOT NULL, - CONSTRAINT pk_projectstatus PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + name VARCHAR(255), + active SMALLINT NOT NULL, + order INTEGER NOT NULL, + CONSTRAINT pk_projectstatus PRIMARY KEY (id) ); CREATE TABLE partner ( - id BIGINT NOT NULL, - name VARCHAR(255), - vat_nr VARCHAR(255), - address VARCHAR(255), - active SMALLINT NOT NULL, - CONSTRAINT pk_partner PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + name VARCHAR(255), + vat_nr VARCHAR(255), + address VARCHAR(255), + active SMALLINT NOT NULL, + CONSTRAINT pk_partner PRIMARY KEY (id) ); CREATE TABLE project ( - id BIGINT NOT NULL, - project_status_id BIGINT, - name VARCHAR(255), - human_id VARCHAR(255), - contact_name VARCHAR(255), - partner_id BIGINT, - active SMALLINT NOT NULL, - CONSTRAINT pk_project PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + project_status_id BIGINT, + name VARCHAR(255), + human_id VARCHAR(255), + contact_name VARCHAR(255), + partner_id BIGINT, + active SMALLINT NOT NULL, + CONSTRAINT pk_project PRIMARY KEY (id) ); ALTER TABLE project ADD CONSTRAINT FK_PROJECT_ON_PARTNER FOREIGN KEY (partner_id) REFERENCES partner (id); ALTER TABLE project ADD CONSTRAINT FK_PROJECT_ON_PROJECT_STATUS FOREIGN KEY (project_status_id) REFERENCES project_status (id); CREATE TABLE invoice ( - id BIGINT NOT NULL, - human_id VARCHAR(255), - title VARCHAR(255), - partner_id BIGINT, - project_id BIGINT, - income SMALLINT NOT NULL, - currency INTEGER, - net_amount DOUBLE NOT NULL, - gross_amount DOUBLE NOT NULL, - vat_amount DOUBLE NOT NULL, - completion_date TIMESTAMP, - create_date TIMESTAMP, - payment_deadline TIMESTAMP, - planned SMALLINT NOT NULL, - file BLOB, - CONSTRAINT pk_invoice PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + human_id VARCHAR(255), + title VARCHAR(255), + partner_id BIGINT, + project_id BIGINT, + income SMALLINT NOT NULL, + currency INTEGER, + net_amount DOUBLE NOT NULL, + gross_amount DOUBLE NOT NULL, + vat_amount DOUBLE NOT NULL, + completion_date TIMESTAMP, + create_date TIMESTAMP, + payment_deadline TIMESTAMP, + planned SMALLINT NOT NULL, + file BLOB, + CONSTRAINT pk_invoice PRIMARY KEY (id) ); ALTER TABLE invoice ADD CONSTRAINT FK_INVOICE_ON_PARTNER FOREIGN KEY (partner_id) REFERENCES partner (id); ALTER TABLE invoice ADD CONSTRAINT FK_INVOICE_ON_PROJECT FOREIGN KEY (project_id) REFERENCES project (id); CREATE TABLE treasury ( - id BIGINT NOT NULL, - project_id BIGINT, - human_id VARCHAR(255), - buy_amount DOUBLE NOT NULL, - buy_currency INTEGER, - sell_amount DOUBLE NOT NULL, - sell_currency INTEGER, - transaction_date TIMESTAMP, - value_date TIMESTAMP, - file BLOB, - CONSTRAINT pk_treasury PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + project_id BIGINT, + human_id VARCHAR(255), + buy_amount DOUBLE NOT NULL, + buy_currency INTEGER, + sell_amount DOUBLE NOT NULL, + sell_currency INTEGER, + transaction_date TIMESTAMP, + value_date TIMESTAMP, + file BLOB, + CONSTRAINT pk_treasury PRIMARY KEY (id) ); ALTER TABLE treasury ADD CONSTRAINT FK_TREASURY_ON_PROJECT FOREIGN KEY (project_id) REFERENCES project (id); CREATE TABLE project_associate ( - id BIGINT NOT NULL, - project_id BIGINT, - associate_id BIGINT, - CONSTRAINT pk_projectassociate PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + project_id BIGINT, + associate_id BIGINT, + CONSTRAINT pk_projectassociate PRIMARY KEY (id) ); ALTER TABLE project_associate ADD CONSTRAINT FK_PROJECTASSOCIATE_ON_ASSOCIATE FOREIGN KEY (associate_id) REFERENCES associate (id); ALTER TABLE project_associate ADD CONSTRAINT FK_PROJECTASSOCIATE_ON_PROJECT FOREIGN KEY (project_id) REFERENCES project (id); CREATE TABLE service_record ( - id BIGINT NOT NULL, - project_id BIGINT, - associate_id BIGINT, - work_day TIMESTAMP, - description VARCHAR(255), - details VARCHAR(255), - work_hours INTEGER NOT NULL, - cost DOUBLE NOT NULL, - file BLOB, - CONSTRAINT pk_servicerecord PRIMARY KEY (id) + id BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY, + project_id BIGINT, + associate_id BIGINT, + work_day TIMESTAMP, + description VARCHAR(255), + details VARCHAR(255), + work_hours INTEGER NOT NULL, + cost DOUBLE NOT NULL, + file BLOB, + CONSTRAINT pk_servicerecord PRIMARY KEY (id) ); ALTER TABLE service_record ADD CONSTRAINT FK_SERVICERECORD_ON_ASSOCIATE FOREIGN KEY (associate_id) REFERENCES associate (id); ALTER TABLE service_record ADD CONSTRAINT FK_SERVICERECORD_ON_PROJECT FOREIGN KEY (project_id) REFERENCES project (id); diff --git a/lis-db/pom.xml b/lis-db/pom.xml index 5ac8726..24a52da 100644 --- a/lis-db/pom.xml +++ b/lis-db/pom.xml @@ -11,19 +11,26 @@ lis 0.0.1-SNAPSHOT + + + + org.mybatis.maven + migrations-maven-plugin + 1.1.4 + + ${project.basedir}/migrations + + + + com.ibm.db2 + jcc + 11.5.8.0 + + + + + - - org.springframework.data - spring-data-mongodb - 3.4.6 - - - org.mongodb - mongodb-driver-sync - 4.9.1 - - - org.springframework.boot spring-boot-starter-data-jpa @@ -34,7 +41,6 @@ jcc 11.5.8.0 - com.fasterxml.jackson.core jackson-annotations diff --git a/lis-db/src/main/java/hu/user/lis/db/Associate.java b/lis-db/src/main/java/hu/user/lis/db/Associate.java index a9571e1..d2cbcc6 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Associate.java +++ b/lis-db/src/main/java/hu/user/lis/db/Associate.java @@ -1,7 +1,6 @@ package hu.user.lis.db; import lombok.*; -import org.springframework.data.mongodb.core.mapping.Document; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -12,12 +11,11 @@ import javax.persistence.Id; @Setter @Entity @Builder -@Document @AllArgsConstructor @NoArgsConstructor public class Associate { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; String name; String login; diff --git a/lis-db/src/main/java/hu/user/lis/db/EDocument.java b/lis-db/src/main/java/hu/user/lis/db/EDocument.java index 17059d8..6bfb7c1 100644 --- a/lis-db/src/main/java/hu/user/lis/db/EDocument.java +++ b/lis-db/src/main/java/hu/user/lis/db/EDocument.java @@ -1,7 +1,6 @@ package hu.user.lis.db; import lombok.*; -import org.springframework.data.mongodb.core.mapping.Document; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -13,12 +12,11 @@ import java.util.Date; @Setter @Entity @Builder -@Document @AllArgsConstructor @NoArgsConstructor public class EDocument { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; Date created; String name; diff --git a/lis-db/src/main/java/hu/user/lis/db/Invoice.java b/lis-db/src/main/java/hu/user/lis/db/Invoice.java index 2577a5c..0b9eccd 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Invoice.java +++ b/lis-db/src/main/java/hu/user/lis/db/Invoice.java @@ -1,7 +1,6 @@ package hu.user.lis.db; import lombok.*; -import org.springframework.data.mongodb.core.mapping.Document; import javax.persistence.*; import java.util.Date; @@ -10,12 +9,11 @@ import java.util.Date; @Setter @Entity @Builder -@Document @AllArgsConstructor @NoArgsConstructor public class Invoice { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; String humanId; String title; diff --git a/lis-db/src/main/java/hu/user/lis/db/Partner.java b/lis-db/src/main/java/hu/user/lis/db/Partner.java index 45f2b63..1e1020c 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Partner.java +++ b/lis-db/src/main/java/hu/user/lis/db/Partner.java @@ -1,7 +1,6 @@ package hu.user.lis.db; import lombok.*; -import org.springframework.data.mongodb.core.mapping.Document; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -12,12 +11,11 @@ import javax.persistence.Id; @Setter @Entity @Builder -@Document @AllArgsConstructor @NoArgsConstructor public class Partner { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; String name; String vatNr; diff --git a/lis-db/src/main/java/hu/user/lis/db/Project.java b/lis-db/src/main/java/hu/user/lis/db/Project.java index 42113c6..16cea07 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Project.java +++ b/lis-db/src/main/java/hu/user/lis/db/Project.java @@ -1,7 +1,6 @@ package hu.user.lis.db; import lombok.*; -import org.springframework.data.mongodb.core.mapping.Document; import javax.persistence.*; import java.util.List; @@ -10,12 +9,11 @@ import java.util.List; @Setter @Entity @Builder -@Document @AllArgsConstructor @NoArgsConstructor public class Project { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @ManyToOne @JoinColumn(name = "project_status_id") diff --git a/lis-db/src/main/java/hu/user/lis/db/ProjectAssociate.java b/lis-db/src/main/java/hu/user/lis/db/ProjectAssociate.java index b2982fd..277d7f0 100644 --- a/lis-db/src/main/java/hu/user/lis/db/ProjectAssociate.java +++ b/lis-db/src/main/java/hu/user/lis/db/ProjectAssociate.java @@ -1,8 +1,6 @@ package hu.user.lis.db; import lombok.*; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.DocumentReference; import javax.persistence.*; @@ -10,19 +8,16 @@ import javax.persistence.*; @Setter @Entity @Builder -@Document @AllArgsConstructor @NoArgsConstructor public class ProjectAssociate { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @ManyToOne @JoinColumn(name = "project_id") - @DocumentReference Project project; @ManyToOne @JoinColumn(name = "associate_id") - @DocumentReference Associate associate; } diff --git a/lis-db/src/main/java/hu/user/lis/db/ProjectStatus.java b/lis-db/src/main/java/hu/user/lis/db/ProjectStatus.java index f45b7f8..39e8918 100644 --- a/lis-db/src/main/java/hu/user/lis/db/ProjectStatus.java +++ b/lis-db/src/main/java/hu/user/lis/db/ProjectStatus.java @@ -14,7 +14,7 @@ import javax.persistence.*; @Table(name = "project_status") public class ProjectStatus { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; String name; boolean active; diff --git a/lis-db/src/main/java/hu/user/lis/db/ServiceRecord.java b/lis-db/src/main/java/hu/user/lis/db/ServiceRecord.java index f7ad022..7a4785a 100644 --- a/lis-db/src/main/java/hu/user/lis/db/ServiceRecord.java +++ b/lis-db/src/main/java/hu/user/lis/db/ServiceRecord.java @@ -1,8 +1,7 @@ package hu.user.lis.db; +import com.fasterxml.jackson.annotation.JsonIncludeProperties; import lombok.*; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.data.mongodb.core.mapping.DocumentReference; import javax.persistence.*; import java.util.Date; @@ -11,20 +10,19 @@ import java.util.Date; @Setter @Entity @Builder -@Document @AllArgsConstructor @NoArgsConstructor public class ServiceRecord { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @ManyToOne @JoinColumn(name = "project_id") - @DocumentReference(lazy = true) + @JsonIncludeProperties({"id"}) Project project; @ManyToOne @JoinColumn(name = "associate_id") - @DocumentReference(lazy = true) + @JsonIncludeProperties({"id"}) Associate associate; Date workDay; String description; diff --git a/lis-db/src/main/java/hu/user/lis/db/Treasury.java b/lis-db/src/main/java/hu/user/lis/db/Treasury.java index bea7a82..5b2f7ce 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Treasury.java +++ b/lis-db/src/main/java/hu/user/lis/db/Treasury.java @@ -1,7 +1,6 @@ package hu.user.lis.db; import lombok.*; -import org.springframework.data.mongodb.core.mapping.Document; import javax.persistence.*; import java.util.Date; @@ -10,12 +9,11 @@ import java.util.Date; @Setter @Builder @Entity -@Document @AllArgsConstructor @NoArgsConstructor public class Treasury { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @ManyToOne @JoinColumn(name = "project_id") diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepository.java new file mode 100644 index 0000000..380e10b --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepository.java @@ -0,0 +1,8 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Associate; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface AssociateRepository extends JpaRepository, AssociateRepositorySearch { + +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepositorySearch.java b/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepositorySearch.java new file mode 100644 index 0000000..d94ce65 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepositorySearch.java @@ -0,0 +1,16 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Associate; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +public interface AssociateRepositorySearch { + List search(String partialName, boolean filterShowActive, boolean filterShowInActive, Pageable pageable); + + long count(String partialName, boolean filterShowActive, boolean filterShowInActive); + +// List search(String partialName, boolean filterShowActive, Pageable pageable); +// +// long count(String partialName, boolean filterShowActive); +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepositorySearchImpl.java b/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepositorySearchImpl.java new file mode 100644 index 0000000..783055b --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/AssociateRepositorySearchImpl.java @@ -0,0 +1,93 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Associate; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Repository; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import java.util.ArrayList; +import java.util.List; + +@Repository +public class AssociateRepositorySearchImpl implements AssociateRepositorySearch { + @PersistenceContext + EntityManager entityManager; + + Predicate[] getPredicates(CriteriaBuilder cb, Root root, String partialName, boolean filterShowActive, boolean filterShowInActive) { + List predicates = new ArrayList<>(); + if (StringUtils.isNotBlank(partialName)) { + predicates.add(cb.like(cb.lower(root.get("name")), "%" + partialName.toLowerCase() + "%")); + } + if (filterShowActive && !filterShowInActive) { + predicates.add(cb.isTrue(root.get("active"))); + } + if (filterShowInActive && !filterShowActive) { + predicates.add(cb.isFalse(root.get("active"))); + } + return predicates.toArray(new Predicate[]{}); + } + +// Predicate[] getPredicates(CriteriaBuilder cb, Root root, String partialName, boolean filterShowActive) { +// List predicates = new ArrayList<>(); +// if (StringUtils.isNotBlank(partialName)) { +// predicates.add(cb.like(root.get("name"), "%" + partialName + "%")); +// } +// if (filterShowActive) { +// predicates.add(cb.isTrue(root.get("active"))); +// } else { +// predicates.add(cb.isFalse(root.get("active"))); +// } +// return predicates.toArray(new Predicate[]{}); +// } + + @Override + public List search(String partialName, boolean filterShowActive, boolean filterShowInActive, Pageable pageable) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Associate.class); + Root root = cq.from(Associate.class); + TypedQuery query = entityManager.createQuery(cq); + cq.where(getPredicates(cb, root, partialName, filterShowActive, filterShowInActive)); + query.setMaxResults(pageable.getPageSize()); + query.setFirstResult(pageable.getPageSize() * pageable.getPageNumber()); + return query.getResultList(); + } + + @Override + public long count(String partialName, boolean filterShowActive, boolean filterShowInActive) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Long.class); + Root root = cq.from(Associate.class); + cq.select(cb.count(root)); + cq.where(getPredicates(cb, root, partialName, filterShowActive, filterShowInActive)); + return entityManager.createQuery(cq).getSingleResult(); + } + +// @Override +// public List search(String partialName, boolean filterShowActive, Pageable pageable) { +// CriteriaBuilder cb = entityManager.getCriteriaBuilder(); +// CriteriaQuery cq = cb.createQuery(Associate.class); +// Root root = cq.from(Associate.class); +// TypedQuery query = entityManager.createQuery(cq); +// cq.where(getPredicates(cb, root, partialName, filterShowActive)); +// query.setMaxResults(pageable.getPageSize()); +// query.setFirstResult(pageable.getPageSize() * pageable.getPageNumber()); +// return query.getResultList(); +// } +// +// @Override +// public long count(String partialName, boolean filterShowActive) { +// CriteriaBuilder cb = entityManager.getCriteriaBuilder(); +// CriteriaQuery cq = cb.createQuery(Long.class); +// Root root = cq.from(Associate.class); +// cq.select(cb.count(root)); +// cq.where(getPredicates(cb, root, partialName, filterShowActive)); +// return entityManager.createQuery(cq).getSingleResult(); +// } +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java new file mode 100644 index 0000000..e25f16c --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java @@ -0,0 +1,8 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Invoice; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface InvoiceRepository extends JpaRepository { + +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepository.java new file mode 100644 index 0000000..9104831 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepository.java @@ -0,0 +1,7 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Partner; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PartnerRepository extends JpaRepository, PartnerRepositorySearch { +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepositorySearch.java b/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepositorySearch.java new file mode 100644 index 0000000..8ef30ed --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepositorySearch.java @@ -0,0 +1,12 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Partner; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +public interface PartnerRepositorySearch { + List search(String partialName, String partialVatNr, String partialAddress, boolean filterShowActive, boolean filterShowInActive, Pageable pageable); + + long count(String partialName, String partialVatNr, String partialAddress, boolean filterShowActive, boolean filterShowInActive); +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepositorySearchImpl.java b/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepositorySearchImpl.java new file mode 100644 index 0000000..adf75db --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepositorySearchImpl.java @@ -0,0 +1,83 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Partner; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Repository; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import java.util.ArrayList; +import java.util.List; + +@Repository +public class PartnerRepositorySearchImpl implements PartnerRepositorySearch { + @PersistenceContext + EntityManager entityManager; + + Predicate[] getPredicates(CriteriaBuilder cb, Root root, String partialName, + String partialVatNr, String partialAddress, boolean filterShowActive, boolean filterShowInActive) { + List predicates = new ArrayList<>(); + List orPredicates = new ArrayList<>(); + if (StringUtils.isNotBlank(partialName)) { + orPredicates.add(cb.like(root.get("name"), "%" + partialName + "%")); + } + if (StringUtils.isNotBlank(partialVatNr)) { + orPredicates.add(cb.like(root.get("vat_nr"), "%" + partialVatNr + "%")); + } + if (StringUtils.isNotBlank(partialAddress)) { + orPredicates.add(cb.like(root.get("address"), "%" + partialAddress + "%")); + } + if (orPredicates.size() > 0) { + predicates.add(cb.or(orPredicates.toArray(new Predicate[]{}))); + } + if (filterShowActive && !filterShowInActive) { + predicates.add(cb.isTrue(root.get("active"))); + } + if (filterShowInActive && !filterShowActive) { + predicates.add(cb.isFalse(root.get("active"))); + } + return predicates.toArray(new Predicate[]{}); + } + + Predicate[] getPredicates(CriteriaBuilder cb, Root root, String partialName, boolean filterShowActive) { + List predicates = new ArrayList<>(); + if (StringUtils.isNotBlank(partialName)) { + predicates.add(cb.like(root.get("name"), "%" + partialName + "%")); + } + if (filterShowActive) { + predicates.add(cb.isTrue(root.get("active"))); + } else { + predicates.add(cb.isFalse(root.get("active"))); + } + return predicates.toArray(new Predicate[]{}); + } + + @Override + public List search(String partialName, String partialVatNr, String partialAddress, boolean filterShowActive, boolean filterShowInActive, Pageable pageable) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Partner.class); + Root root = cq.from(Partner.class); + cq.where(getPredicates(cb, root, partialName, partialVatNr, partialAddress, filterShowActive, filterShowInActive)); + TypedQuery query = entityManager.createQuery(cq); + query.setMaxResults(pageable.getPageSize()); + query.setFirstResult(pageable.getPageSize() * pageable.getPageNumber()); + return query.getResultList(); + } + + @Override + public long count(String partialName, String partialVatNr, String partialAddress, boolean filterShowActive, boolean filterShowInActive) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Long.class); + Root root = cq.from(Partner.class); + cq.select(cb.count(root)); + cq.where(getPredicates(cb, root, partialName, partialVatNr, partialAddress, filterShowActive, filterShowInActive)); + return entityManager.createQuery(cq).getSingleResult(); + } + +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectAssociateRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectAssociateRepository.java new file mode 100644 index 0000000..ad74956 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectAssociateRepository.java @@ -0,0 +1,7 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.ProjectAssociate; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProjectAssociateRepository extends JpaRepository { +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepository.java new file mode 100644 index 0000000..a5868ea --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepository.java @@ -0,0 +1,8 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Project; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProjectRepository extends JpaRepository, ProjectRepositorySearch { + +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearch.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearch.java new file mode 100644 index 0000000..c6c5420 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearch.java @@ -0,0 +1,13 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Project; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +public interface ProjectRepositorySearch { + List search(String partialName, boolean filterShowActive, boolean filterShowInActive, Pageable pageable); + + long count(String partialName, boolean filterShowActive, boolean filterShowInActive); + +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearchImpl.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearchImpl.java new file mode 100644 index 0000000..3cf5311 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectRepositorySearchImpl.java @@ -0,0 +1,63 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Project; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Repository; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import java.util.ArrayList; +import java.util.List; + +@Repository +public class ProjectRepositorySearchImpl implements ProjectRepositorySearch { + @PersistenceContext + EntityManager entityManager; + + Predicate[] getPredicates(CriteriaBuilder cb, Root root, String partialName, boolean filterShowActive, boolean filterShowInActive) { + List predicates = new ArrayList<>(); + if (StringUtils.isNotBlank(partialName)) { + List orPredicates = new ArrayList<>(); + orPredicates.add(cb.like(cb.lower(root.get("name")), "%" + partialName.toLowerCase() + "%")); + orPredicates.add(cb.like(cb.lower(root.get("humanId")), "%" + partialName.toLowerCase() + "%")); + orPredicates.add(cb.like(cb.lower(root.join("partner").get("name")), "%" + partialName.toLowerCase() + "%")); + predicates.add(cb.or(orPredicates.toArray(new Predicate[]{}))); + } + + if (filterShowActive && !filterShowInActive) { + predicates.add(cb.isTrue(root.get("active"))); + } + if (filterShowInActive && !filterShowActive) { + predicates.add(cb.isFalse(root.get("active"))); + } + return predicates.toArray(new Predicate[]{}); + } + + @Override + public List search(String partialName, boolean filterShowActive, boolean filterShowInActive, Pageable pageable) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Project.class); + Root root = cq.from(Project.class); + TypedQuery query = entityManager.createQuery(cq); + cq.where(getPredicates(cb, root, partialName, filterShowActive, filterShowInActive)); + query.setMaxResults(pageable.getPageSize()); + query.setFirstResult(pageable.getPageSize() * pageable.getPageNumber()); + return query.getResultList(); + } + + @Override + public long count(String partialName, boolean filterShowActive, boolean filterShowInActive) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Long.class); + Root root = cq.from(Project.class); + cq.select(cb.count(root)); + cq.where(getPredicates(cb, root, partialName, filterShowActive, filterShowInActive)); + return entityManager.createQuery(cq).getSingleResult(); + } +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectStatusRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectStatusRepository.java index 7ed8770..471419d 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectStatusRepository.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectStatusRepository.java @@ -1,14 +1,13 @@ package hu.user.lis.db.repository; import hu.user.lis.db.ProjectStatus; +import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.transaction.annotation.Transactional; + +import java.util.List; public interface ProjectStatusRepository extends JpaRepository { - @Modifying - @Transactional - @Query(value = "TRUNCATE TABLE project_status IMMEDIATE", nativeQuery = true) - void truncate(); + List findByActiveIsTrue(Sort sort); + + long countByActiveIsTrue(); } diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepository.java new file mode 100644 index 0000000..85bbfc2 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepository.java @@ -0,0 +1,12 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.ServiceRecord; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ServiceRecordRepository extends JpaRepository, ServiceRecordRepositorySearch { + List findByProjectId(Long projectId); + + List findByProjectIdAndAssociateId(Long projectId, Long associateId); +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepositorySearch.java b/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepositorySearch.java new file mode 100644 index 0000000..b46357f --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepositorySearch.java @@ -0,0 +1,12 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.ServiceRecord; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +public interface ServiceRecordRepositorySearch { + List search(Long filterProjectId, Long filterAssociateId, Pageable pageable); + + long count(Long filterProjectId, Long filterAssociateId); +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepositorySearchImpl.java b/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepositorySearchImpl.java new file mode 100644 index 0000000..4b5f7a0 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ServiceRecordRepositorySearchImpl.java @@ -0,0 +1,53 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.ServiceRecord; +import org.springframework.data.domain.Pageable; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class ServiceRecordRepositorySearchImpl implements ServiceRecordRepositorySearch { + @PersistenceContext + EntityManager entityManager; + + Predicate[] getPredicates(CriteriaBuilder cb, Root root, Long filterProjectId, Long filterAssociateId) { + List predicates = new ArrayList<>(); + if (Objects.nonNull(filterProjectId)) { + predicates.add(cb.equal(root.join("project").get("id"), filterProjectId)); + } + if (Objects.nonNull(filterAssociateId)) { + predicates.add(cb.equal(root.join("associate").get("id"), filterAssociateId)); + } + return predicates.toArray(new Predicate[]{}); + } + + @Override + public List search(Long filterProjectId, Long filterAssociateId, Pageable pageable) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(ServiceRecord.class); + Root root = cq.from(ServiceRecord.class); + cq.where(getPredicates(cb, root, filterProjectId, filterAssociateId)); + TypedQuery query = entityManager.createQuery(cq); + query.setMaxResults(pageable.getPageSize()); + query.setFirstResult(pageable.getPageSize() * pageable.getPageNumber()); + return query.getResultList(); + } + + @Override + public long count(Long filterProjectId, Long filterAssociateId) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Long.class); + Root root = cq.from(ServiceRecord.class); + cq.select(cb.count(root)); + cq.where(getPredicates(cb, root, filterProjectId, filterAssociateId)); + return entityManager.createQuery(cq).getSingleResult(); + } +} diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/TreasuryRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/TreasuryRepository.java new file mode 100644 index 0000000..13a16c2 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/TreasuryRepository.java @@ -0,0 +1,8 @@ +package hu.user.lis.db.repository; + +import hu.user.lis.db.Treasury; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TreasuryRepository extends JpaRepository { + +} diff --git a/lis-services/pom.xml b/lis-services/pom.xml index e7dff84..a22a4f6 100644 --- a/lis-services/pom.xml +++ b/lis-services/pom.xml @@ -15,11 +15,6 @@ spring-web 5.3.24 - - org.apache.commons - commons-lang3 - 3.12.0 - com.github.javafaker javafaker diff --git a/lis-services/src/main/java/hu/user/lis/services/OneTwoService.java b/lis-services/src/main/java/hu/user/lis/services/OneTwoService.java deleted file mode 100644 index f9ed064..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/OneTwoService.java +++ /dev/null @@ -1,19 +0,0 @@ -package hu.user.lis.services; - -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Arrays; -import java.util.List; - -@RestController -@RequestMapping(path = "/onetwo", produces = MediaType.APPLICATION_JSON_VALUE) -public class OneTwoService { - @GetMapping - public List findAll() { - return Arrays.asList("One2", "Two1"); - } - -} diff --git a/lis-services/src/main/java/hu/user/lis/services/api/AssociateApi.java b/lis-services/src/main/java/hu/user/lis/services/api/AssociateApi.java index 9cd7a0f..3b2e8e3 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/AssociateApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/AssociateApi.java @@ -1,8 +1,8 @@ package hu.user.lis.services.api; import hu.user.lis.db.Associate; -import hu.user.lis.services.nosql.AssociateDbService; -import hu.user.lis.services.nosql.DbService; +import hu.user.lis.db.repository.AssociateRepository; +import hu.user.lis.services.data.AssociateService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,12 +11,19 @@ import org.springframework.web.bind.annotation.RestController; @Log4j2 @RestController @RequestMapping("/api/associate") -public class AssociateApi extends DbApi { +public class AssociateApi extends DbApi { @Autowired - AssociateDbService associateDbService; + AssociateRepository associateRepository; + @Autowired + AssociateService associateService; + + @Override + protected AssociateService getService() { + return associateService; + } @Override - protected DbService getDbService() { - return associateDbService; + protected AssociateRepository getRepository() { + return associateRepository; } } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/DbApi.java b/lis-services/src/main/java/hu/user/lis/services/api/DbApi.java index 46a8eca..b7280b3 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/DbApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/DbApi.java @@ -1,41 +1,43 @@ package hu.user.lis.services.api; -import hu.user.lis.services.nosql.DbService; -import org.springframework.web.bind.annotation.*; +import hu.user.lis.services.data.DataService; +import org.springframework.data.jpa.repository.JpaRepository; +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 java.util.List; -public abstract class DbApi { +public abstract class DbApi, S extends DataService> { - protected abstract DbService getDbService(); + protected abstract S getService(); + + protected abstract R getRepository(); @GetMapping("/list") public List list() { - return getDbService().list(); + return getRepository().findAll(); } @GetMapping("/get/{id}") - public T get(@PathVariable String id) { - return getDbService().get(id); - } - - @PostMapping("/create") - public T create(@RequestBody T entity) { - return getDbService().insert(entity); + public T get(@PathVariable long id) { + return getRepository().findById(id).orElse(null); } - @PutMapping("/update") - public void update(@RequestBody T entity) { - getDbService().save(entity); + @PostMapping("/save") + public T save(@RequestBody T entity) { + return getRepository().save(entity); } - @GetMapping("/reset") - public void reset() { - getDbService().reset(); + @GetMapping("/delete") + public void deleteAll() { + getRepository().deleteAll(); } @GetMapping("/generate") public List generate() { - return getDbService().generate(); + deleteAll(); + return getRepository().saveAll(getService().getAll()); } } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/GenerateApi.java b/lis-services/src/main/java/hu/user/lis/services/api/GenerateApi.java index 66c8f86..01e9383 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/GenerateApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/GenerateApi.java @@ -1,6 +1,5 @@ package hu.user.lis.services.api; -import hu.user.lis.services.nosql.*; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -12,40 +11,41 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/api/generate") public class GenerateApi { @Autowired - ProjectStatusDbService projectStatusDbService; + ProjectStatusApi projectStatusApi; @Autowired - PartnerDbService partnerDbService; + ProjectApi projectApi; @Autowired - AssociateDbService associateDbService; + PartnerApi partnerApi; @Autowired - InvoiceDbService invoiceDbService; + AssociateApi associateApi; @Autowired - TreasuryDbService treasuryDbService; + InvoiceApi invoiceApi; @Autowired - ProjectDbService projectDbService; + TreasuryApi treasuryApi; @Autowired - ProjectAssociateDbService projectAssociateDbService; + ProjectAssociateApi projectAssociateApi; @Autowired - ServiceRecordDbService serviceRecordDbService; + ServiceRecordApi serviceRecordApi; @GetMapping("/all") public String list() { - log.info("projectStatusDbService"); - projectStatusDbService.generate(); - log.info("partnerDbService"); - partnerDbService.generate(); - log.info("associateDbService"); - associateDbService.generate(); - log.info("invoiceDbService"); - invoiceDbService.generate(); - log.info("treasuryDbService"); - treasuryDbService.generate(); - log.info("projectDbService"); - projectDbService.generate(); - log.info("projectAssociateDbService"); - projectAssociateDbService.generate(); - log.info("serviceRecordDbService"); - serviceRecordDbService.generate(); + log.info("projectStatus"); + projectStatusApi.generate(); + log.info("partner"); + partnerApi.generate(); + log.info("associate"); + associateApi.generate(); + log.info("invoice"); + invoiceApi.generate(); + log.info("treasury"); + treasuryApi.generate(); + log.info("project"); + projectApi.generate(); + log.info("serviceRecord"); + serviceRecordApi.generate(); + log.info("projectAssociate"); + projectAssociateApi.generate(); + return "DONE"; } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/InvoiceApi.java b/lis-services/src/main/java/hu/user/lis/services/api/InvoiceApi.java index 02680bd..b0b7d33 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/InvoiceApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/InvoiceApi.java @@ -1,8 +1,8 @@ package hu.user.lis.services.api; import hu.user.lis.db.Invoice; -import hu.user.lis.services.nosql.DbService; -import hu.user.lis.services.nosql.InvoiceDbService; +import hu.user.lis.db.repository.InvoiceRepository; +import hu.user.lis.services.data.InvoiceService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,12 +11,20 @@ import org.springframework.web.bind.annotation.RestController; @Log4j2 @RestController @RequestMapping("/api/invoice") -public class InvoiceApi extends DbApi { +public class InvoiceApi extends DbApi { @Autowired - InvoiceDbService invoiceDbService; + InvoiceRepository invoiceRepository; + + @Autowired + InvoiceService invoiceService; + + @Override + protected InvoiceService getService() { + return invoiceService; + } @Override - protected DbService getDbService() { - return invoiceDbService; + protected InvoiceRepository getRepository() { + return invoiceRepository; } } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/PartnerApi.java b/lis-services/src/main/java/hu/user/lis/services/api/PartnerApi.java index c3ce532..dc96d5c 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/PartnerApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/PartnerApi.java @@ -1,8 +1,8 @@ package hu.user.lis.services.api; import hu.user.lis.db.Partner; -import hu.user.lis.services.nosql.DbService; -import hu.user.lis.services.nosql.PartnerDbService; +import hu.user.lis.db.repository.PartnerRepository; +import hu.user.lis.services.data.PartnerService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,12 +11,20 @@ import org.springframework.web.bind.annotation.RestController; @Log4j2 @RestController @RequestMapping("/api/partner") -public class PartnerApi extends DbApi { +public class PartnerApi extends DbApi { @Autowired - PartnerDbService partnerDbService; + PartnerRepository partnerRepository; + + @Autowired + PartnerService partnerService; + + @Override + protected PartnerService getService() { + return partnerService; + } @Override - protected DbService getDbService() { - return partnerDbService; + protected PartnerRepository getRepository() { + return partnerRepository; } } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/ProjectApi.java b/lis-services/src/main/java/hu/user/lis/services/api/ProjectApi.java index 99b5033..a57f179 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/ProjectApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/ProjectApi.java @@ -1,8 +1,8 @@ package hu.user.lis.services.api; import hu.user.lis.db.Project; -import hu.user.lis.services.nosql.DbService; -import hu.user.lis.services.nosql.ProjectDbService; +import hu.user.lis.db.repository.ProjectRepository; +import hu.user.lis.services.data.ProjectService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,12 +11,19 @@ import org.springframework.web.bind.annotation.RestController; @Log4j2 @RestController @RequestMapping("/api/project") -public class ProjectApi extends DbApi { +public class ProjectApi extends DbApi { @Autowired - ProjectDbService projectDbService; + ProjectRepository projectRepository; + @Autowired + ProjectService projectService; + + @Override + protected ProjectService getService() { + return projectService; + } @Override - protected DbService getDbService() { - return projectDbService; + protected ProjectRepository getRepository() { + return projectRepository; } } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/ProjectAssociateApi.java b/lis-services/src/main/java/hu/user/lis/services/api/ProjectAssociateApi.java index f13e2a2..46f3625 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/ProjectAssociateApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/ProjectAssociateApi.java @@ -1,8 +1,8 @@ package hu.user.lis.services.api; import hu.user.lis.db.ProjectAssociate; -import hu.user.lis.services.nosql.DbService; -import hu.user.lis.services.nosql.ProjectAssociateDbService; +import hu.user.lis.db.repository.ProjectAssociateRepository; +import hu.user.lis.services.data.ProjectAssociateService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,12 +11,19 @@ import org.springframework.web.bind.annotation.RestController; @Log4j2 @RestController @RequestMapping("/api/project-associate") -public class ProjectAssociateApi extends DbApi { +public class ProjectAssociateApi extends DbApi { @Autowired - ProjectAssociateDbService projectAssociateDbService; + ProjectAssociateRepository projectAssociateRepository; + @Autowired + ProjectAssociateService projectAssociateService; + + @Override + protected ProjectAssociateService getService() { + return projectAssociateService; + } @Override - protected DbService getDbService() { - return projectAssociateDbService; + protected ProjectAssociateRepository getRepository() { + return projectAssociateRepository; } } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/ProjectStatusApi.java b/lis-services/src/main/java/hu/user/lis/services/api/ProjectStatusApi.java index 3a0570a..a49794e 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/ProjectStatusApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/ProjectStatusApi.java @@ -5,49 +5,25 @@ import hu.user.lis.db.repository.ProjectStatusRepository; import hu.user.lis.services.data.ProjectStatusService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Log4j2 @RestController @RequestMapping("/api/project-status") -public class ProjectStatusApi { +public class ProjectStatusApi extends DbApi { @Autowired ProjectStatusRepository projectStatusRepository; @Autowired ProjectStatusService projectStatusService; - @GetMapping("/list") - public List list() { - return projectStatusRepository.findAll(); - } - - @GetMapping("/get/{id}") - public ProjectStatus get(@PathVariable Long id) { - return projectStatusRepository.findById(id).orElse(null); - } - - @PostMapping("/create") - public ProjectStatus create(@RequestBody ProjectStatus entity) { - return projectStatusRepository.save(entity); - } - - @PutMapping("/update") - public void update(@RequestBody ProjectStatus entity) { - projectStatusRepository.truncate(); - } - - @GetMapping("/reset") - public void reset() { - projectStatusRepository.truncate(); + @Override + protected ProjectStatusService getService() { + return projectStatusService; } - @GetMapping("/generate") - public List generate() { - reset(); - List result = projectStatusService.getAll(); - projectStatusRepository.saveAll(result); - return result; + @Override + protected ProjectStatusRepository getRepository() { + return projectStatusRepository; } } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/ServiceRecordApi.java b/lis-services/src/main/java/hu/user/lis/services/api/ServiceRecordApi.java index dcd274b..3c731a2 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/ServiceRecordApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/ServiceRecordApi.java @@ -1,8 +1,8 @@ package hu.user.lis.services.api; import hu.user.lis.db.ServiceRecord; -import hu.user.lis.services.nosql.DbService; -import hu.user.lis.services.nosql.ServiceRecordDbService; +import hu.user.lis.db.repository.ServiceRecordRepository; +import hu.user.lis.services.data.ServiceRecordService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,12 +11,19 @@ import org.springframework.web.bind.annotation.RestController; @Log4j2 @RestController @RequestMapping("/api/service-record") -public class ServiceRecordApi extends DbApi { +public class ServiceRecordApi extends DbApi { @Autowired - ServiceRecordDbService serviceRecordDbService; + ServiceRecordRepository serviceRecordRepository; + @Autowired + ServiceRecordService serviceRecordService; + + @Override + protected ServiceRecordService getService() { + return serviceRecordService; + } @Override - protected DbService getDbService() { - return serviceRecordDbService; + protected ServiceRecordRepository getRepository() { + return serviceRecordRepository; } } diff --git a/lis-services/src/main/java/hu/user/lis/services/api/TreasuryApi.java b/lis-services/src/main/java/hu/user/lis/services/api/TreasuryApi.java index a43f830..b200a0c 100644 --- a/lis-services/src/main/java/hu/user/lis/services/api/TreasuryApi.java +++ b/lis-services/src/main/java/hu/user/lis/services/api/TreasuryApi.java @@ -1,8 +1,8 @@ package hu.user.lis.services.api; import hu.user.lis.db.Treasury; -import hu.user.lis.services.nosql.DbService; -import hu.user.lis.services.nosql.TreasuryDbService; +import hu.user.lis.db.repository.TreasuryRepository; +import hu.user.lis.services.data.TreasuryService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,12 +11,19 @@ import org.springframework.web.bind.annotation.RestController; @Log4j2 @RestController @RequestMapping("/api/treasury") -public class TreasuryApi extends DbApi { +public class TreasuryApi extends DbApi { @Autowired - TreasuryDbService treasuryDbService; + TreasuryRepository treasuryRepository; + @Autowired + TreasuryService treasuryService; + + @Override + protected TreasuryService getService() { + return treasuryService; + } @Override - protected DbService getDbService() { - return treasuryDbService; + protected TreasuryRepository getRepository() { + return treasuryRepository; } } diff --git a/lis-services/src/main/java/hu/user/lis/services/data/AssociateService.java b/lis-services/src/main/java/hu/user/lis/services/data/AssociateService.java index 7d78d66..b169cb0 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/AssociateService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/AssociateService.java @@ -5,8 +5,6 @@ import hu.user.lis.db.Associate; import java.util.List; public interface AssociateService extends DataService { - List getAll(); - void setAll(List entities); Associate createNew(); diff --git a/lis-services/src/main/java/hu/user/lis/services/data/DataService.java b/lis-services/src/main/java/hu/user/lis/services/data/DataService.java index 57ab0b1..2812f60 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/DataService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/DataService.java @@ -1,6 +1,10 @@ package hu.user.lis.services.data; +import java.util.List; + public interface DataService { + List getAll(); + T copy(T sourceEntity); T copy(T sourceEntity, String property, Object value); diff --git a/lis-services/src/main/java/hu/user/lis/services/data/DataServiceImpl.java b/lis-services/src/main/java/hu/user/lis/services/data/DataServiceImpl.java index 08c1d5d..e3a21b5 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/DataServiceImpl.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/DataServiceImpl.java @@ -6,12 +6,16 @@ import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import java.lang.reflect.Field; +import java.util.List; @Log4j2 -public class DataServiceImpl implements DataService { +public abstract class DataServiceImpl implements DataService { @Autowired ObjectMapper mapper; + @Override + public abstract List getAll(); + @Override public T copy(T sourceEntity) { T result = null; diff --git a/lis-services/src/main/java/hu/user/lis/services/data/EDocumentService.java b/lis-services/src/main/java/hu/user/lis/services/data/EDocumentService.java index 0babafa..5883770 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/EDocumentService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/EDocumentService.java @@ -2,11 +2,7 @@ package hu.user.lis.services.data; import hu.user.lis.db.EDocument; -import java.util.List; - public interface EDocumentService extends DataService { - List getAll(); - EDocument createNew(); void add(EDocument entity); diff --git a/lis-services/src/main/java/hu/user/lis/services/data/InvoiceService.java b/lis-services/src/main/java/hu/user/lis/services/data/InvoiceService.java index 3d458e6..cacadd4 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/InvoiceService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/InvoiceService.java @@ -5,8 +5,6 @@ import hu.user.lis.db.Invoice; import java.util.List; public interface InvoiceService extends DataService { - List getAll(); - void setAll(List entities); Invoice createNew(); diff --git a/lis-services/src/main/java/hu/user/lis/services/data/PartnerService.java b/lis-services/src/main/java/hu/user/lis/services/data/PartnerService.java index 5c57be1..79e85e4 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/PartnerService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/PartnerService.java @@ -1,13 +1,10 @@ package hu.user.lis.services.data; -import com.fasterxml.jackson.core.JsonProcessingException; import hu.user.lis.db.Partner; import java.util.List; -public interface PartnerService { - List getAll(); - +public interface PartnerService extends DataService { void setAll(List entities); Partner createNew(); @@ -16,15 +13,9 @@ public interface PartnerService { Partner getById(String id); - Partner copy(Partner sourceEntity); - void replace(Partner targetEntity, Partner replacementEntity); Partner getRandom(); - String toString(Partner sourceEntity) throws JsonProcessingException; - - Partner copy(Partner sourceEntity, String property, Object value) throws JsonProcessingException, NoSuchFieldException, IllegalAccessException; - Partner getByName(String name); } diff --git a/lis-services/src/main/java/hu/user/lis/services/data/PartnerServiceImpl.java b/lis-services/src/main/java/hu/user/lis/services/data/PartnerServiceImpl.java index 0d13a5d..ef51bdb 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/PartnerServiceImpl.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/PartnerServiceImpl.java @@ -1,6 +1,5 @@ package hu.user.lis.services.data; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.javafaker.Address; import hu.user.lis.db.Partner; @@ -10,7 +9,6 @@ import org.apache.commons.lang3.RandomUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; @@ -168,43 +166,6 @@ public class PartnerServiceImpl extends DataServiceImpl implements Part return result; } - @Override - public Partner copy(Partner sourceEntity) { - Partner result = null; - try { - String json = toString(sourceEntity); - result = mapper.readValue(json, Partner.class); - } catch (JsonProcessingException e) { - log.catching(e); - } - return result; - } - - @Override - public String toString(Partner sourceEntity) { - String result = null; - try { - result = mapper.writeValueAsString(sourceEntity); - } catch (JsonProcessingException e) { - log.catching(e); - } - return result; - } - - @Override - public Partner copy(Partner sourceEntity, String property, Object value) { - Partner result = copy(sourceEntity); - Field field = null; - try { - field = result.getClass().getDeclaredField(property); - field.setAccessible(true); - field.set(result, value); - } catch (Exception e) { - log.catching(e); - } - return result; - } - @Override public Partner getByName(String name) { return getAll().stream().filter(p -> p.getName().equals(name)).findFirst().get(); diff --git a/lis-services/src/main/java/hu/user/lis/services/data/ProjectAssociateService.java b/lis-services/src/main/java/hu/user/lis/services/data/ProjectAssociateService.java index 4a16003..89a10fc 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/ProjectAssociateService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/ProjectAssociateService.java @@ -4,10 +4,9 @@ import hu.user.lis.db.Associate; import hu.user.lis.db.Project; import hu.user.lis.db.ProjectAssociate; -import java.util.List; import java.util.Map; -public interface ProjectAssociateService { +public interface ProjectAssociateService extends DataService { ProjectAssociate createNew(Project project, Associate associate); void add(ProjectAssociate entity); @@ -16,7 +15,4 @@ public interface ProjectAssociateService { void update(Project project, Map associates); - String toString(ProjectAssociate sourceEntity); - - List getAll(); } diff --git a/lis-services/src/main/java/hu/user/lis/services/data/ProjectService.java b/lis-services/src/main/java/hu/user/lis/services/data/ProjectService.java index 551e4fe..54b99e9 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/ProjectService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/ProjectService.java @@ -4,8 +4,7 @@ import hu.user.lis.db.Project; import java.util.List; -public interface ProjectService { - List getAll(); +public interface ProjectService extends DataService { void setAll(List entities); @@ -19,11 +18,5 @@ public interface ProjectService { void add(Project entity); - Project copy(Project sourceEntity); - void replace(Project targetEntity, Project replacementEntity); - - String toString(Project sourceEntity); - - Project copy(Project sourceEntity, String property, Object value); } diff --git a/lis-services/src/main/java/hu/user/lis/services/data/ProjectStatusService.java b/lis-services/src/main/java/hu/user/lis/services/data/ProjectStatusService.java index 2a127de..dec8b54 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/ProjectStatusService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/ProjectStatusService.java @@ -2,10 +2,7 @@ package hu.user.lis.services.data; import hu.user.lis.db.ProjectStatus; -import java.util.List; - public interface ProjectStatusService extends DataService { - List getAll(); ProjectStatus getById(Object id); diff --git a/lis-services/src/main/java/hu/user/lis/services/data/ProjectStatusServiceImpl.java b/lis-services/src/main/java/hu/user/lis/services/data/ProjectStatusServiceImpl.java index 3bb1966..944851e 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/ProjectStatusServiceImpl.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/ProjectStatusServiceImpl.java @@ -32,9 +32,7 @@ public class ProjectStatusServiceImpl extends DataServiceImpl imp @Override public ProjectStatus createNew() { - ProjectStatus result = ProjectStatus.builder().active(true).order(entities.size() + 1).build(); - entities.add(result); - return result; + return ProjectStatus.builder().active(true).build(); } @Override diff --git a/lis-services/src/main/java/hu/user/lis/services/data/ServiceRecordService.java b/lis-services/src/main/java/hu/user/lis/services/data/ServiceRecordService.java index c9d50cd..81d22db 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/ServiceRecordService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/ServiceRecordService.java @@ -6,7 +6,6 @@ import hu.user.lis.db.ServiceRecord; import java.util.List; public interface ServiceRecordService extends DataService { - List getAll(); ServiceRecord getById(String id); diff --git a/lis-services/src/main/java/hu/user/lis/services/data/ServiceRecordServiceImpl.java b/lis-services/src/main/java/hu/user/lis/services/data/ServiceRecordServiceImpl.java index f99368b..753dca4 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/ServiceRecordServiceImpl.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/ServiceRecordServiceImpl.java @@ -1,6 +1,7 @@ package hu.user.lis.services.data; import hu.user.lis.db.Project; +import hu.user.lis.db.ProjectAssociate; import hu.user.lis.db.ServiceRecord; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.RandomUtils; @@ -12,6 +13,7 @@ import java.util.Date; import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; @Service @Log4j2 @@ -85,50 +87,37 @@ public class ServiceRecordServiceImpl extends DataServiceImpl imp private List generate() { List result = new ArrayList<>(); - Date workDay = dataGeneratorService.faker().date().past(10 + 1, TimeUnit.DAYS); - String description = dataGeneratorService.faker().lorem().sentence(10); - int workHours = RandomUtils.nextInt(1, 9); - ServiceRecord entity = ServiceRecord.builder() - .associate(associateService.getRandom()) - .project(projectService.getRandom()) - .workDay(workDay) - .workHours(workHours) - .description(description) - .build(); - calculateCost(entity); - result.add(entity); - -// projectService.getAll().forEach(p -> { -// int serviceRecordCount = RandomUtils.nextInt(3, 10); -// -// List projectAssociates = projectAssociateService.getAll().stream().filter(e -> e.getProject().getId().equals(p.getId())).collect(Collectors.toList()); -// projectAssociates.forEach(pa -> { -// for (int i = 0; i < serviceRecordCount; i++) { -// Date workDay = dataGeneratorService.faker().date().past(i * 10 + 1, TimeUnit.DAYS); -// String description = dataGeneratorService.faker().lorem().sentence(10); -// int workHours = RandomUtils.nextInt(1, 9); -// ServiceRecord entity = ServiceRecord.builder() -// .associate(pa.getAssociate()) -// .project(pa.getProject()) -// .workDay(workDay) -// .workHours(workHours) -// .description(description) -// .build(); -// calculateCost(entity); -// result.add(entity); -// -// entity = ServiceRecord.builder() -// .associate(pa.getAssociate()) -// .project(pa.getProject()) -// .workDay(workDay) -// .workHours(workHours) -// .description(description) -// .build(); -// calculateCost(entity); -// result.add(entity); -// } -// }); -// }); + projectService.getAll().forEach(p -> { + int serviceRecordCount = RandomUtils.nextInt(3, 10); + + List projectAssociates = projectAssociateService.getAll().stream().filter(e -> e.getProject().getId().equals(p.getId())).collect(Collectors.toList()); + projectAssociates.forEach(pa -> { + for (int i = 0; i < serviceRecordCount; i++) { + Date workDay = dataGeneratorService.faker().date().past(i * 10 + 1, TimeUnit.DAYS); + String description = dataGeneratorService.faker().lorem().sentence(10); + int workHours = RandomUtils.nextInt(1, 9); + ServiceRecord entity = ServiceRecord.builder() + .associate(pa.getAssociate()) + .project(pa.getProject()) + .workDay(workDay) + .workHours(workHours) + .description(description) + .build(); + calculateCost(entity); + result.add(entity); + + entity = ServiceRecord.builder() + .associate(pa.getAssociate()) + .project(pa.getProject()) + .workDay(workDay) + .workHours(workHours) + .description(description) + .build(); + calculateCost(entity); + result.add(entity); + } + }); + }); return result; } diff --git a/lis-services/src/main/java/hu/user/lis/services/data/SupplierService.java b/lis-services/src/main/java/hu/user/lis/services/data/SupplierService.java index 202abb7..853356d 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/SupplierService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/SupplierService.java @@ -2,8 +2,5 @@ package hu.user.lis.services.data; import hu.user.lis.db.Supplier; -import java.util.List; - -public interface SupplierService { - List getAll(); +public interface SupplierService extends DataService { } diff --git a/lis-services/src/main/java/hu/user/lis/services/data/TreasuryService.java b/lis-services/src/main/java/hu/user/lis/services/data/TreasuryService.java index 97a2a2e..8b97885 100644 --- a/lis-services/src/main/java/hu/user/lis/services/data/TreasuryService.java +++ b/lis-services/src/main/java/hu/user/lis/services/data/TreasuryService.java @@ -4,18 +4,11 @@ import hu.user.lis.db.Treasury; import java.util.List; -public interface TreasuryService { - List getAll(); - +public interface TreasuryService extends DataService { Treasury createNew(); - Treasury copy(Treasury sourceEntity); - - String toString(Treasury sourceEntity); - - Treasury copy(Treasury sourceEntity, String property, Object value); - List getRandom(); + Treasury getByHumanId(String id); List getByHumanIds(String[] ids); diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/AssociateDbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/AssociateDbService.java deleted file mode 100644 index 20dff6f..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/AssociateDbService.java +++ /dev/null @@ -1,36 +0,0 @@ -package hu.user.lis.services.nosql; - -import hu.user.lis.db.Associate; -import hu.user.lis.services.data.AssociateService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class AssociateDbService extends DbService { - public static final String ID = "id"; - public static final String NAME = "name"; - public static final String ACTIVE = "active"; - public static final String LOGIN = "login"; - public static final String PASSWORD = "password"; - public static final String MONTHLY_COST = "monthlyCost"; - @Autowired - AssociateService associateService; - - @Override - protected Class getEntityClass() { - return Associate.class; - } - - @Override - protected List generateEntities() { - return associateService.getAll(); - } - - @Override - protected void afterGenerateEntities(List entities) { - associateService.setAll(entities); - } - -} diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/DbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/DbService.java deleted file mode 100644 index f95feb1..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/DbService.java +++ /dev/null @@ -1,65 +0,0 @@ -package hu.user.lis.services.nosql; - -import com.mongodb.client.MongoCollection; -import org.bson.Document; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Query; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public abstract class DbService { - @Autowired - MongoTemplate mongoTemplate; - - protected abstract Class getEntityClass(); - - public List list() { - return mongoTemplate.findAll(getEntityClass()); - } - - public List list(Query query) { - return mongoTemplate.find(query, getEntityClass()); - } - - public long count(Query query) { - return mongoTemplate.count(query, getEntityClass()); - } - - public T get(String id) { - return mongoTemplate.findById(id, getEntityClass()); - } - - public T insert(T entity) { - mongoTemplate.insert(entity); - return entity; - } - - public T save(T entity) { - return mongoTemplate.save(entity); - } - - public void reset() { - String collectionName = mongoTemplate.getCollectionName(getEntityClass()); - MongoCollection collection = mongoTemplate.getCollection(collectionName); - if (collection != null) { - collection.drop(); - } - } - - public List generate() { - reset(); - List result = generateEntities(); - mongoTemplate.insertAll(result); - afterGenerateEntities(result); - return result; - } - - protected abstract List generateEntities(); - - protected void afterGenerateEntities(List entities) { - } - -} diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/InvoiceDbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/InvoiceDbService.java deleted file mode 100644 index b42cf57..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/InvoiceDbService.java +++ /dev/null @@ -1,29 +0,0 @@ -package hu.user.lis.services.nosql; - -import hu.user.lis.db.Invoice; -import hu.user.lis.services.data.InvoiceService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class InvoiceDbService extends DbService { - @Autowired - InvoiceService invoiceService; - - @Override - protected Class getEntityClass() { - return Invoice.class; - } - - @Override - protected List generateEntities() { - return invoiceService.getAll(); - } - - @Override - protected void afterGenerateEntities(List entities) { - invoiceService.setAll(entities); - } -} diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/PartnerDbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/PartnerDbService.java deleted file mode 100644 index cc8299a..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/PartnerDbService.java +++ /dev/null @@ -1,33 +0,0 @@ -package hu.user.lis.services.nosql; - -import hu.user.lis.db.Partner; -import hu.user.lis.services.data.PartnerService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class PartnerDbService extends DbService { - public static final String ID = "id"; - public static final String NAME = "name"; - public static final String VAT_NR = "vatNr"; - public static final String ADDRESS = "address"; - @Autowired - PartnerService partnerService; - - @Override - protected Class getEntityClass() { - return Partner.class; - } - - @Override - protected List generateEntities() { - return partnerService.getAll(); - } - - @Override - protected void afterGenerateEntities(List entities) { - partnerService.setAll(entities); - } -} diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectAssociateDbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectAssociateDbService.java deleted file mode 100644 index 4108fd0..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectAssociateDbService.java +++ /dev/null @@ -1,25 +0,0 @@ -package hu.user.lis.services.nosql; - -import hu.user.lis.db.ProjectAssociate; -import hu.user.lis.services.data.ProjectAssociateService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class ProjectAssociateDbService extends DbService { - @Autowired - ProjectAssociateService projectAssociateService; - - @Override - protected Class getEntityClass() { - return ProjectAssociate.class; - } - - @Override - protected List generateEntities() { - return projectAssociateService.getAll(); - } - -} diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectDbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectDbService.java deleted file mode 100644 index b65d903..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectDbService.java +++ /dev/null @@ -1,29 +0,0 @@ -package hu.user.lis.services.nosql; - -import hu.user.lis.db.Project; -import hu.user.lis.services.data.ProjectService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class ProjectDbService extends DbService { - @Autowired - ProjectService projectService; - - @Override - protected Class getEntityClass() { - return Project.class; - } - - @Override - protected List generateEntities() { - return projectService.getAll(); - } - - @Override - protected void afterGenerateEntities(List entities) { - projectService.setAll(entities); - } -} diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectStatusDbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectStatusDbService.java deleted file mode 100644 index c65e4a4..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/ProjectStatusDbService.java +++ /dev/null @@ -1,29 +0,0 @@ -package hu.user.lis.services.nosql; - -import hu.user.lis.db.ProjectStatus; -import hu.user.lis.services.data.ProjectStatusService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class ProjectStatusDbService extends DbService { - public final String ID = "id"; - public final String NAME = "name"; - public final String ACTIVE = "active"; - public final String ORDER = "order"; - @Autowired - ProjectStatusService projectStatusService; - - @Override - protected Class getEntityClass() { - return ProjectStatus.class; - } - - @Override - protected List generateEntities() { - return projectStatusService.getAll(); - } - -} diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/ServiceRecordDbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/ServiceRecordDbService.java deleted file mode 100644 index 7c8a550..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/ServiceRecordDbService.java +++ /dev/null @@ -1,28 +0,0 @@ -package hu.user.lis.services.nosql; - -import hu.user.lis.db.ServiceRecord; -import hu.user.lis.services.data.ServiceRecordService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class ServiceRecordDbService extends DbService { - public static final String ID = "id"; - public static final String PROJECT_ID = "projectId"; - public static final String ASSOCIATE_ID = "associateId"; - @Autowired - ServiceRecordService serviceRecordService; - - @Override - protected Class getEntityClass() { - return ServiceRecord.class; - } - - @Override - protected List generateEntities() { - return serviceRecordService.getAll(); - } - -} diff --git a/lis-services/src/main/java/hu/user/lis/services/nosql/TreasuryDbService.java b/lis-services/src/main/java/hu/user/lis/services/nosql/TreasuryDbService.java deleted file mode 100644 index 7fd02ca..0000000 --- a/lis-services/src/main/java/hu/user/lis/services/nosql/TreasuryDbService.java +++ /dev/null @@ -1,24 +0,0 @@ -package hu.user.lis.services.nosql; - -import hu.user.lis.db.Treasury; -import hu.user.lis.services.data.TreasuryService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class TreasuryDbService extends DbService { - @Autowired - TreasuryService treasuryService; - - @Override - protected Class getEntityClass() { - return Treasury.class; - } - - @Override - protected List generateEntities() { - return treasuryService.getAll(); - } -} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/config/DevelopmentConfig.java b/lis-ui/src/main/java/hu/user/lis/ui/config/DevelopmentConfig.java index c14d756..8b3f2f1 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/config/DevelopmentConfig.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/config/DevelopmentConfig.java @@ -7,6 +7,7 @@ import org.zkoss.lang.Library; import org.zkoss.zk.ui.WebApps; import javax.annotation.PostConstruct; +import java.util.Objects; @Configuration //@Profile("dev") @@ -19,16 +20,17 @@ public class DevelopmentConfig { logger.info("**** ZK-Springboot-Demo: development configuration active ****"); logger.info("**************************************************************"); + if (Objects.nonNull(WebApps.getCurrent())) { + // enable non minified js + WebApps.getCurrent().getConfiguration().setDebugJS(true); + } + //disable various caches to avoid server restarts Library.setProperty("org.zkoss.zk.ZUML.cache", "false"); Library.setProperty("org.zkoss.zk.WPD.cache", "false"); Library.setProperty("org.zkoss.zk.WCS.cache", "false"); Library.setProperty("org.zkoss.web.classWebResource.cache", "false"); Library.setProperty("org.zkoss.util.label.cache", "false"); - - // enable non minified js - WebApps.getCurrent().getConfiguration().setDebugJS(true); - // enable for debugging MVVM commands and binding (very verbose) Library.setProperty("org.zkoss.bind.DebuggerFactory.enable", "false"); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/config/ResourceConfigurer.java b/lis-ui/src/main/java/hu/user/lis/ui/config/ResourceConfigurer.java index a3f6b55..51e39fe 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/config/ResourceConfigurer.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/config/ResourceConfigurer.java @@ -10,7 +10,12 @@ public class ResourceConfigurer { return "timeout"; } - @GetMapping({"/projects", "/associates", "/project-associates", "/service-records", "/settings", "/project/**"}) + @GetMapping("/login") + public String login() { + return "login"; + } + + @GetMapping({"/partners", "/projects", "/associates", "/project-associates", "/service-records", "/settings", "/project/**"}) public String index() { return "index"; } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/config/WebSecurityConfig.java b/lis-ui/src/main/java/hu/user/lis/ui/config/WebSecurityConfig.java index 45d38a4..0dc146f 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/config/WebSecurityConfig.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/config/WebSecurityConfig.java @@ -11,6 +11,8 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import static hu.user.lis.ui.view.IndexViewModel.NAVIGATION; + /** * This is an example of minimal configuration for ZK + Spring Security, we open as less access as possible to run a ZK-based application. * Please understand the configuration and modify it upon your requirement. @@ -18,37 +20,30 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager; @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { - private static final String ZUL_FILES = "/zkau/web/**/*.zul"; - private static final String ZK_RESOURCES = "/zkres/**"; + public static final String ZUL_FILES = "/zkau/web/**/*.zul"; + public static final String[] ZK_RESOURCES = {"/zkau/web/**/js/**", "/zkau/web/**/zul/css/**", "/zkau/web/**/img/**"}; // allow desktop cleanup after logout or when reloading login page - private static final String REMOVE_DESKTOP_REGEX = "/zkau\\?dtid=.*&cmd_0=rmDesktop&.*"; + public static final String REMOVE_DESKTOP_REGEX = "/zkau\\?dtid=.*&cmd_0=rmDesktop&.*"; @Override protected void configure(HttpSecurity http) throws Exception { - // you need to disable spring CSRF to make ZK AU pass security filter - // ZK already sends a AJAX request with a built-in CSRF token, - // please refer to https://www.zkoss.org/wiki/ZK%20Developer's%20Reference/Security%20Tips/Cross-site%20Request%20Forgery http.csrf().disable(); + String[] navigation = NAVIGATION.keySet().toArray(new String[]{}); http.authorizeRequests() - .antMatchers(ZUL_FILES).denyAll() // block direct access to zul under class path web resource folder + .antMatchers(ZUL_FILES).denyAll() // block direct access to zul files .antMatchers(HttpMethod.GET, ZK_RESOURCES).permitAll() // allow zk resources .regexMatchers(HttpMethod.GET, REMOVE_DESKTOP_REGEX).permitAll() // allow desktop cleanup .requestMatchers(req -> "rmDesktop".equals(req.getParameter("cmd_0"))).permitAll() // allow desktop cleanup from ZATS - .mvcMatchers("/", "/login", "/logout").permitAll() //permit the URL for login and logout - .mvcMatchers("/secure").hasRole("USER") - .anyRequest().authenticated() //enforce all requests to be authenticated + .mvcMatchers("/", "/login", "/logout").permitAll() + .mvcMatchers(navigation).hasRole("USER") + .anyRequest().authenticated() .and() .formLogin() - .loginPage("/login").defaultSuccessUrl("/secure/main") + .loginPage("/login").defaultSuccessUrl("/partners") .and() .logout().logoutUrl("/logout").logoutSuccessUrl("/"); } - /** - * Creates an {@link InMemoryUserDetailsManager} for demo/testing purposes only. DON'T use this in production, see: {@link User#withUserDetails}! - * - * @return userDetailsService - */ @Bean @Override public UserDetailsService userDetailsService() { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociateSelectorDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociateSelectorDataModel.java index d640424..46ae165 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociateSelectorDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociateSelectorDataModel.java @@ -1,18 +1,14 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Associate; -import hu.user.lis.services.nosql.AssociateDbService; +import hu.user.lis.db.repository.AssociateRepository; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; -import org.zkoss.bind.BindUtils; import org.zkoss.zul.FieldComparator; import java.util.List; @@ -20,34 +16,32 @@ import java.util.List; @Component @Log4j2 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class AssociateSelectorDataModel extends CachedDataModel { +public class AssociateSelectorDataModel extends CachedSpringDataModel { static private final int SEARCH_LIMIT = 10; @Autowired - AssociateDbService associateDbService; + AssociateRepository associateRepository; private String partialName; - private Query filter() { - Query result = new Query(); - if (StringUtils.isNotBlank(partialName)) { - result.addCriteria(Criteria.where(AssociateDbService.NAME).regex("/^" + partialName + "/i")); - } - result.addCriteria(Criteria.where(AssociateDbService.ACTIVE).is(true)); - return result; - } - @Override protected List getResultSet(int page, int pageSize, FieldComparator sortComparator) { - Query query = filter(); - query.with(Sort.by(Sort.Direction.ASC, AssociateDbService.NAME)); - query.with(PageRequest.of(page, pageSize)); - List result = associateDbService.list(query); + Pageable pageable = createPageable(0, SEARCH_LIMIT, null); + List result = StringUtils.isBlank(partialName) ? associateRepository.findAll(pageable).toList() : + associateRepository.search(partialName, true, false, pageable); + + log.info("Associate filter: {}", partialName); + result.forEach(a -> { + log.info("Associate: {}", a.getName()); + }); return result; } @Override public int getResultSetCount() { - Query query = filter(); - int result = (int) associateDbService.count(query); + int result = StringUtils.isBlank(partialName) ? + (int) associateRepository.count() : + (int) associateRepository.count(partialName, true, false); + log.info("Associate filter: {}", partialName); + log.info("Associate count: {}", result); return result > SEARCH_LIMIT ? SEARCH_LIMIT : result; } @@ -55,6 +49,5 @@ public class AssociateSelectorDataModel extends CachedDataModel { log.info("Searching associate using filter {}", partialName); this.partialName = partialName; super.reset(); - BindUtils.postNotifyChange(null, null, this, "*"); } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java index 54ae8f4..aecb9c8 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/AssociatesDataModel.java @@ -1,18 +1,13 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Associate; +import hu.user.lis.db.repository.AssociateRepository; import hu.user.lis.services.data.AssociateService; -import hu.user.lis.services.nosql.AssociateDbService; import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; import org.zkoss.zul.FieldComparator; @@ -21,9 +16,9 @@ import java.util.List; @Component @Log4j2 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class AssociatesDataModel extends CachedDataModel { +public class AssociatesDataModel extends CachedSpringDataModel { @Autowired - AssociateDbService associateDbService; + AssociateRepository associateRepository; @Autowired AssociateService associateService; private String partialName; @@ -31,44 +26,19 @@ public class AssociatesDataModel extends CachedDataModel { private boolean filterShowInActive; private boolean filterShowActive; - private Query filter() { - Query result = new Query(); - if (listAll) { - result.addCriteria(Criteria.where(AssociateDbService.ID).gt(0)); - return result; - } - if (StringUtils.isNotBlank(partialName)) { - result.addCriteria(Criteria.where(AssociateDbService.NAME).regex("/^" + partialName + "/i")); - } - if (filterShowActive && !filterShowInActive) { - result.addCriteria(Criteria.where(AssociateDbService.ACTIVE).is(true)); - } - if (filterShowInActive && !filterShowActive) { - result.addCriteria(Criteria.where(AssociateDbService.ACTIVE).is(false)); - } - return result; - } - @Override protected List getResultSet(int page, int pageSize, FieldComparator sortComparator) { - Query query = filter(); - if (sortComparator != null) { - String orderBy = sortComparator.getRawOrderBy(); - Sort.Direction direction = sortComparator.isAscending() ? Sort.Direction.ASC : Sort.Direction.DESC; - query.with(Sort.by(direction, orderBy)); - } - - Pageable pageable = PageRequest.of(page, pageSize); - query.with(pageable); - - List result = associateDbService.list(query); + Pageable pageable = createPageable(page, pageSize, sortComparator); + List result = listAll ? associateRepository.findAll(pageable).toList() : + associateRepository.search(partialName, filterShowActive, filterShowInActive, pageable); return result; } @Override public int getResultSetCount() { - Query query = filter(); - return (int) associateDbService.count(query); + long result = listAll ? associateRepository.count() : + associateRepository.count(partialName, filterShowActive, filterShowInActive); + return (int) result; } public void search(String partialName) { @@ -109,14 +79,14 @@ public class AssociatesDataModel extends CachedDataModel { } public void addNew(Associate entity) { - associateDbService.insert(entity); + associateRepository.save(entity); } public Associate copy(Associate selectedEntity) { return associateService.copy(selectedEntity); } - public Associate save(Associate selectedEntity) { - return associateDbService.save(selectedEntity); + public Associate save(Associate entity) { + return associateRepository.save(entity); } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java index 5fdaa31..198aaf4 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/CachedDataModel.java @@ -79,6 +79,49 @@ public abstract class CachedDataModel extends ListModelList { return this.resultSetSize; } +// private void loadCache(int forIndex) { +// try { +// int halfSize = this.cacheSize / 2; +// int rowLimit = this.cacheSize; // 200 +// int startPos = 0; +// if ((forIndex - halfSize) > 0) { // forIndex=60 startPos=0 +// // cache=0-200, forIndex=150 +// // startPos=50 cache=50-250 +// startPos = (forIndex - halfSize); +// } +// +// int endPos = (startPos + rowLimit); +// endPos = ((this.resultSetSize < 0) || (endPos <= this.resultSetSize)) ? endPos : this.resultSetSize; +// +// +// if (this.resultSetSize < 0) { +// this.resultSetSize = getResultSetCount(); +// log.info("Result item count is {}", resultSetSize); +// } +// +// log.info("Query result from {} to {}", startPos, endPos); +// +// int limit = endPos - startPos; +// int page = (int) Math.ceil(this.resultSetSize / limit); +// List resList = getResultSet(page, limit, sortComparator); +// +// if (resList != null) { +// log.info("Got {} records", resList.size()); +// for (int c = 0; c < resList.size(); c++) { +// cache.put(startPos + c, resList.get(c)); +// // logger.debug("CachedListMode.cached idx: " + +// // (startPos + c)); +// } +// } +// // logger.debug("CachedListMode.cacheSize: " + cache.size()); +// +// cacheStart = startPos + 1; +// cacheEnd = cacheStart + (cache.size() == 0 ? 0 : (cache.size() - 1)); +// } catch (Exception e) { +// log.error("", e); +// } +// } + private void loadCache(int forIndex) { try { int halfSize = this.cacheSize / 2; @@ -99,10 +142,11 @@ public abstract class CachedDataModel extends ListModelList { log.info("Result item count is {}", resultSetSize); } - log.info("Query result from {} to {}", startPos, endPos); - int limit = endPos - startPos; - int page = (int) Math.ceil(this.resultSetSize / limit); + + // (int) Math.ceil(this.resultSetSize / limit); + int page = forIndex == 0 ? 0 : (int) Math.ceil(limit / forIndex); + log.info("Query result from {} to {} | page {} pageSize {}", startPos, endPos, page, limit); List resList = getResultSet(page, limit, sortComparator); if (resList != null) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/CachedSpringDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/CachedSpringDataModel.java new file mode 100644 index 0000000..632204f --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/CachedSpringDataModel.java @@ -0,0 +1,27 @@ +package hu.user.lis.ui.data; + +import lombok.extern.log4j.Log4j2; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Component; +import org.zkoss.zul.FieldComparator; + +import java.util.Objects; + +@Component +@Log4j2 +public abstract class CachedSpringDataModel extends CachedDataModel { + protected Pageable createPageable(int page, int pageSize, FieldComparator sortComparator) { + Pageable pageable; + if (Objects.isNull(sortComparator)) { + pageable = PageRequest.of(page, pageSize); + } else { + String orderBy = sortComparator.getRawOrderBy(); + Sort.Direction direction = sortComparator.isAscending() ? Sort.Direction.ASC : Sort.Direction.DESC; + pageable = PageRequest.of(page, pageSize, Sort.by(direction, orderBy)); + } + return pageable; + } +} + diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java index 0eaa649..a76defe 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/PartnersDataModel.java @@ -1,19 +1,13 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Partner; +import hu.user.lis.db.repository.PartnerRepository; import hu.user.lis.services.data.PartnerService; -import hu.user.lis.services.nosql.AssociateDbService; -import hu.user.lis.services.nosql.PartnerDbService; import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; import org.zkoss.zul.FieldComparator; @@ -22,9 +16,9 @@ import java.util.List; @Component @Log4j2 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class PartnersDataModel extends CachedDataModel { +public class PartnersDataModel extends CachedSpringDataModel { @Autowired - PartnerDbService partnerDbService; + PartnerRepository partnerRepository; @Autowired PartnerService partnerService; private String partialName; @@ -35,49 +29,19 @@ public class PartnersDataModel extends CachedDataModel { private boolean filterShowActive; - private Query filter() { - Query result = new Query(); - if (listAll) { - result.addCriteria(Criteria.where(PartnerDbService.ID).gt(0)); - return result; - } - if (StringUtils.isNotBlank(partialName)) { - result.addCriteria(Criteria.where(PartnerDbService.NAME).regex("/^" + partialName + "/i")); - } - if (StringUtils.isNotBlank(partialVatNr)) { - result.addCriteria(Criteria.where(PartnerDbService.VAT_NR).regex("/^" + partialVatNr + "/i")); - } - if (StringUtils.isNotBlank(partialAddress)) { - result.addCriteria(Criteria.where(PartnerDbService.ADDRESS).regex("/^" + partialAddress + "/i")); - } - if (filterShowActive && !filterShowInActive) { - result.addCriteria(Criteria.where(AssociateDbService.ACTIVE).is(true)); - } - if (filterShowInActive && !filterShowActive) { - result.addCriteria(Criteria.where(AssociateDbService.ACTIVE).is(false)); - } - return result; - } - @Override protected List getResultSet(int page, int pageSize, FieldComparator sortComparator) { - Query query = filter(); - if (sortComparator != null) { - String orderBy = sortComparator.getRawOrderBy(); - Sort.Direction direction = sortComparator.isAscending() ? Sort.Direction.ASC : Sort.Direction.DESC; - query.with(Sort.by(direction, orderBy)); - } - - Pageable pageable = PageRequest.of(page, pageSize); - query.with(pageable); - List result = partnerDbService.list(query); + Pageable pageable = createPageable(page, pageSize, sortComparator); + List result = listAll ? partnerRepository.findAll() : + partnerRepository.search(partialName, partialVatNr, partialAddress, filterShowActive, filterShowInActive, pageable); return result; } @Override public int getResultSetCount() { - Query query = filter(); - return (int) partnerDbService.count(query); + long result = listAll ? partnerRepository.count() : + partnerRepository.count(partialName, partialVatNr, partialAddress, filterShowActive, filterShowInActive); + return (int) result; } public void search(String partialName, String partialVatNr, String partialAddress) { @@ -111,7 +75,7 @@ public class PartnersDataModel extends CachedDataModel { } public void addNew(Partner entity) { - partnerDbService.insert(entity); + partnerRepository.save(entity); } public Partner copy(Partner selectedEntity) { @@ -119,6 +83,6 @@ public class PartnersDataModel extends CachedDataModel { } public Partner save(Partner selectedEntity) { - return partnerDbService.save(selectedEntity); + return partnerRepository.save(selectedEntity); } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java index 69b5d85..1da8cec 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java @@ -1,77 +1,52 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Project; -import hu.user.lis.services.data.ProjectService; +import hu.user.lis.db.repository.ProjectRepository; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; -import org.zkoss.bind.BindUtils; import org.zkoss.zul.FieldComparator; -import java.util.Comparator; import java.util.List; -import java.util.stream.Collectors; @Component @Log4j2 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class ProjectSelectorDataModel extends CachedDataModel { +public class ProjectSelectorDataModel extends CachedSpringDataModel { static private final int SEARCH_LIMIT = 10; @Autowired - ProjectService projectService; + ProjectRepository projectRepository; private String partialSearch; - private boolean filter(Project project) { - if (StringUtils.isBlank(partialSearch)) { - return true; - } - if (StringUtils.isNotBlank(partialSearch)) { - if (project.getHumanId().toLowerCase().contains(partialSearch.toLowerCase())) { - return true; - } - if (project.getName().toLowerCase().contains(partialSearch.toLowerCase())) { - return true; - } - if (project.getPartner().getName().toLowerCase().contains(partialSearch.toLowerCase())) { - return true; - } - } - return false; - } - @Override protected List getResultSet(int page, int pageSize, FieldComparator sortComparator) { - List result = projectService.getAll().stream() - .sorted(Comparator.comparing(Project::getName)) - .filter(s -> filter(s)) - .limit(SEARCH_LIMIT) - .collect(Collectors.toList()); + Pageable pageable = createPageable(0, SEARCH_LIMIT, null); + List result = StringUtils.isBlank(partialSearch) ? projectRepository.findAll(pageable).toList() : + projectRepository.search(partialSearch, true, false, pageable); return result; } @Override public int getResultSetCount() { - int result = (int) projectService.getAll().stream() - .filter(s -> filter(s)) - .limit(SEARCH_LIMIT) - .count(); - return result; + int result = StringUtils.isBlank(partialSearch) ? + (int) projectRepository.count() : + (int) projectRepository.count(partialSearch, true, false); + return result > SEARCH_LIMIT ? SEARCH_LIMIT : result; } public void search(String partialSearch) { log.info("Searching projects using filter {}", partialSearch); this.partialSearch = partialSearch; super.reset(); - BindUtils.postNotifyChange(null, null, this, "*"); } public void getLimited() { log.info("Searching projects using limit {}", SEARCH_LIMIT); this.partialSearch = null; super.reset(); - BindUtils.postNotifyChange(null, null, this, "*"); } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java index f0cc368..fba594f 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectStatusDataModel.java @@ -1,55 +1,53 @@ package hu.user.lis.ui.data; import hu.user.lis.db.ProjectStatus; +import hu.user.lis.db.repository.ProjectStatusRepository; import hu.user.lis.services.data.ProjectStatusService; -import hu.user.lis.services.nosql.ProjectStatusDbService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; -import org.zkoss.bind.BindUtils; import org.zkoss.zul.FieldComparator; import java.util.List; -import java.util.stream.Collectors; @Component @Log4j2 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class ProjectStatusDataModel extends CachedDataModel { +public class ProjectStatusDataModel extends CachedSpringDataModel { @Autowired ProjectStatusService projectStatusService; @Autowired - ProjectStatusDbService projectStatusDbService; + ProjectStatusRepository projectStatusRepository; private boolean activeOnly; @Override protected List getResultSet(int page, int pageSize, FieldComparator sortComparator) { List result; if (activeOnly) { - result = projectStatusService.getAll().stream().filter(e -> e.isActive()).collect(Collectors.toList()); + result = projectStatusRepository.findByActiveIsTrue(Sort.by(Sort.Direction.ASC, "order")); } else { - result = projectStatusService.getAll(); + result = projectStatusRepository.findAll(Sort.by(Sort.Direction.ASC, "order")); } return result; } @Override public int getResultSetCount() { - return projectStatusService.getAll().size(); + long result = activeOnly ? projectStatusRepository.countByActiveIsTrue() : projectStatusRepository.count(); + return (int) result; } public void listAll() { - super.reset(); this.activeOnly = false; - BindUtils.postNotifyChange(null, null, this, "*"); + super.reset(); } public void listActive() { - super.reset(); this.activeOnly = true; - BindUtils.postNotifyChange(null, null, this, "*"); + super.reset(); } public void moveUp(ProjectStatus entity) { @@ -75,6 +73,9 @@ public class ProjectStatusDataModel extends CachedDataModel { } public void append() { - projectStatusService.createNew(); + ProjectStatus entity = projectStatusService.createNew(); + long currentCount = projectStatusRepository.count(); + entity.setOrder((int) currentCount + 1); + projectStatusRepository.save(entity); } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java index e8cef38..39e80a9 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ServiceRecordsDataModel.java @@ -3,55 +3,36 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Associate; import hu.user.lis.db.Project; import hu.user.lis.db.ServiceRecord; +import hu.user.lis.db.repository.ServiceRecordRepository; import hu.user.lis.services.data.ServiceRecordService; -import hu.user.lis.services.nosql.ServiceRecordDbService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; import org.zkoss.bind.annotation.Init; import org.zkoss.zk.ui.util.Clients; import org.zkoss.zul.FieldComparator; +import javax.persistence.EntityNotFoundException; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; @Component @Log4j2 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class ServiceRecordsDataModel extends CachedDataModel { +public class ServiceRecordsDataModel extends CachedSpringDataModel { @Autowired ServiceRecordService serviceRecordService; @Autowired - ServiceRecordDbService serviceRecordDbService; + ServiceRecordRepository serviceRecordRepository; private boolean listAll; private Long filterProjectId; private Long filterAssociateId; private boolean groupByAssociate; - private Query filter() { - Query result = new Query(); - if (listAll) { - result.addCriteria(Criteria.where(ServiceRecordDbService.ID).gt(0)); - return result; - } - if (Objects.nonNull(filterProjectId)) { - result.addCriteria(Criteria.where(ServiceRecordDbService.PROJECT_ID).is(filterProjectId)); - } - if (Objects.nonNull(filterAssociateId)) { - result.addCriteria(Criteria.where(ServiceRecordDbService.ASSOCIATE_ID).is(filterAssociateId)); - } - return result; - } - @Init public void init() { Clients.evalJavaScript("pushNav('/service-records')"); @@ -60,23 +41,15 @@ public class ServiceRecordsDataModel extends CachedDataModel { @Override protected List getResultSet(int page, int pageSize, FieldComparator sortComparator) { - Query query = filter(); - if (sortComparator != null) { - String orderBy = sortComparator.getRawOrderBy(); - Sort.Direction direction = sortComparator.isAscending() ? Sort.Direction.ASC : Sort.Direction.DESC; - query.with(Sort.by(direction, orderBy)); - } - Pageable pageable = PageRequest.of(page, pageSize); - query.with(pageable); - List result = serviceRecordDbService.list(query); + Pageable pageable = createPageable(page, pageSize, sortComparator); + List result = listAll ? serviceRecordRepository.findAll(pageable).toList() : + serviceRecordRepository.search(filterProjectId, filterAssociateId, pageable); return result; } Map getGroupedServiceRecords() { Map grouped = new HashMap<>(); - Query query = filter(); - List allEntities = serviceRecordDbService.list(query); - + List allEntities = serviceRecordRepository.findByProjectId(filterProjectId); allEntities.stream().forEach(s -> { if (grouped.containsKey(s.getAssociate().getId())) { ServiceRecord serviceRecord = grouped.get(s.getAssociate().getId()); @@ -93,8 +66,9 @@ public class ServiceRecordsDataModel extends CachedDataModel { @Override public int getResultSetCount() { - Query query = filter(); - return (int) serviceRecordDbService.count(query); + long result = listAll ? serviceRecordRepository.count() : + serviceRecordRepository.count(filterProjectId, filterAssociateId); + return (int) result; } public void listAll() { @@ -124,14 +98,28 @@ public class ServiceRecordsDataModel extends CachedDataModel { } public void addNew(ServiceRecord entity) { - serviceRecordDbService.insert(entity); + serviceRecordRepository.save(entity); } - public ServiceRecord copy(ServiceRecord selectedEntity) { - return serviceRecordService.copy(selectedEntity); + public ServiceRecord copy(ServiceRecord entity) { + return serviceRecordRepository.findById(entity.getId()).orElseThrow(EntityNotFoundException::new); } +// +// public ServiceRecord copy(ServiceRecord entity, String property, Object value) { +// ServiceRecord result = copy(entity); +// try { +// Field field = result.getClass().getDeclaredField(property); +// field.setAccessible(true); +// field.set(result, value); +// } catch (Exception e) { +// log.catching(e); +// } +// return result; +// } public ServiceRecord save(ServiceRecord selectedEntity) { - return serviceRecordDbService.save(selectedEntity); + return serviceRecordRepository.save(selectedEntity); } + + } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java index fc374c5..f00bcad 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java @@ -32,25 +32,24 @@ public class IndexViewModel implements EventListener { private static final String PROJECT_ASSOCIATES_LIST = "~./project-associates.zul"; private static final String SERVICE_RECORDS_LIST = "~./service-records.zul"; private static final String SETTINGS_LIST = "~./settings.zul"; + public static Map NAVIGATION = ImmutableMap.of( + "/partners", PARTNERS_LIST, + "/projects", PROJECTS_LIST, + "/project", PROJECT_EDITOR, + "/associates", ASSOCIATES_LIST, + "/project-associates", PROJECT_ASSOCIATES_LIST, + "/service-records", SERVICE_RECORDS_LIST, + "/settings", SETTINGS_LIST + ); @WireVariable BuildProperties buildProperties; @WireVariable SessionSettings sessionSettings; - @WireVariable EventBus eventBus; String searchPhrase; String page; - private Map navigation = ImmutableMap.of( - "/projects", PROJECTS_LIST, - "/project", PROJECT_EDITOR, - "/associates", ASSOCIATES_LIST, - "/project-associates", PROJECT_ASSOCIATES_LIST, - "/service-records", SERVICE_RECORDS_LIST, - "/settings", SETTINGS_LIST - - ); @Init public void init() { @@ -71,8 +70,8 @@ public class IndexViewModel implements EventListener { // eventBus.setProjectEditorData(Collections.singletonMap("id", id)); eventBus.setProjectEditorData(id); } else { - if (navigation.containsKey(path)) { - setPage(navigation.get(path)); + if (NAVIGATION.containsKey(path)) { + setPage(NAVIGATION.get(path)); } else { setPage(PARTNERS_LIST); } diff --git a/lis-ui/src/main/resources/web/login.zul b/lis-ui/src/main/resources/web/login.zul index 0134778..e7556c5 100644 --- a/lis-ui/src/main/resources/web/login.zul +++ b/lis-ui/src/main/resources/web/login.zul @@ -1,9 +1,16 @@ + + + + + + + - - + + @@ -11,13 +18,16 @@ + + + + -