Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
67edeed
Merge pull request #12 from romainsessa/master
romainsessa Aug 2, 2023
797bcf3
Merge remote-tracking branch 'origin/master'
NdeyeHoudia May 24, 2024
254d7fc
Merge remote-tracking branch 'origin/master'
NdeyeHoudia May 24, 2024
6b160cd
Merge remote-tracking branch 'origin/master'
NdeyeHoudia Jun 21, 2024
9126a4e
Correction des tests de performance
NdeyeHoudia Jul 5, 2024
398656c
Create maven.yml
NdeyeHoudia Jul 5, 2024
df6b01e
Correction des tests de performance
NdeyeHoudia Jul 5, 2024
9f4ad86
Correction des tests de performance
NdeyeHoudia Jul 5, 2024
3be658c
Merge remote-tracking branch 'origin/master'
NdeyeHoudia Jul 5, 2024
71e2a11
Merge remote-tracking branch 'origin/master'
NdeyeHoudia Jul 5, 2024
fb19f29
Merge remote-tracking branch 'origin/master'
NdeyeHoudia Jul 5, 2024
1e84589
fichier yaml
NdeyeHoudia Jul 5, 2024
952c520
Update maven.yml
NdeyeHoudia Jul 19, 2024
668838b
update file maven.yml
NdeyeHoudia Jul 26, 2024
29cf3ad
Update maven.yml
NdeyeHoudia Jul 26, 2024
968ed56
update file maven.yml
NdeyeHoudia Jul 26, 2024
f6f227f
change jdk version
NdeyeHoudia Jul 26, 2024
bc2703d
change jdk
NdeyeHoudia Jul 26, 2024
c0a5c49
ajout du pom
NdeyeHoudia Jul 26, 2024
4a18a74
ajout du pom
NdeyeHoudia Jul 26, 2024
84676d7
ajout des dependances
NdeyeHoudia Jul 26, 2024
bac507a
ajout des dependances
NdeyeHoudia Jul 26, 2024
ed5f72d
ajout des dependances
NdeyeHoudia Jul 26, 2024
8673292
ajout de variable environement
NdeyeHoudia Jul 26, 2024
b541e11
ajout de variable environement
NdeyeHoudia Jul 26, 2024
c7be0ca
ajout de variable environement
NdeyeHoudia Jul 26, 2024
88ebeb9
test avec le fichier yaml
NdeyeHoudia Aug 2, 2024
2fab219
Correction des bugs
NdeyeHoudia Sep 6, 2024
6f4a845
lancer le build
NdeyeHoudia Sep 12, 2024
961b798
config build
NdeyeHoudia Sep 18, 2024
d1a8926
disabled test performance
NdeyeHoudia Sep 18, 2024
f7d48a0
code clean
NdeyeHoudia Sep 18, 2024
37ba29f
Merge remote-tracking branch 'origin/dev_projet8' into dev_projet8
NdeyeHoudia Sep 21, 2024
f089ae1
clean code
NdeyeHoudia Sep 21, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Java CI with Maven

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

