Skip to content

Commit 44502fc

Browse files
authored
Merge pull request #3 from trendyol-data-eng-summer-intern-2019/dev
Dev
2 parents 053b68f + d084a11 commit 44502fc

File tree

14 files changed

+276
-74
lines changed

14 files changed

+276
-74
lines changed

pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<relativePath/>
1010
</parent>
1111
<groupId>com.trendyol</groupId>
12-
<artifactId>recom-engine</artifactId>
12+
<artifactId>recom-engine-web-service</artifactId>
1313
<version>0.0.1-SNAPSHOT</version>
1414
<name>recom-engine</name>
1515
<description>Demo project for Spring Boot</description>
@@ -28,7 +28,6 @@
2828
<groupId>org.springframework.kafka</groupId>
2929
<artifactId>spring-kafka</artifactId>
3030
</dependency>
31-
3231
<dependency>
3332
<groupId>org.springframework.boot</groupId>
3433
<artifactId>spring-boot-starter-test</artifactId>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.trendyol.recomengine.webservice.controller;
2+
3+
import com.trendyol.recomengine.webservice.model.Recommendation;
4+
import com.trendyol.recomengine.webservice.service.RecommendationService;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
import org.springframework.web.bind.annotation.PathVariable;
8+
import org.springframework.web.bind.annotation.RestController;
9+
10+
/**
11+
* Handles GET requests that contains that contain user id's. Fetches recommendations from database and returns them.
12+
*/
13+
@RestController
14+
class RecommendationController {
15+
16+
@Autowired
17+
RecommendationService recommendationService;
18+
19+
/**
20+
* This method is called when a GET request happens. Fetches recommendations from database for the user that is
21+
* specified in the argument.
22+
*
23+
* @param userId The user's id who sends the GET request.
24+
* @return If there is a recommendation list for the user in the database, returns it. Otherwise, returns a default
25+
* recommendation list using generateDefaultRecommendations.
26+
*/
27+
@GetMapping("/users/{userId}/recommendations")
28+
Recommendation getRecommendation(@PathVariable String userId) {
29+
return recommendationService.getRecommendations(userId);
30+
}
31+
}

src/main/java/com/trendyol/recomengine/webservice/controllers/ReviewController.java renamed to src/main/java/com/trendyol/recomengine/webservice/controller/ReviewController.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.trendyol.recomengine.webservice.controllers;
1+
package com.trendyol.recomengine.webservice.controller;
22

