Skip to content

Commit

Permalink
Merge branch 'CetinaLuka:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
NadicaUzunova committed Jan 18, 2024
2 parents 796ad93 + a0c3cce commit 9c0c817
Show file tree
Hide file tree
Showing 58 changed files with 291 additions and 2,473 deletions.
57 changes: 56 additions & 1 deletion backend/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,56 @@
# demo_backend_reactive
# demo_backend_reactive

This project uses Quarkus, the Supersonic Subatomic Java Framework.

If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .

## Running the application in dev mode

You can run your application in dev mode that enables live coding using:
```shell script
./mvnw compile quarkus:dev
```

> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/.
## Packaging and running the application

The application can be packaged using:
```shell script
./mvnw package
```
It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory.
Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory.

The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`.

If you want to build an _über-jar_, execute the following command:
```shell script
./mvnw package -Dquarkus.package.type=uber-jar
```

The application, packaged as an _über-jar_, is now runnable using `java -jar target/*-runner.jar`.

## Creating a native executable

You can create a native executable using:
```shell script
./mvnw package -Dnative
```

Or, if you don't have GraalVM installed, you can run the native executable build in a container using:
```shell script
./mvnw package -Dnative -Dquarkus.native.container-build=true
```

You can then execute your native executable with: `./target/measurements-1.0.0-SNAPSHOT-runner`

If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.

## Provided Code

### RESTEasy Reactive

Easily start your Reactive RESTful Web Services

[Related guide section...](https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources)
2 changes: 1 addition & 1 deletion backend/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>si.um.feri.telecom</groupId>
<artifactId>telecom</artifactId>
<artifactId>measurements</artifactId>
<version>1.0.0</version>
<properties>
<compiler-plugin.version>3.11.0</compiler-plugin.version>
Expand Down
6 changes: 3 additions & 3 deletions backend/src/main/docker/Dockerfile.jvm
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
#
# Then, build the image with:
#
# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/telecom-jvm .
# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/measurements-jvm .
#
# Then run the container using:
#
# docker run -i --rm -p 8080:8080 quarkus/telecom-jvm
# docker run -i --rm -p 8080:8080 quarkus/measurements-jvm
#
# If you want to include the debug port into your docker image
# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
Expand All @@ -20,7 +20,7 @@
#
# Then run the container using :
#
# docker run -i --rm -p 8080:8080 quarkus/telecom-jvm
# docker run -i --rm -p 8080:8080 quarkus/measurements-jvm
#
# This image uses the `run-java.sh` script to run the application.
# This scripts computes the command line to execute your Java application, and
Expand Down
6 changes: 3 additions & 3 deletions backend/src/main/docker/Dockerfile.legacy-jar
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
#
# Then, build the image with:
#
# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/telecom-legacy-jar .
# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/measurements-legacy-jar .
#
# Then run the container using:
#
# docker run -i --rm -p 8080:8080 quarkus/telecom-legacy-jar
# docker run -i --rm -p 8080:8080 quarkus/measurements-legacy-jar
#
# If you want to include the debug port into your docker image
# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
Expand All @@ -20,7 +20,7 @@
#
# Then run the container using :
#
# docker run -i --rm -p 8080:8080 quarkus/telecom-legacy-jar
# docker run -i --rm -p 8080:8080 quarkus/measurements-legacy-jar
#
# This image uses the `run-java.sh` script to run the application.
# This scripts computes the command line to execute your Java application, and
Expand Down
4 changes: 2 additions & 2 deletions backend/src/main/docker/Dockerfile.native
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
#
# Then, build the image with:
#
# docker build -f src/main/docker/Dockerfile.native -t quarkus/telecom .
# docker build -f src/main/docker/Dockerfile.native -t quarkus/measurements .
#
# Then run the container using:
#
# docker run -i --rm -p 8080:8080 quarkus/telecom
# docker run -i --rm -p 8080:8080 quarkus/measurements
#
###
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.9
Expand Down
4 changes: 2 additions & 2 deletions backend/src/main/docker/Dockerfile.native-micro
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
#
# Then, build the image with:
#
# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/telecom .
# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/measurements .
#
# Then run the container using:
#
# docker run -i --rm -p 8080:8080 quarkus/telecom
# docker run -i --rm -p 8080:8080 quarkus/measurements
#
###
FROM quay.io/quarkus/quarkus-micro-image:2.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
package si.um.feri.telecom;
package si.um.feri.measurements;

import io.quarkus.hibernate.reactive.panache.Panache;
import io.quarkus.runtime.Startup;
import io.quarkus.runtime.StartupEvent;
import io.quarkus.vertx.VertxContextSupport;
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.subscription.Cancellable;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;
import org.hibernate.reactive.mutiny.Mutiny;
import si.um.feri.telecom.dao.MeasurementRepository;
import si.um.feri.telecom.dao.ProductRepository;
import si.um.feri.telecom.dto.post.PostMeasurement;
import si.um.feri.telecom.vao.Measurement;
import si.um.feri.telecom.vao.Product;
import si.um.feri.measurements.dao.MeasurementRepository;
import si.um.feri.measurements.dao.ProductRepository;
import si.um.feri.measurements.dto.post.PostMeasurement;
import si.um.feri.measurements.vao.Measurement;
import si.um.feri.measurements.vao.Product;

@ApplicationScoped
public class AddTestData {
Expand All @@ -37,8 +33,8 @@ public void onStart(@Observes StartupEvent ev) throws Throwable {
p2.setMinMeasure(-25.0);
p2.setMaxMeasure(-8.0);

PostMeasurement pm1 = new PostMeasurement(p1.getId(), 12);
PostMeasurement pm2 = new PostMeasurement(p1.getId(), -10);
PostMeasurement pm1 = new PostMeasurement(Long.valueOf(1), 12);
PostMeasurement pm2 = new PostMeasurement(Long.valueOf(2), -10);
return productRepository.persist(p1, p2).chain(() -> measurementRepository.persist(new Measurement(pm1, p1), new Measurement(pm2, p2)));
}));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package si.um.feri.telecom;
package si.um.feri.measurements;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package si.um.feri.telecom;
package si.um.feri.measurements;

import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.Entity;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package si.um.feri.measurements.dao;

import io.quarkus.hibernate.reactive.panache.PanacheRepository;
import io.smallrye.mutiny.Uni;
import jakarta.enterprise.context.ApplicationScoped;
import si.um.feri.measurements.vao.Measurement;

import java.time.LocalDateTime;
import java.util.List;

@ApplicationScoped
public class MeasurementRepository implements PanacheRepository<Measurement> {
public Uni<List<Measurement>> findByCreatedGreaterThan(LocalDateTime created){
return find("created >= ?1", created).list();
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package si.um.feri.telecom.dao;
package si.um.feri.measurements.dao;

import io.quarkus.hibernate.reactive.panache.PanacheRepository;
import jakarta.enterprise.context.ApplicationScoped;
import si.um.feri.telecom.vao.Product;
import si.um.feri.measurements.vao.Product;

@ApplicationScoped
public class ProductRepository implements PanacheRepository<Product> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package si.um.feri.telecom.dto;
package si.um.feri.measurements.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
Expand All @@ -7,9 +7,9 @@

@JsonInclude(value = Include.NON_NULL)
public record Measurement (
int id,
Long id,
String date,
int productId,
Long productId,
double avgTemperature,
boolean isOk) {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package si.um.feri.telecom.dto;
package si.um.feri.measurements.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

@JsonInclude(value = Include.NON_NULL)
public record Product (
int id,
Long id,
String name,
double maxMeasure,
double minMeasure) {}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package si.um.feri.telecom.dto.post;
package si.um.feri.measurements.dto.post;

public record PostMeasurement (
int id,
Long id,
double avgTemperature) {}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package si.um.feri.telecom.dto.post;
package si.um.feri.measurements.dto.post;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,20 @@
package si.um.feri.telecom.rest;
package si.um.feri.measurements.rest;

import io.smallrye.mutiny.Uni;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.jboss.resteasy.reactive.RestResponse;
import si.um.feri.telecom.dao.MeasurementRepository;
import si.um.feri.telecom.dao.ProductRepository;
import si.um.feri.telecom.dto.post.PostMeasurement;
import si.um.feri.telecom.dto.post.PostMeasurementResponse;
import si.um.feri.telecom.vao.Measurement;
import si.um.feri.telecom.vao.Product;

import java.util.List;
import java.util.Optional;
import si.um.feri.measurements.dao.MeasurementRepository;
import si.um.feri.measurements.dao.ProductRepository;
import si.um.feri.measurements.dto.post.PostMeasurement;
import si.um.feri.measurements.dto.post.PostMeasurementResponse;
import si.um.feri.measurements.vao.Measurement;

import java.util.logging.Logger;

@Path("/measurements")
@Path("/product_measurement")
public class MeasurementController {

private static final Logger log = Logger.getLogger(MeasurementController.class.toString());
Expand All @@ -31,15 +25,11 @@ public class MeasurementController {
@Inject
ProductRepository productRepository;

@GET
@Produces(MediaType.APPLICATION_JSON)
public Uni<List<Measurement>> getAllProducts() {
return measurementRepository.listAll();
}
boolean ok = true;
@POST
public Uni<RestResponse<PostMeasurementResponse>> addMeasurement(PostMeasurement m){
return productRepository.findById(Long.valueOf(m.id())).onItem().transformToUni(item -> {
log.info("id: "+item.getId());
Measurement vao = new Measurement(m, item);
boolean ok = true;

Expand All @@ -58,5 +48,5 @@ public Uni<RestResponse<PostMeasurementResponse>> addMeasurement(PostMeasurement
.onItem().transform(ignored -> RestResponse.ok(new PostMeasurementResponse(finalOk ? "ok" : "not ok")));
})
.onFailure().recoverWithItem(failure -> RestResponse.ResponseBuilder.create(Response.Status.NOT_ACCEPTABLE, new PostMeasurementResponse("product-not-found")).build());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package si.um.feri.measurements.rest;

import io.smallrye.mutiny.Uni;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import si.um.feri.measurements.dao.MeasurementRepository;
import si.um.feri.measurements.dto.Measurement;

import java.time.Instant;
import java.time.LocalDateTime;
import java.util.List;
import java.util.TimeZone;
import java.util.logging.Logger;
import java.util.stream.Collectors;

@Path("/history")
@Produces(MediaType.APPLICATION_JSON)
public class MeasurementHistoryController {

private static final Logger log = Logger.getLogger(MeasurementController.class.toString());

@Inject
MeasurementRepository measurementRepository;

private int envHistoryDayslimit = 10;

@GET
public Uni<List<Measurement>> getHistory(){
long history = System.currentTimeMillis() - envHistoryDayslimit * 3_600_000 * 24;
LocalDateTime historyDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(history), TimeZone.getDefault().toZoneId());
return measurementRepository.findByCreatedGreaterThan(historyDate).onItem().transform(list -> list.stream().map(si.um.feri.measurements.vao.Measurement::toDto).collect(Collectors.toList()));
}

}
Loading

0 comments on commit 9c0c817

Please sign in to comment.