From 5afa063e756f65fdd30f615f8939fb6f3233e524 Mon Sep 17 00:00:00 2001 From: andyjk15 Date: Fri, 31 Jan 2020 21:34:35 +0000 Subject: [PATCH] [31.01.20] Function Endpoints and finalising GraphQL --- LICENSE | 2 +- README.md | 5 +- pom.xml | 240 ++++++++---------- .../me/dbgateway/DbGatewayApplication.java | 13 - .../data/cryptoPriceNotFoundException.java | 33 --- .../service/GraphQLAdapterError.java | 48 ---- .../jpa/repository/VehicleRepository.java | 9 - .../me/dbgateway/models/CryptoPriceModel.java | 42 --- .../dbgateway/mutation/VehicleMutation.java | 20 -- .../me/dbgateway/query/VehicleQuery.java | 25 -- .../repository/CryptoPriceRepository.java | 9 - .../dataResolvers/CryptoPriceResolver.java | 17 -- .../mutations/CryptoPriceMutation.java | 36 --- .../me/dbgateway/service/VehicleService.java | 45 ---- .../{dbgateway => graphql}/Application.java | 2 +- .../jpa/entity/CryptoPrice.java} | 13 +- .../jpa/repository/CryptoPriceRepository.java | 9 + .../graphql/mutation/CryptoPriceMutation.java | 19 ++ .../me/graphql/query/CryptoPriceQuery.java | 25 ++ .../graphql/service/CryptoPriceService.java | 69 +++++ src/main/resources/application.properties | 1 - .../resources/graphql/cryptoPriceQL.graphqls | 19 ++ src/main/resources/graphql/vehicleql.graphqls | 16 -- 23 files changed, 265 insertions(+), 452 deletions(-) delete mode 100644 src/main/java/cryptosky/me/dbgateway/DbGatewayApplication.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/exceptions/data/cryptoPriceNotFoundException.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/exceptions/service/GraphQLAdapterError.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/jpa/repository/VehicleRepository.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/models/CryptoPriceModel.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/mutation/VehicleMutation.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/query/VehicleQuery.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/repository/CryptoPriceRepository.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/resolvers/dataResolvers/CryptoPriceResolver.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/resolvers/mutations/CryptoPriceMutation.java delete mode 100644 src/main/java/cryptosky/me/dbgateway/service/VehicleService.java rename src/main/java/cryptosky/me/{dbgateway => graphql}/Application.java (92%) rename src/main/java/cryptosky/me/{dbgateway/jpa/entity/Vehicle.java => graphql/jpa/entity/CryptoPrice.java} (80%) create mode 100644 src/main/java/cryptosky/me/graphql/jpa/repository/CryptoPriceRepository.java create mode 100644 src/main/java/cryptosky/me/graphql/mutation/CryptoPriceMutation.java create mode 100644 src/main/java/cryptosky/me/graphql/query/CryptoPriceQuery.java create mode 100644 src/main/java/cryptosky/me/graphql/service/CryptoPriceService.java create mode 100644 src/main/resources/graphql/cryptoPriceQL.graphqls delete mode 100644 src/main/resources/graphql/vehicleql.graphqls diff --git a/LICENSE b/LICENSE index f288702..e72bfdd 100644 --- a/LICENSE +++ b/LICENSE @@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. \ No newline at end of file diff --git a/README.md b/README.md index d6dc27e..32813ef 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# db-gateway -Database Gatway with a GraphQL API +# Cryptosky Database Gateway +Projects Database Gateway service that is a gateway to the database cluster, using GraphQL API. + diff --git a/pom.xml b/pom.xml index 2599a43..38ee685 100644 --- a/pom.xml +++ b/pom.xml @@ -1,72 +1,52 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.2.4.RELEASE - - + + 4.0.0 - cryptosky.me - db-gateway - 0.0.1 - db-gateway - Database Cluster Gateway with a GraphQL API + cryptosky.me + db-gateway + 0.0.1 + DB Gateway + Database Cluster Gateway with a GraphQL API - - 1.8 - Hoxton.SR1 - UTF-8 + + org.springframework.boot + spring-boot-starter-parent + 2.2.4.RELEASE + + + + + 1.8 + UTF-8 UTF-8 - + - - - org.springframework.boot - spring-boot-starter-groovy-templates - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-websocket - - - org.springframework.cloud - spring-cloud-starter-gateway - + - - org.springframework.boot - spring-boot-starter-data-jdbc - - - org.springframework.boot - spring-boot-starter-data-jpa - - - com.h2database - h2 - runtime - - - org.postgresql - postgresql - runtime - + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.cloud + spring-cloud-starter-gateway + - - org.projectlombok - lombok - true - + + + org.springframework.boot + spring-boot-starter-data-jpa + - + + com.graphql-java graphql-spring-boot-starter 5.0.2 @@ -82,76 +62,78 @@ 5.0.2 - - com.graphql-java - graphql-java-servlet - 4.0.0 - - - javax.servlet - javax.servlet-api - 3.0.1 - provided - + + + com.h2database + h2 + runtime + - - javax.xml.bind - jaxb-api - 2.3.0 - + + + org.postgresql + postgresql + runtime + - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.vintage - junit-vintage-engine - - - - + + org.projectlombok + lombok + 1.18.8 + true + - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - - - + + + org.springframework.boot + spring-boot-starter-groovy-templates + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + - - Cryptosky DB Gateway - - - org.eclipse.jetty - jetty-maven-plugin - 9.4.6.v20170531 - - - org.springframework.boot - spring-boot-maven-plugin - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + - - maven-war-plugin - 3.1.0 - - - - - + + Cryptosky DB Gateway + + + org.eclipse.jetty + jetty-maven-plugin + 9.4.6.v20170531 + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/src/main/java/cryptosky/me/dbgateway/DbGatewayApplication.java b/src/main/java/cryptosky/me/dbgateway/DbGatewayApplication.java deleted file mode 100644 index 4ad3fde..0000000 --- a/src/main/java/cryptosky/me/dbgateway/DbGatewayApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package cryptosky.me.dbgateway; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class DbGatewayApplication { - - public static void main(String[] args) { - SpringApplication.run(DbGatewayApplication.class, args); - } - -} diff --git a/src/main/java/cryptosky/me/dbgateway/exceptions/data/cryptoPriceNotFoundException.java b/src/main/java/cryptosky/me/dbgateway/exceptions/data/cryptoPriceNotFoundException.java deleted file mode 100644 index d09222d..0000000 --- a/src/main/java/cryptosky/me/dbgateway/exceptions/data/cryptoPriceNotFoundException.java +++ /dev/null @@ -1,33 +0,0 @@ -package cryptosky.me.dbgateway.exceptions.data; - -import graphql.ErrorType; -import graphql.GraphQLError; -import graphql.language.SourceLocation; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class cryptoPriceNotFoundException extends RuntimeException implements GraphQLError { - private Map extensions = new HashMap<>(); - - public cryptoPriceNotFoundException(String message, Long invalidId) { - super(message); - extensions.put("invalidId", invalidId); - } - - @Override - public List getLocations() { - return null; - } - - @Override - public Map getExtensions() { - return extensions; - } - - @Override - public ErrorType getErrorType() { - return ErrorType.DataFetchingException; - } -} diff --git a/src/main/java/cryptosky/me/dbgateway/exceptions/service/GraphQLAdapterError.java b/src/main/java/cryptosky/me/dbgateway/exceptions/service/GraphQLAdapterError.java deleted file mode 100644 index e2b1f5b..0000000 --- a/src/main/java/cryptosky/me/dbgateway/exceptions/service/GraphQLAdapterError.java +++ /dev/null @@ -1,48 +0,0 @@ -package cryptosky.me.dbgateway.exceptions.service; - -import graphql.ErrorType; -import graphql.GraphQLError; -import graphql.language.SourceLocation; -import graphql.ExceptionWhileDataFetching; - -import java.util.List; -import java.util.Map; - -public class GraphQLAdapterError implements GraphQLError { - - private GraphQLError error; - - public GraphQLAdapterError(GraphQLError error) { - this.error = error; - } - - @Override - public Map getExtensions() { - return error.getExtensions(); - } - - @Override - public List getLocations() { - return error.getLocations(); - } - - @Override - public ErrorType getErrorType() { - return error.getErrorType(); - } - - @Override - public List getPath() { - return error.getPath(); - } - - @Override - public Map toSpecification() { - return error.toSpecification(); - } - - @Override - public String getMessage() { - return (error instanceof ExceptionWhileDataFetching) ? ((ExceptionWhileDataFetching) error).getException().getMessage() : error.getMessage(); - } -} diff --git a/src/main/java/cryptosky/me/dbgateway/jpa/repository/VehicleRepository.java b/src/main/java/cryptosky/me/dbgateway/jpa/repository/VehicleRepository.java deleted file mode 100644 index 15a9dcc..0000000 --- a/src/main/java/cryptosky/me/dbgateway/jpa/repository/VehicleRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package cryptosky.me.dbgateway.jpa.repository; - -import cryptosky.me.dbgateway.jpa.entity.Vehicle; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface VehicleRepository extends JpaRepository { -} diff --git a/src/main/java/cryptosky/me/dbgateway/models/CryptoPriceModel.java b/src/main/java/cryptosky/me/dbgateway/models/CryptoPriceModel.java deleted file mode 100644 index 4a60bf8..0000000 --- a/src/main/java/cryptosky/me/dbgateway/models/CryptoPriceModel.java +++ /dev/null @@ -1,42 +0,0 @@ -package cryptosky.me.dbgateway.models; - -import lombok.*; - -import javax.persistence.*; -import java.sql.Timestamp; - -@AllArgsConstructor -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@ToString -@Getter -@Setter -@Builder -public class CryptoPriceModel { - - @Id - @Column(name = "id", nullable = false) - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - @Column(name = "timestamp", nullable = false) - private Timestamp timestamp; - - @Column(name = "type", nullable = false) - private String type; - - @Column(name = "av_price", nullable = false) - private Long average_price; - - @Column(name = "h_price", nullable = false) - private Long high_price; - - @Column(name = "l_price", nullable = false) - private Long low_price; - - @Column(name = "c_price", nullable = false) - private Long close_price; - - @Column(name = "volume", nullable = false) - private Long volume; - -} diff --git a/src/main/java/cryptosky/me/dbgateway/mutation/VehicleMutation.java b/src/main/java/cryptosky/me/dbgateway/mutation/VehicleMutation.java deleted file mode 100644 index 645ffd9..0000000 --- a/src/main/java/cryptosky/me/dbgateway/mutation/VehicleMutation.java +++ /dev/null @@ -1,20 +0,0 @@ -package cryptosky.me.dbgateway.mutation; - -import com.coxautodev.graphql.tools.GraphQLMutationResolver; -import cryptosky.me.dbgateway.jpa.entity.Vehicle; -import cryptosky.me.dbgateway.service.VehicleService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; - -@Component -public class VehicleMutation implements GraphQLMutationResolver { - - @Autowired - private VehicleService vehicleService; - - public Vehicle createVehicle(final LocalDate timestamp, final Long av_price, final Long h_price, final Long l_price, final Long c_price, final Long volume ) { - return this.vehicleService.createVehicle( timestamp, av_price, h_price, l_price, c_price, volume ); - } -} diff --git a/src/main/java/cryptosky/me/dbgateway/query/VehicleQuery.java b/src/main/java/cryptosky/me/dbgateway/query/VehicleQuery.java deleted file mode 100644 index 03b16a0..0000000 --- a/src/main/java/cryptosky/me/dbgateway/query/VehicleQuery.java +++ /dev/null @@ -1,25 +0,0 @@ -package cryptosky.me.dbgateway.query; - -import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import cryptosky.me.dbgateway.jpa.entity.Vehicle; -import cryptosky.me.dbgateway.service.VehicleService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Optional; - -@Component -public class VehicleQuery implements GraphQLQueryResolver { - - @Autowired - private VehicleService vehicleService; - - public List getVehicles(final int count) { - return this.vehicleService.getAllVehicles(count); - } - - public Optional getVehicle(final int id) { - return this.vehicleService.getVehicle(id); - } -} diff --git a/src/main/java/cryptosky/me/dbgateway/repository/CryptoPriceRepository.java b/src/main/java/cryptosky/me/dbgateway/repository/CryptoPriceRepository.java deleted file mode 100644 index bbd6e49..0000000 --- a/src/main/java/cryptosky/me/dbgateway/repository/CryptoPriceRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package cryptosky.me.dbgateway.repository; - -import cryptosky.me.dbgateway.models.CryptoPriceModel; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface CryptoPriceRepository extends CrudRepository { -} diff --git a/src/main/java/cryptosky/me/dbgateway/resolvers/dataResolvers/CryptoPriceResolver.java b/src/main/java/cryptosky/me/dbgateway/resolvers/dataResolvers/CryptoPriceResolver.java deleted file mode 100644 index 12077ec..0000000 --- a/src/main/java/cryptosky/me/dbgateway/resolvers/dataResolvers/CryptoPriceResolver.java +++ /dev/null @@ -1,17 +0,0 @@ -package cryptosky.me.dbgateway.resolvers.dataResolvers; - -import com.coxautodev.graphql.tools.GraphQLResolver; -import cryptosky.me.dbgateway.models.CryptoPriceModel; -import cryptosky.me.dbgateway.repository.CryptoPriceRepository; - -public class CryptoPriceResolver implements GraphQLResolver { - private CryptoPriceRepository cryptoPriceRepository; - - public CryptoPriceResolver( CryptoPriceRepository cryptoPriceRepository ) { - this.cryptoPriceRepository = cryptoPriceRepository; - } - -// public CryptoPriceModel getPrice( Long id ) { -// return cryptoPriceRepository.findById( CryptoPriceModel ); -// } -} diff --git a/src/main/java/cryptosky/me/dbgateway/resolvers/mutations/CryptoPriceMutation.java b/src/main/java/cryptosky/me/dbgateway/resolvers/mutations/CryptoPriceMutation.java deleted file mode 100644 index a81a3ca..0000000 --- a/src/main/java/cryptosky/me/dbgateway/resolvers/mutations/CryptoPriceMutation.java +++ /dev/null @@ -1,36 +0,0 @@ -package cryptosky.me.dbgateway.resolvers.mutations; - -import com.coxautodev.graphql.tools.GraphQLMutationResolver; -import cryptosky.me.dbgateway.models.CryptoPriceModel; -import cryptosky.me.dbgateway.repository.CryptoPriceRepository; - -import java.sql.Timestamp; - -public class CryptoPriceMutation implements GraphQLMutationResolver { - private CryptoPriceRepository cryptoPriceRepository; - -// public Mutation(CryptoPriceRepository cryptoPriceRepository) { -// this.cryptoPriceRepository = cryptoPriceRepository; -// } - - public CryptoPriceModel newPriceEntry(Timestamp timestamp, String type, Long average_price, Long high_price, Long low_price, Long close_price, Long volume) { - CryptoPriceModel cryptoPriceModel = CryptoPriceModel.builder() - .timestamp(timestamp) - .type(type) - .average_price(average_price) - .high_price(high_price) - .low_price(low_price) - .close_price(close_price) - .volume(volume) - .build(); - - cryptoPriceRepository.save(cryptoPriceModel); - - return cryptoPriceModel; - } - -// public boolean deleteCrypto(Long id) { -// cryptoPriceRepository.delete(id); -// return true; -// } -} diff --git a/src/main/java/cryptosky/me/dbgateway/service/VehicleService.java b/src/main/java/cryptosky/me/dbgateway/service/VehicleService.java deleted file mode 100644 index a40045d..0000000 --- a/src/main/java/cryptosky/me/dbgateway/service/VehicleService.java +++ /dev/null @@ -1,45 +0,0 @@ -package cryptosky.me.dbgateway.service; - -import cryptosky.me.dbgateway.jpa.entity.Vehicle; -import cryptosky.me.dbgateway.jpa.repository.VehicleRepository; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDate; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -@Service -public class VehicleService { - - private final VehicleRepository vehicleRepository ; - - public VehicleService(final VehicleRepository vehicleRepository) { - this.vehicleRepository = vehicleRepository ; - } - - @Transactional - public Vehicle createVehicle( final LocalDate timestamp, final Long av_price, final Long h_price, final Long l_price, final Long c_price, final Long volume ) { - Vehicle vehicle = Vehicle.builder() - .timestamp(timestamp) - .average_price(av_price) - .high_price(h_price) - .low_price(l_price) - .close_price(c_price) - .volume(volume) - .build(); - - return this.vehicleRepository.save(vehicle); - } - - @Transactional(readOnly = true) - public List getAllVehicles(final int count) { - return this.vehicleRepository.findAll().stream().limit(count).collect(Collectors.toList()); - } - - @Transactional(readOnly = true) - public Optional getVehicle(final int id) { - return this.vehicleRepository.findById(id); - } -} diff --git a/src/main/java/cryptosky/me/dbgateway/Application.java b/src/main/java/cryptosky/me/graphql/Application.java similarity index 92% rename from src/main/java/cryptosky/me/dbgateway/Application.java rename to src/main/java/cryptosky/me/graphql/Application.java index 43595f4..35f2fb4 100644 --- a/src/main/java/cryptosky/me/dbgateway/Application.java +++ b/src/main/java/cryptosky/me/graphql/Application.java @@ -1,4 +1,4 @@ -package cryptosky.me.dbgateway; +package cryptosky.me.graphql; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/src/main/java/cryptosky/me/dbgateway/jpa/entity/Vehicle.java b/src/main/java/cryptosky/me/graphql/jpa/entity/CryptoPrice.java similarity index 80% rename from src/main/java/cryptosky/me/dbgateway/jpa/entity/Vehicle.java rename to src/main/java/cryptosky/me/graphql/jpa/entity/CryptoPrice.java index 14e3b20..beeda42 100644 --- a/src/main/java/cryptosky/me/dbgateway/jpa/entity/Vehicle.java +++ b/src/main/java/cryptosky/me/graphql/jpa/entity/CryptoPrice.java @@ -1,4 +1,4 @@ -package cryptosky.me.dbgateway.jpa.entity; +package cryptosky.me.graphql.jpa.entity; import lombok.*; @@ -14,7 +14,7 @@ import java.time.LocalDate; @Data @EqualsAndHashCode @Entity -public class Vehicle { +public class CryptoPrice { @Id @Column(name = "ID", nullable = false) @@ -24,6 +24,9 @@ public class Vehicle { @Column(name = "timestamp", nullable = false) private LocalDate timestamp; + @Column(name = "symbol", nullable = false) + private String type; + @Column(name = "av_price", nullable = false) private Long average_price; @@ -33,10 +36,10 @@ public class Vehicle { @Column(name = "l_price", nullable = false) private Long low_price; - @Column(name = "c_price", nullable = false) + @Column(name = "c_price") private Long close_price; - @Column(name = "volume", nullable = false) + @Column(name = "volume") private Long volume; private transient String formattedDate; @@ -44,4 +47,4 @@ public class Vehicle { public String getFormattedDate() { return getTimestamp().toString(); } -} +} \ No newline at end of file diff --git a/src/main/java/cryptosky/me/graphql/jpa/repository/CryptoPriceRepository.java b/src/main/java/cryptosky/me/graphql/jpa/repository/CryptoPriceRepository.java new file mode 100644 index 0000000..c68db51 --- /dev/null +++ b/src/main/java/cryptosky/me/graphql/jpa/repository/CryptoPriceRepository.java @@ -0,0 +1,9 @@ +package cryptosky.me.graphql.jpa.repository; + +import cryptosky.me.graphql.jpa.entity.CryptoPrice; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CryptoPriceRepository extends JpaRepository { +} diff --git a/src/main/java/cryptosky/me/graphql/mutation/CryptoPriceMutation.java b/src/main/java/cryptosky/me/graphql/mutation/CryptoPriceMutation.java new file mode 100644 index 0000000..a031843 --- /dev/null +++ b/src/main/java/cryptosky/me/graphql/mutation/CryptoPriceMutation.java @@ -0,0 +1,19 @@ +package cryptosky.me.graphql.mutation; + +import com.coxautodev.graphql.tools.GraphQLMutationResolver; +import cryptosky.me.graphql.jpa.entity.CryptoPrice; +import cryptosky.me.graphql.service.CryptoPriceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class CryptoPriceMutation implements GraphQLMutationResolver { + + @Autowired + private CryptoPriceService cryptoPriceService; + + public CryptoPrice createPrice( final String createdDate, final String type, final Long av_price, + final Long h_price, final Long l_price, final Long c_price, final Long volume ) { + return this.cryptoPriceService.createPrice(createdDate, type, av_price, h_price, l_price, c_price, volume); + } +} diff --git a/src/main/java/cryptosky/me/graphql/query/CryptoPriceQuery.java b/src/main/java/cryptosky/me/graphql/query/CryptoPriceQuery.java new file mode 100644 index 0000000..9b93eb2 --- /dev/null +++ b/src/main/java/cryptosky/me/graphql/query/CryptoPriceQuery.java @@ -0,0 +1,25 @@ +package cryptosky.me.graphql.query; + +import com.coxautodev.graphql.tools.GraphQLQueryResolver; +import cryptosky.me.graphql.jpa.entity.CryptoPrice; +import cryptosky.me.graphql.service.CryptoPriceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Optional; + +@Component +public class CryptoPriceQuery implements GraphQLQueryResolver { + + @Autowired + private CryptoPriceService vehicleService; + + public List getVehicles(final int count) { + return this.vehicleService.getAllPrices(count); + } + + public Optional getVehicle(final int id) { + return this.vehicleService.getVehicle(id); + } +} diff --git a/src/main/java/cryptosky/me/graphql/service/CryptoPriceService.java b/src/main/java/cryptosky/me/graphql/service/CryptoPriceService.java new file mode 100644 index 0000000..df58108 --- /dev/null +++ b/src/main/java/cryptosky/me/graphql/service/CryptoPriceService.java @@ -0,0 +1,69 @@ +package cryptosky.me.graphql.service; + +import cryptosky.me.graphql.jpa.entity.CryptoPrice; +import cryptosky.me.graphql.jpa.repository.CryptoPriceRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@Service +public class CryptoPriceService { + + private final CryptoPriceRepository cryptoPriceRepository; + + public CryptoPriceService(final CryptoPriceRepository cryptoPriceRepository) { + this.cryptoPriceRepository = cryptoPriceRepository; + } + + @Transactional + public CryptoPrice createPrice( final String createdDate, final String type, final Long av_price, + final Long h_price, final Long l_price, final Long c_price, final Long volume ) { + + final CryptoPrice cryptoPrice = CryptoPrice.builder() + .timestamp(LocalDate.parse(createdDate)) + .type(type) + .average_price(av_price) + .high_price(h_price) + .low_price(l_price) + .close_price(c_price) + .volume(volume) + .build(); + + return this.cryptoPriceRepository.save(cryptoPrice); + } + + @Transactional(readOnly = true) + public List getAllPrices(final int count) { + return this.cryptoPriceRepository.findAll().stream() + .limit(count) + .collect(Collectors.toList()); + } + + @Transactional(readOnly = true) + public List getAllPricesByType(final int count, final String type) { + return this.cryptoPriceRepository.findAll().stream() + .filter(typeList -> typeList.getType().equals(type)) + .limit(count) + .collect(Collectors.toList()); + } + + @Transactional(readOnly = true) + public Optional getVehicle(final int id) { + return this.cryptoPriceRepository.findById(id); + } + + @Transactional(readOnly = true) + public Optional getPriceByCreatedDate(final String type, final String createdDate) { + return this.cryptoPriceRepository.findAll().stream() + .filter(typeList -> typeList.getType().equals(type)) + .filter(createdDateList -> createdDateList.getTimestamp().equals(createdDate)) + .findFirst(); + } + +// @Transactional(readOnly = true) +// public Optional getprice +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b13789..e69de29 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +0,0 @@ - diff --git a/src/main/resources/graphql/cryptoPriceQL.graphqls b/src/main/resources/graphql/cryptoPriceQL.graphqls new file mode 100644 index 0000000..36435ed --- /dev/null +++ b/src/main/resources/graphql/cryptoPriceQL.graphqls @@ -0,0 +1,19 @@ +type CryptoPrice { + id: ID!, + timestamp: String!, + type: String, + average_price: Float!, + high_price: Float, + low_price: Float, + close_price: Float, + volume: Float +} + +type Query { + vehicles(count: Int):[CryptoPrice] + vehicle(id: ID):CryptoPrice +} + +type Mutation { + createVehicle(type: String!, average_price: Float!, high_price: Float, low_price: Float, close_price: Float, volume: Float):CryptoPrice +} \ No newline at end of file diff --git a/src/main/resources/graphql/vehicleql.graphqls b/src/main/resources/graphql/vehicleql.graphqls deleted file mode 100644 index 97bde48..0000000 --- a/src/main/resources/graphql/vehicleql.graphqls +++ /dev/null @@ -1,16 +0,0 @@ -type Vehicle { - id: ID!, - type: String, - modelCode: String, - brandName: String, - launchDate: String -} - -type Query { - vehicles(count: Int):[Vehicle] - vehicle(id: ID):Vehicle -} - -type Mutation { - createVehicle(type: String!, modelCode: String!, brandName: String, launchDate: String):Vehicle -} \ No newline at end of file