33
import com.trendyol.recomengine.webservice.engine.Producer;
4-
import com.trendyol.recomengine.webservice.resource.Review;
5-
import com.trendyol.recomengine.webservice.resource.ReviewWithoutUserId;
4+
import com.trendyol.recomengine.webservice.model.Review;
5+
import com.trendyol.recomengine.webservice.model.ReviewWithoutUserId;
66
import org.springframework.web.bind.annotation.PathVariable;
77
import org.springframework.web.bind.annotation.PostMapping;
88
import org.springframework.web.bind.annotation.RequestBody;
@@ -25,14 +25,15 @@ public class ReviewController {
2525
/**
2626
* This method is called when a POST request happens. Validates the data in the request body using validateReview
2727
* and sends them to Kafka.
28+
*
2829
* @param requestBody POST request's body which is converted to a ReviewWithoutUserId object.
2930
* @param userId The user's id who sends the POST request.
3031
* @return If the request body is a valid review, the method returns the same review that is posted. Otherwise,
3132
* the method returns an error message which tells why the request body is invalid.
3233
* @see ReviewWithoutUserId
3334
*/
3435
@PostMapping(value = "/users/{userId}/reviews")
35-
public Object sendMessageToKafkaTopic(@Valid @RequestBody ReviewWithoutUserId requestBody, @PathVariable String userId) {
36+
public Object createReview(@Valid @RequestBody ReviewWithoutUserId requestBody, @PathVariable String userId) {
3637
Review review = new Review(userId, requestBody);
3738

3839
String dataToSendToKafka = String.format("%s,%s,%.1f,%d", userId, requestBody.getProductId(),

src/main/java/com/trendyol/recomengine/webservice/controllers/RecommendationController.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

src/main/java/com/trendyol/recomengine/webservice/engine/Producer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class Producer {
2121
/**
2222
* Sends message to the default topic configured in the application.yml file. If the message is successfully sent
2323
* to the Kafka cluster, logs the produced message at INFO level.
24+
*
2425
* @param message Message string to be sent to Kafka cluster's default topic.
2526
*/
2627
public void sendMessage(String message) {

src/main/java/com/trendyol/recomengine/webservice/resource/Recommendation.java renamed to src/main/java/com/trendyol/recomengine/webservice/model/Recommendation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.trendyol.recomengine.webservice.resource;
1+
package com.trendyol.recomengine.webservice.model;
22

33
import org.springframework.data.annotation.Id;
44
import org.springframework.data.mongodb.core.mapping.Document;
@@ -21,7 +21,7 @@ public class Recommendation {
2121
private final String[] recommendations;
2222

2323
/**
24-
* @param _id The user's id who sends the POST request.
24+
* @param _id The user's id who sends the POST request.
2525
* @param recommendations Specific recommendations for the user
2626
*/
2727
public Recommendation(String _id, String[] recommendations) {

src/main/java/com/trendyol/recomengine/webservice/resource/Review.java renamed to src/main/java/com/trendyol/recomengine/webservice/model/Review.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.trendyol.recomengine.webservice.resource;
1+
package com.trendyol.recomengine.webservice.model;
22

33
import javax.validation.constraints.NotBlank;
4-
import java.util.Date;
4+
import java.sql.Timestamp;
55

66
/**
77
* To keep reviews
@@ -12,18 +12,18 @@ public class Review extends ReviewWithoutUserId {
1212
private final String userId;
1313

1414
/**
15-
* @param userId User's id who reviewed
15+
* @param userId User's id who reviewed
1616
* @param productId Reviewed product's id
17-
* @param score Reviewed score
18-
* @param time Review timestamp
17+
* @param score Reviewed score
18+
* @param time Review timestamp
1919
*/
20-
public Review(String userId, String productId, float score, Date time) {
20+
public Review(String userId, String productId, float score, Timestamp time) {
2121
super(productId, score, time);
2222
this.userId = userId;
2323
}
2424

2525
/**
26-
* @param userId User's id who reviewed
26+
* @param userId User's id who reviewed
2727
* @param reviewWithoutUserId ProductId, score and timestamp without user id
2828
*/
2929
public Review(String userId, ReviewWithoutUserId reviewWithoutUserId) {

src/main/java/com/trendyol/recomengine/webservice/resource/ReviewWithoutUserId.java renamed to src/main/java/com/trendyol/recomengine/webservice/model/ReviewWithoutUserId.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
package com.trendyol.recomengine.webservice.resource;
1+
package com.trendyol.recomengine.webservice.model;
22

3-
import javax.validation.constraints.*;
4-
import java.util.Date;
3+
import javax.validation.constraints.DecimalMin;
4+
import javax.validation.constraints.Max;
5+
import javax.validation.constraints.NotBlank;
6+
import javax.validation.constraints.NotNull;
7+
import java.sql.Timestamp;
58

69
/**
710
* To keep productId, score and timestamp without user id
@@ -11,17 +14,19 @@ public class ReviewWithoutUserId {
1114
@NotBlank
1215
private final String productId;
1316

14-
@DecimalMin(value = "0.5", inclusive = true) @Max(5)
17+
@DecimalMin(value = "0.5")
18+
@Max(5)
1519
private final float score;
1620

17-
private final Date timestamp;
21+
@NotNull
22+
private final Timestamp timestamp;
1823

1924
/**
2025
* @param productId Reviewed product's id
21-
* @param score Reviewed score
26+
* @param score Reviewed score
2227
* @param timestamp Review timestamp
2328
*/
24-
ReviewWithoutUserId(String productId, float score, Date timestamp) {
29+
ReviewWithoutUserId(String productId, float score, Timestamp timestamp) {
2530
this.productId = productId;
2631
this.score = score;
2732
this.timestamp = timestamp;
@@ -44,7 +49,7 @@ public float getScore() {
4449
/**
4550
* @return Review timestamp in seconds
4651
*/
47-
public Date getTimestamp() {
52+
public Timestamp getTimestamp() {
4853
return timestamp;
4954
}
5055

src/main/java/com/trendyol/recomengine/webservice/repositories/RecommendationRepository.java renamed to src/main/java/com/trendyol/recomengine/webservice/repository/RecommendationRepository.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.trendyol.recomengine.webservice.repositories;
1+
package com.trendyol.recomengine.webservice.repository;
22

3-
import com.trendyol.recomengine.webservice.resource.Recommendation;
3+
import com.trendyol.recomengine.webservice.model.Recommendation;
44
import org.springframework.data.mongodb.repository.MongoRepository;
55

66
/**
@@ -13,10 +13,11 @@ public interface RecommendationRepository extends MongoRepository<Recommendation
1313
/**
1414
* Searches for a document having the same _id with the method parameter in the specified collection of a specified
1515
* MongoDB database which are configured in the application.yml file.
16+
*
1617
* @param _id Document id to be searched.
1718
* @return If the document is found, converts document to a Recommendation object and returns it; returns null
1819
* otherwise.
1920
*/
2021
Recommendation findBy_id(String _id);
2122

22-
}
23+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.trendyol.recomengine.webservice.service;
2+
3+
import com.trendyol.recomengine.webservice.model.Recommendation;
4+
import org.springframework.stereotype.Service;
5+
6+
@Service
7+
public interface RecommendationService {
8+
Recommendation getRecommendations(String userId);
9+
}

0 commit comments

Comments
 (0)