env:
CHANGE_DIR: cd ./TourGuide
INSTALL_DEPENDENCIES: |
mvn install:install-file -Dfile=./libs/gpsUtil.jar -DgroupId=gpsUtil -DartifactId=gpsUtil -Dversion=1.0.0 -Dpackaging=jar
mvn install:install-file -Dfile=./libs/RewardCentral.jar -DgroupId=rewardCentral -DartifactId=rewardCentral -Dversion=1.0.0 -Dpackaging=jar
mvn install:install-file -Dfile=./libs/TripPricer.jar -DgroupId=tripPricer -DartifactId=tripPricer -Dversion=1.0.0 -Dpackaging=jar

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: |
${{env.CHANGE_DIR}}
${{env.INSTALL_DEPENDENCIES}}
mvn -B clean compile
test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: |
${{env.CHANGE_DIR}}
${{env.INSTALL_DEPENDENCIES}}
mvn -B clean test
package:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: |
${{env.CHANGE_DIR}}
${{env.INSTALL_DEPENDENCIES}}
mvn -B clean package
- name: upload jar
uses: actions/upload-artifact@v4
with:
path: ./TourGuide/target/*.jar
5 changes: 5 additions & 0 deletions TourGuide/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@
<artifactId>rewardCentral</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.5</version>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.openclassrooms.tourguide;

import java.util.List;
import java.util.concurrent.ExecutionException;

import com.openclassrooms.tourguide.dto.AttractionDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import gpsUtil.location.Attraction;
import gpsUtil.location.VisitedLocation;

import com.openclassrooms.tourguide.service.TourGuideService;
Expand All @@ -28,26 +29,16 @@ public String index() {
}

@RequestMapping("/getLocation")
public VisitedLocation getLocation(@RequestParam String userName) {
public VisitedLocation getLocation(@RequestParam String userName) throws ExecutionException, InterruptedException {
return tourGuideService.getUserLocation(getUser(userName));
}

// TODO: Change this method to no longer return a List of Attractions.
// Instead: Get the closest five tourist attractions to the user - no matter how far away they are.
// Return a new JSON object that contains:
// Name of Tourist attraction,
// Tourist attractions lat/long,
// The user's location lat/long,
// The distance in miles between the user's location and each of the attractions.
// The reward points for visiting each Attraction.
// Note: Attraction reward points can be gathered from RewardsCentral
@RequestMapping("/getNearbyAttractions")
public List<Attraction> getNearbyAttractions(@RequestParam String userName) {
public List<AttractionDto> getNearbyAttractions(@RequestParam String userName) throws ExecutionException, InterruptedException {
VisitedLocation visitedLocation = tourGuideService.getUserLocation(getUser(userName));
return tourGuideService.getNearByAttractions(visitedLocation);
}
@RequestMapping("/getRewards")

@RequestMapping("/getRewards")
public List<UserReward> getRewards(@RequestParam String userName) {
return tourGuideService.getUserRewards(getUser(userName));
}
Expand All @@ -60,6 +51,5 @@ public List<Provider> getTripDeals(@RequestParam String userName) {
private User getUser(String userName) {
return tourGuideService.getUser(userName);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.openclassrooms.tourguide.dto;

public class AttractionDto {
private String attractionName;
private double latitude;
private double longitude;
private double latitudeUser;
private double longitudeUser;
private double distance;

public double getLatitudeUser() {
return latitudeUser;
}

public void setLatitudeUser(double latitudeUser) {
this.latitudeUser = latitudeUser;
}

public double getLongitudeUser() {
return longitudeUser;
}

public void setLongitudeUser(double longitudeUser) {
this.longitudeUser = longitudeUser;
}
private double rewardPoints;

public double getRewardPoints() {
return rewardPoints;
}

public void setRewardPoints(double rewardPoints) {
this.rewardPoints = rewardPoints;
}
public String getAttractionName() {
return attractionName;
}

public void setAttractionName(String attractionName) {
this.attractionName = attractionName;
}

public double getLatitude() {
return latitude;
}

public void setLatitude(double latitude) {
this.latitude = latitude;
}

public double getLongitude() {
return longitude;
}

public void setLongitude(double longitude) {
this.longitude = longitude;
}

public double getDistance() {
return distance;
}

public void setDistance(double distance) {
this.distance = distance;
}

public AttractionDto(String attractionName, double latitude, double longitude, double latitudeUser, double longitudeUser, double distance, double rewardPoints) {
this.attractionName = attractionName;
this.latitude = latitude;
this.longitude = longitude;
this.latitudeUser = latitudeUser;
this.longitudeUser = longitudeUser;
this.distance = distance;
this.rewardPoints = rewardPoints;
}

public AttractionDto() {

}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.openclassrooms.tourguide.service;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.*;

import org.springframework.stereotype.Service;

Expand All @@ -12,6 +14,7 @@
import com.openclassrooms.tourguide.user.User;
import com.openclassrooms.tourguide.user.UserReward;


@Service
public class RewardsService {
private static final double STATUTE_MILES_PER_NAUTICAL_MILE = 1.15077945;
Expand All @@ -35,27 +38,48 @@ public void setProximityBuffer(int proximityBuffer) {
public void setDefaultProximityBuffer() {
proximityBuffer = defaultProximityBuffer;
}
public void calculateRewards(User user) {

public void parallelSum100(User user) throws InterruptedException {
List<VisitedLocation> userLocations = user.getVisitedLocations();
List<Attraction> attractions = gpsUtil.getAttractions();

for(VisitedLocation visitedLocation : userLocations) {
for(Attraction attraction : attractions) {
if(user.getUserRewards().stream().filter(r -> r.attraction.attractionName.equals(attraction.attractionName)).count() == 0) {
if(nearAttraction(visitedLocation, attraction)) {
user.addUserReward(new UserReward(visitedLocation, attraction, getRewardPoints(attraction, user)));
ExecutorService executorService = Executors.newFixedThreadPool(4);
for (VisitedLocation visitedLocation : userLocations) {
for (Attraction attraction : attractions) {
executorService.execute(() -> {
if (Arrays.stream(user.getUserRewards().stream().filter(r -> r.attraction.attractionName.equals(attraction.attractionName)).toArray()).count() == 0) {
if (nearAttraction(visitedLocation, attraction)) {
user.addUserReward(new UserReward(visitedLocation, attraction, getRewardPoints(attraction, user)));
}
}
}

});
}
executorService.shutdown();
executorService.awaitTermination(5, TimeUnit.SECONDS);
}
}


public CompletableFuture<Void> calculateRewards(User user){
return CompletableFuture.runAsync(() ->{
List<Attraction> attractions = gpsUtil.getAttractions();
List<VisitedLocation> userLocations = new CopyOnWriteArrayList<>(user.getVisitedLocations());
for(VisitedLocation visitedLocation : userLocations){
List<Attraction> nearAttractionFirstTime = attractions.stream()
.filter(a ->
(nearAttraction(visitedLocation,a))
&& (user.getUserRewards().stream()
.anyMatch(r -> r.attraction.attractionName.equals(a.attractionName))))
.toList();
nearAttractionFirstTime.forEach(a -> user.addUserReward(new UserReward(visitedLocation, a, getRewardPoints(a,user))));
}
}, Executors.newSingleThreadExecutor());
}

public boolean isWithinAttractionProximity(Attraction attraction, Location location) {
return getDistance(attraction, location) > attractionProximityRange ? false : true;
}

private boolean nearAttraction(VisitedLocation visitedLocation, Attraction attraction) {
public boolean nearAttraction(VisitedLocation visitedLocation, Attraction attraction) {
return getDistance(attraction, visitedLocation.location) > proximityBuffer ? false : true;
}

Expand Down
Loading