From 3f7ef504795bfb7269d014db2355591812b4bc52 Mon Sep 17 00:00:00 2001 From: ManishKumarKeshri Date: Sat, 2 Jan 2021 17:38:13 -0800 Subject: [PATCH 1/4] Fetch a content by Id. Signed-off-by: ManishKumarKeshri --- build.gradle | 7 +++ src/main/java/TechVault/Application.java | 4 +- .../TechVault/controller/HomeInterface.java | 20 +++++++ .../TechVault/service/user/UserService.java | 9 +++ .../service/user/UserServiceImpl.java | 24 ++++++++ .../TechVault/service/user/model/Content.java | 57 +++++++++++++++++++ .../persistence/CommentPersistenceConfig.java | 35 ++++++++++++ .../service/user/persistence/ContentDao.java | 10 ++++ .../user/persistence/ContentDaoImpl.java | 25 ++++++++ .../user/persistence/ContentRepository.java | 12 ++++ .../user/response/ContentResponse.java | 32 +++++++++++ src/main/resources/application.properties | 5 +- 12 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 src/main/java/TechVault/service/user/UserService.java create mode 100644 src/main/java/TechVault/service/user/UserServiceImpl.java create mode 100644 src/main/java/TechVault/service/user/model/Content.java create mode 100644 src/main/java/TechVault/service/user/persistence/CommentPersistenceConfig.java create mode 100644 src/main/java/TechVault/service/user/persistence/ContentDao.java create mode 100644 src/main/java/TechVault/service/user/persistence/ContentDaoImpl.java create mode 100644 src/main/java/TechVault/service/user/persistence/ContentRepository.java create mode 100644 src/main/java/TechVault/service/user/response/ContentResponse.java diff --git a/build.gradle b/build.gradle index a89a491..ae225d9 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,7 @@ dependencies { compile group: 'org.springframework.boot', name: 'spring-boot', version: springBootVersion compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: springBootVersion + compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-mongodb', version: springBootVersion compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-sleuth', version: springSleuthVersion compile group: 'javax.el', name: 'javax.el-api', version: javaxElApiVersion compile group: 'org.glassfish', name: 'javax.el', version: glassfishVersion @@ -50,6 +51,12 @@ dependencies { tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}", "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}", "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}" + compile 'org.mongodb:mongo-java-driver:3.12.7' + compile 'org.mongodb:mongodb-driver-core:3.12.7' + compile 'commons-cli:commons-cli:1.4' + compile 'com.google.guava:guava:30.1-jre' + compile 'org.mongodb:bson:4.1.1' + compile 'com.googlecode.json-simple:json-simple:1.1.1' } task publishAllJars() { diff --git a/src/main/java/TechVault/Application.java b/src/main/java/TechVault/Application.java index 7385ead..62cae4f 100644 --- a/src/main/java/TechVault/Application.java +++ b/src/main/java/TechVault/Application.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; -@SpringBootApplication +@SpringBootApplication(scanBasePackages="TechVault") +@EnableMongoRepositories(basePackages = "TechVault") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); diff --git a/src/main/java/TechVault/controller/HomeInterface.java b/src/main/java/TechVault/controller/HomeInterface.java index 58569de..093e3bb 100644 --- a/src/main/java/TechVault/controller/HomeInterface.java +++ b/src/main/java/TechVault/controller/HomeInterface.java @@ -1,15 +1,27 @@ package TechVault.controller; +import TechVault.service.user.UserService; +import TechVault.service.user.response.ContentResponse; +import org.apache.catalina.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import java.util.UUID; + @Validated @RestController @RequestMapping("home") public class HomeInterface { + + @Autowired + private UserService userService; + /** * To get the home page sorted by likes in descending order. * @return A Response entity which will have all the blogs to be loaded as home page. @@ -46,4 +58,12 @@ public ResponseEntity getLatest() { public ResponseEntity getTrending() { return null; } + + @RequestMapping(method = RequestMethod.GET, value = "/{contentID}") + public ResponseEntity getContent(@PathVariable String contentID) { + System.out.println("Entering get Content"); + ContentResponse contentResponse = userService.getContent(contentID); + System.out.println("Content Response = " + contentResponse.getTitle()); + return new ResponseEntity<>(contentResponse, HttpStatus.OK); + } } diff --git a/src/main/java/TechVault/service/user/UserService.java b/src/main/java/TechVault/service/user/UserService.java new file mode 100644 index 0000000..29c52d5 --- /dev/null +++ b/src/main/java/TechVault/service/user/UserService.java @@ -0,0 +1,9 @@ +package TechVault.service.user; + +import TechVault.service.user.response.ContentResponse; + +import java.util.UUID; + +public interface UserService { + public ContentResponse getContent(String contentID); +} diff --git a/src/main/java/TechVault/service/user/UserServiceImpl.java b/src/main/java/TechVault/service/user/UserServiceImpl.java new file mode 100644 index 0000000..91fc44e --- /dev/null +++ b/src/main/java/TechVault/service/user/UserServiceImpl.java @@ -0,0 +1,24 @@ +package TechVault.service.user; + +import TechVault.service.user.model.Content; +import TechVault.service.user.persistence.ContentDao; +import TechVault.service.user.response.ContentResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +@Service +public class UserServiceImpl implements UserService{ + + @Autowired + private ContentDao contentDao; + + @Override + public ContentResponse getContent(String contentID) { + Content content = contentDao.getContentByID(contentID); + System.out.println("Content Response = " + content.getTitle()); + return new ContentResponse(content.getTitle(), content.getCompany(), content.getDatePosted(), HttpStatus.OK); + } +} diff --git a/src/main/java/TechVault/service/user/model/Content.java b/src/main/java/TechVault/service/user/model/Content.java new file mode 100644 index 0000000..530bf46 --- /dev/null +++ b/src/main/java/TechVault/service/user/model/Content.java @@ -0,0 +1,57 @@ +package TechVault.service.user.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; + +import java.util.Date; +import java.util.List; +import java.util.UUID; + +@Document(collection = "blogs") +@Builder +@Getter +@Data +@Setter +public class Content { + @Field(name = "uuid") + private String uuid; + + @Field(name = "date") + private String datePosted; + + @Field(name = "author") + private String author; + + @Field(name = "link") + private String link; + + @Field(name = "company") + private String company; + + @Field(name = "abstract") + private String abstractText; + + @Field(name = "categories") + private String categories; + + @Field(name = "title") + private String title; + + public String getTitle() { + return title; + } + + public String getCompany() { + return company; + } + + public String getDatePosted() { + return datePosted; + } +} diff --git a/src/main/java/TechVault/service/user/persistence/CommentPersistenceConfig.java b/src/main/java/TechVault/service/user/persistence/CommentPersistenceConfig.java new file mode 100644 index 0000000..ef0baa6 --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/CommentPersistenceConfig.java @@ -0,0 +1,35 @@ +package TechVault.service.user.persistence; + +import com.mongodb.ConnectionString; +import com.mongodb.MongoClientSettings; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; + +import java.util.Collection; +import java.util.Collections; + +@Configuration +public class CommentPersistenceConfig extends AbstractMongoClientConfiguration { + + @Override + protected String getDatabaseName() { + return "TechVault"; + } + + @Override + public MongoClient mongoClient() { + ConnectionString connectionString = new ConnectionString("mongodb+srv://manish:m@cluster0.kf3n4.mongodb.net/TechVault?retryWrites=true&w=majority"); + MongoClientSettings mongoClientSettings = MongoClientSettings.builder() + .applyConnectionString(connectionString) + .build(); + + return MongoClients.create(mongoClientSettings); + } + + @Override + public Collection getMappingBasePackages() { + return Collections.singleton("TechVault"); + } +} diff --git a/src/main/java/TechVault/service/user/persistence/ContentDao.java b/src/main/java/TechVault/service/user/persistence/ContentDao.java new file mode 100644 index 0000000..9871aee --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/ContentDao.java @@ -0,0 +1,10 @@ +package TechVault.service.user.persistence; + +import TechVault.service.user.model.Content; + +import java.util.UUID; + +public interface ContentDao { + + public Content getContentByID(String contentID); +} \ No newline at end of file diff --git a/src/main/java/TechVault/service/user/persistence/ContentDaoImpl.java b/src/main/java/TechVault/service/user/persistence/ContentDaoImpl.java new file mode 100644 index 0000000..dca8d81 --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/ContentDaoImpl.java @@ -0,0 +1,25 @@ +package TechVault.service.user.persistence; + +import TechVault.service.user.model.Content; +import lombok.val; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.stereotype.Component; + +import javax.swing.plaf.synth.SynthTextAreaUI; +import java.util.UUID; + +@Component +public class ContentDaoImpl implements ContentDao { + + @Autowired + private ContentRepository contentRepository; + + @Override + public Content getContentByID(String contentID) { + System.out.println("Content ID = " + contentID); + Content temp = this.contentRepository.findByUuid(contentID); + System.out.println("Content = " + temp); + return temp; + } +} \ No newline at end of file diff --git a/src/main/java/TechVault/service/user/persistence/ContentRepository.java b/src/main/java/TechVault/service/user/persistence/ContentRepository.java new file mode 100644 index 0000000..568e1d5 --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/ContentRepository.java @@ -0,0 +1,12 @@ +package TechVault.service.user.persistence; +import TechVault.service.user.model.Content; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository +public interface ContentRepository extends MongoRepository { + + public Content findByUuid(String contentID); +} \ No newline at end of file diff --git a/src/main/java/TechVault/service/user/response/ContentResponse.java b/src/main/java/TechVault/service/user/response/ContentResponse.java new file mode 100644 index 0000000..bdba064 --- /dev/null +++ b/src/main/java/TechVault/service/user/response/ContentResponse.java @@ -0,0 +1,32 @@ +package TechVault.service.user.response; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Data +@Getter +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ContentResponse { + private String title; + private String source; + private String timestamp; + + @JsonIgnore + private HttpStatus status; + + public ContentResponse(String title, String company, String datePosted, HttpStatus httpStatus) { + this.title = title; + this.source = company; + this.timestamp = datePosted; + this.status = httpStatus; + } + + public String getTitle() { + return title; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 211105d..d1398d8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,5 @@ #spring.application.name: TechVault -server.port= 8080 \ No newline at end of file +server.port= 8080 + +spring.data.mongodb.uri=mongodb+srv://manish:m@cluster0.kf3n4.mongodb.net/TechVault?retryWrites=true&w=majority +spring.data.mongodb.database=TechVault \ No newline at end of file From ee4ac835e3084076e649a20828631bec342a6a12 Mon Sep 17 00:00:00 2001 From: ManishKumarKeshri Date: Sat, 2 Jan 2021 17:48:09 -0800 Subject: [PATCH 2/4] Removing lombok. Signed-off-by: ManishKumarKeshri --- .../service/user/response/ContentResponse.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/TechVault/service/user/response/ContentResponse.java b/src/main/java/TechVault/service/user/response/ContentResponse.java index bdba064..510e81d 100644 --- a/src/main/java/TechVault/service/user/response/ContentResponse.java +++ b/src/main/java/TechVault/service/user/response/ContentResponse.java @@ -9,14 +9,10 @@ import org.springframework.http.HttpStatus; @Data -@Getter -@JsonInclude(JsonInclude.Include.NON_NULL) public class ContentResponse { private String title; private String source; private String timestamp; - - @JsonIgnore private HttpStatus status; public ContentResponse(String title, String company, String datePosted, HttpStatus httpStatus) { @@ -29,4 +25,16 @@ public ContentResponse(String title, String company, String datePosted, HttpStat public String getTitle() { return title; } + + public String getSource() { + return source; + } + + public String getTimestamp() { + return timestamp; + } + + public HttpStatus getStatus() { + return status; + } } From 632621d445aa0a3743629ea84a61006d1ee3ef20 Mon Sep 17 00:00:00 2001 From: ManishKumarKeshri Date: Sun, 3 Jan 2021 00:21:01 -0800 Subject: [PATCH 3/4] Updating. Signed-off-by: ManishKumarKeshri --- .../service/user/response/ContentResponse.java | 6 +++--- .../user/response/UserProfileResponse.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 src/main/java/TechVault/service/user/response/UserProfileResponse.java diff --git a/src/main/java/TechVault/service/user/response/ContentResponse.java b/src/main/java/TechVault/service/user/response/ContentResponse.java index 510e81d..ed8f1c4 100644 --- a/src/main/java/TechVault/service/user/response/ContentResponse.java +++ b/src/main/java/TechVault/service/user/response/ContentResponse.java @@ -2,17 +2,17 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.AllArgsConstructor; import lombok.Data; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @Data +@JsonInclude(JsonInclude.Include.NON_NULL) public class ContentResponse { private String title; private String source; private String timestamp; + + @JsonIgnore private HttpStatus status; public ContentResponse(String title, String company, String datePosted, HttpStatus httpStatus) { diff --git a/src/main/java/TechVault/service/user/response/UserProfileResponse.java b/src/main/java/TechVault/service/user/response/UserProfileResponse.java new file mode 100644 index 0000000..1684c6d --- /dev/null +++ b/src/main/java/TechVault/service/user/response/UserProfileResponse.java @@ -0,0 +1,18 @@ +package TechVault.service.user.response; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import org.springframework.http.HttpStatus; + +import java.util.List; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class UserProfileResponse { + private final long userId; + private final List bookmarks; + + @JsonIgnore + private final HttpStatus status; +} From 94271199cbe78e3b7820a449b9e8e183c4d9f7ba Mon Sep 17 00:00:00 2001 From: ManishKumarKeshri Date: Sun, 10 Jan 2021 17:48:38 -0800 Subject: [PATCH 4/4] Updating. Signed-off-by: ManishKumarKeshri --- .../controller/ContentInterface.java | 4 ++ .../TechVault/controller/HomeInterface.java | 7 --- .../TechVault/controller/UserInterface.java | 41 ++++++++++++- .../TechVault/service/user/UserService.java | 11 ++++ .../service/user/UserServiceImpl.java | 60 ++++++++++++++++++- .../service/user/model/BookMark.java | 26 ++++++++ .../TechVault/service/user/model/User.java | 27 +++++++++ .../service/user/persistence/BookMarkDao.java | 10 ++++ .../user/persistence/BookMarkDaoImpl.java | 17 ++++++ .../user/persistence/BookMarkRepository.java | 11 ++++ .../service/user/persistence/UserDao.java | 13 ++++ .../service/user/persistence/UserDaoImpl.java | 38 ++++++++++++ .../user/persistence/UserRepository.java | 11 ++++ .../service/user/request/LoginRequest.java | 13 ++++ .../request/UserProfileCreateRequest.java | 15 +++++ .../user/response/ContentResponse.java | 9 +-- .../service/user/response/LoginResponse.java | 18 ++++++ .../response/UserProfileCreateResponse.java | 18 ++++++ .../user/response/UserProfileResponse.java | 2 +- 19 files changed, 332 insertions(+), 19 deletions(-) create mode 100644 src/main/java/TechVault/controller/ContentInterface.java create mode 100644 src/main/java/TechVault/service/user/model/BookMark.java create mode 100644 src/main/java/TechVault/service/user/model/User.java create mode 100644 src/main/java/TechVault/service/user/persistence/BookMarkDao.java create mode 100644 src/main/java/TechVault/service/user/persistence/BookMarkDaoImpl.java create mode 100644 src/main/java/TechVault/service/user/persistence/BookMarkRepository.java create mode 100644 src/main/java/TechVault/service/user/persistence/UserDao.java create mode 100644 src/main/java/TechVault/service/user/persistence/UserDaoImpl.java create mode 100644 src/main/java/TechVault/service/user/persistence/UserRepository.java create mode 100644 src/main/java/TechVault/service/user/request/LoginRequest.java create mode 100644 src/main/java/TechVault/service/user/request/UserProfileCreateRequest.java create mode 100644 src/main/java/TechVault/service/user/response/LoginResponse.java create mode 100644 src/main/java/TechVault/service/user/response/UserProfileCreateResponse.java diff --git a/src/main/java/TechVault/controller/ContentInterface.java b/src/main/java/TechVault/controller/ContentInterface.java new file mode 100644 index 0000000..29eba12 --- /dev/null +++ b/src/main/java/TechVault/controller/ContentInterface.java @@ -0,0 +1,4 @@ +package TechVault.controller; + +public class ContentInterface { +} diff --git a/src/main/java/TechVault/controller/HomeInterface.java b/src/main/java/TechVault/controller/HomeInterface.java index 093e3bb..f3d4395 100644 --- a/src/main/java/TechVault/controller/HomeInterface.java +++ b/src/main/java/TechVault/controller/HomeInterface.java @@ -59,11 +59,4 @@ public ResponseEntity getTrending() { return null; } - @RequestMapping(method = RequestMethod.GET, value = "/{contentID}") - public ResponseEntity getContent(@PathVariable String contentID) { - System.out.println("Entering get Content"); - ContentResponse contentResponse = userService.getContent(contentID); - System.out.println("Content Response = " + contentResponse.getTitle()); - return new ResponseEntity<>(contentResponse, HttpStatus.OK); - } } diff --git a/src/main/java/TechVault/controller/UserInterface.java b/src/main/java/TechVault/controller/UserInterface.java index da1e4df..d523058 100644 --- a/src/main/java/TechVault/controller/UserInterface.java +++ b/src/main/java/TechVault/controller/UserInterface.java @@ -1,7 +1,20 @@ package TechVault.controller; +import TechVault.service.user.UserService; +import TechVault.service.user.request.LoginRequest; +import TechVault.service.user.request.UserProfileCreateRequest; +import TechVault.service.user.response.ContentResponse; +import TechVault.service.user.response.LoginResponse; +import TechVault.service.user.response.UserProfileCreateResponse; +import TechVault.service.user.response.UserProfileResponse; +import lombok.extern.java.Log; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @@ -11,12 +24,36 @@ @RequestMapping("user") public class UserInterface { + @Autowired + private UserService userService; + + @RequestMapping(method = RequestMethod.GET, value = "/{contentID}") + public ResponseEntity getContent(@PathVariable String contentID) { + System.out.println("Entering get Content"); + ContentResponse contentResponse = userService.getContent(contentID); + System.out.println("Content Response = " + contentResponse.getTitle()); + return new ResponseEntity<>(contentResponse, HttpStatus.OK); + } + /** * To the the profile of the user corresponding to the user id. * @return A Response entity which will have all the user details. */ @RequestMapping(method = RequestMethod.GET, value = "/{user_id}") - public ResponseEntity getUserProfile() { - return null; + public ResponseEntity getUserProfile(@PathVariable String userID) { + UserProfileResponse userProfileResponse = userService.userProfile(userID); + return new ResponseEntity<>(userProfileResponse, userProfileResponse.getStatus()); + } + + @RequestMapping(method = RequestMethod.POST, value = "/createProfile", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createUserProfile(@RequestBody UserProfileCreateRequest userProfileRequest) { + UserProfileCreateResponse userProfileCreateResponse = userService.createUserProfile(userProfileRequest); + return new ResponseEntity<>(userProfileCreateResponse, userProfileCreateResponse.getStatus()); + } + + @RequestMapping(method = RequestMethod.POST, value = "/login", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity login(@RequestBody LoginRequest loginRequest) { + LoginResponse loginResponse = userService.login(loginRequest); + return new ResponseEntity<>(loginResponse, loginResponse.getStatus()); } } diff --git a/src/main/java/TechVault/service/user/UserService.java b/src/main/java/TechVault/service/user/UserService.java index 29c52d5..80b3941 100644 --- a/src/main/java/TechVault/service/user/UserService.java +++ b/src/main/java/TechVault/service/user/UserService.java @@ -1,9 +1,20 @@ package TechVault.service.user; +import TechVault.service.user.request.LoginRequest; +import TechVault.service.user.request.UserProfileCreateRequest; import TechVault.service.user.response.ContentResponse; +import TechVault.service.user.response.LoginResponse; +import TechVault.service.user.response.UserProfileCreateResponse; +import TechVault.service.user.response.UserProfileResponse; import java.util.UUID; public interface UserService { public ContentResponse getContent(String contentID); + + public UserProfileCreateResponse createUserProfile(UserProfileCreateRequest userProfileCreateRequest); + + public LoginResponse login(LoginRequest loginRequest); + + public UserProfileResponse userProfile(String userId); } diff --git a/src/main/java/TechVault/service/user/UserServiceImpl.java b/src/main/java/TechVault/service/user/UserServiceImpl.java index 91fc44e..d4cf30e 100644 --- a/src/main/java/TechVault/service/user/UserServiceImpl.java +++ b/src/main/java/TechVault/service/user/UserServiceImpl.java @@ -1,12 +1,23 @@ package TechVault.service.user; +import TechVault.service.user.model.BookMark; import TechVault.service.user.model.Content; +import TechVault.service.user.model.User; +import TechVault.service.user.persistence.BookMarkDao; import TechVault.service.user.persistence.ContentDao; +import TechVault.service.user.persistence.UserDao; +import TechVault.service.user.request.LoginRequest; +import TechVault.service.user.request.UserProfileCreateRequest; import TechVault.service.user.response.ContentResponse; +import TechVault.service.user.response.LoginResponse; +import TechVault.service.user.response.UserProfileCreateResponse; +import TechVault.service.user.response.UserProfileResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; @Service @@ -15,10 +26,57 @@ public class UserServiceImpl implements UserService{ @Autowired private ContentDao contentDao; + @Autowired + private UserDao userDao; + + @Autowired + private BookMarkDao bookMarkDao; + @Override public ContentResponse getContent(String contentID) { Content content = contentDao.getContentByID(contentID); System.out.println("Content Response = " + content.getTitle()); - return new ContentResponse(content.getTitle(), content.getCompany(), content.getDatePosted(), HttpStatus.OK); + return new ContentResponse(content.getTitle(), content.getCompany(), content.getDatePosted()); + } + + @Override + public UserProfileCreateResponse createUserProfile(UserProfileCreateRequest userProfileCreateRequest) { + try { + userDao.addUser(userProfileCreateRequest.getEmail(), userProfileCreateRequest.getPassword(), userProfileCreateRequest.getUserName()); + return new UserProfileCreateResponse("Created profile.", HttpStatus.CREATED); + } catch (Exception e) { + return new UserProfileCreateResponse("Failed to create profile.", HttpStatus.BAD_REQUEST); + } + } + + @Override + public LoginResponse login(LoginRequest loginRequest) { + if (userDao.getUserByEmailPassword(loginRequest.getEmail(), loginRequest.getPassword())) { + return new LoginResponse("Successful", HttpStatus.OK); + } + return new LoginResponse("Try again!", HttpStatus.BAD_REQUEST); + } + + @Override + public UserProfileResponse userProfile(String userId) { + try { + User user = userDao.getUserByUserId(userId); + + List bookMarks = bookMarkDao.getBookMarksByUserId(userId); + + List contentResponseList = new ArrayList<>(); + + for (BookMark bookMark : bookMarks) { + String contentId = bookMark.getContentId(); + + Content content = contentDao.getContentByID(contentId); + + contentResponseList.add(new ContentResponse(content.getTitle(), content.getCompany(), bookMark.getPostedTime().toString())); + } + + return new UserProfileResponse(userId, contentResponseList, HttpStatus.OK); + } catch (Exception e) { + return new UserProfileResponse(null, null, HttpStatus.BAD_REQUEST); + } } } diff --git a/src/main/java/TechVault/service/user/model/BookMark.java b/src/main/java/TechVault/service/user/model/BookMark.java new file mode 100644 index 0000000..704d429 --- /dev/null +++ b/src/main/java/TechVault/service/user/model/BookMark.java @@ -0,0 +1,26 @@ +package TechVault.service.user.model; + +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; + +import java.security.Timestamp; + +@Document(collection = "bookmark") +@Builder +@Getter +@Data +@Setter +public class BookMark { + @Field(name = "contentId") + private String contentId; + + @Field(name = "userId") + private String userId; + + @Field(name = "timeStamp") + private Timestamp postedTime; +} diff --git a/src/main/java/TechVault/service/user/model/User.java b/src/main/java/TechVault/service/user/model/User.java new file mode 100644 index 0000000..5f13870 --- /dev/null +++ b/src/main/java/TechVault/service/user/model/User.java @@ -0,0 +1,27 @@ +package TechVault.service.user.model; + +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Field; + +@Document(collection = "user") +@Builder +@Getter +@Data +@Setter +public class User { + @Field(name = "userId") + private String userId; + + @Field(name = "userName") + private String userName; + + @Field(name = "email") + private String email; + + @Field(name = "password") + private String password; +} diff --git a/src/main/java/TechVault/service/user/persistence/BookMarkDao.java b/src/main/java/TechVault/service/user/persistence/BookMarkDao.java new file mode 100644 index 0000000..1f44273 --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/BookMarkDao.java @@ -0,0 +1,10 @@ +package TechVault.service.user.persistence; + + +import TechVault.service.user.model.BookMark; + +import java.util.List; + +public interface BookMarkDao { + public List getBookMarksByUserId(String userId); +} diff --git a/src/main/java/TechVault/service/user/persistence/BookMarkDaoImpl.java b/src/main/java/TechVault/service/user/persistence/BookMarkDaoImpl.java new file mode 100644 index 0000000..448e698 --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/BookMarkDaoImpl.java @@ -0,0 +1,17 @@ +package TechVault.service.user.persistence; + +import TechVault.service.user.model.BookMark; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +public class BookMarkDaoImpl implements BookMarkDao { + + @Autowired + private BookMarkRepository bookMarkRepository; + + @Override + public List getBookMarksByUserId(String userId) { + return this.bookMarkRepository.findAllByUserId(userId); + } +} diff --git a/src/main/java/TechVault/service/user/persistence/BookMarkRepository.java b/src/main/java/TechVault/service/user/persistence/BookMarkRepository.java new file mode 100644 index 0000000..a164d38 --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/BookMarkRepository.java @@ -0,0 +1,11 @@ +package TechVault.service.user.persistence; + +import TechVault.service.user.model.BookMark; +import TechVault.service.user.model.User; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.util.List; + +public interface BookMarkRepository extends MongoRepository { + public List findAllByUserId(String userId); +} diff --git a/src/main/java/TechVault/service/user/persistence/UserDao.java b/src/main/java/TechVault/service/user/persistence/UserDao.java new file mode 100644 index 0000000..649aef2 --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/UserDao.java @@ -0,0 +1,13 @@ +package TechVault.service.user.persistence; + + +import TechVault.service.user.model.User; + +public interface UserDao { + + public String addUser(String email, String password, String userName); + + public boolean getUserByEmailPassword(String email, String password); + + public User getUserByUserId(String userId); +} diff --git a/src/main/java/TechVault/service/user/persistence/UserDaoImpl.java b/src/main/java/TechVault/service/user/persistence/UserDaoImpl.java new file mode 100644 index 0000000..70dd40d --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/UserDaoImpl.java @@ -0,0 +1,38 @@ +package TechVault.service.user.persistence; + +import TechVault.service.user.model.User; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Random; + +public class UserDaoImpl implements UserDao { + + @Autowired + private UserRepository userRepository; + + @Override + public String addUser(String email, String password, String userName) { + long userId = new Random().nextLong(); + userRepository.save(User.builder() + .userId(Long.toString(userId)) + .userName(userName) + .password(password) + .email(email) + .build()); + return null; + } + + @Override + public boolean getUserByEmailPassword(String email, String password) { + User temp = this.userRepository.findByEmail(email); + if (temp.getPassword().equals(password)) { + return true; + } + return false; + } + + @Override + public User getUserByUserId(String userId) { + return this.userRepository.findByUserId(userId); + } +} diff --git a/src/main/java/TechVault/service/user/persistence/UserRepository.java b/src/main/java/TechVault/service/user/persistence/UserRepository.java new file mode 100644 index 0000000..6d66a35 --- /dev/null +++ b/src/main/java/TechVault/service/user/persistence/UserRepository.java @@ -0,0 +1,11 @@ +package TechVault.service.user.persistence; + +import TechVault.service.user.model.User; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface UserRepository extends MongoRepository { + + public User findByEmail(String email); + + public User findByUserId(String userId); +} diff --git a/src/main/java/TechVault/service/user/request/LoginRequest.java b/src/main/java/TechVault/service/user/request/LoginRequest.java new file mode 100644 index 0000000..fed9298 --- /dev/null +++ b/src/main/java/TechVault/service/user/request/LoginRequest.java @@ -0,0 +1,13 @@ +package TechVault.service.user.request; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class LoginRequest { + @NotNull + private String email; + @NotNull + private String password; +} diff --git a/src/main/java/TechVault/service/user/request/UserProfileCreateRequest.java b/src/main/java/TechVault/service/user/request/UserProfileCreateRequest.java new file mode 100644 index 0000000..01743a2 --- /dev/null +++ b/src/main/java/TechVault/service/user/request/UserProfileCreateRequest.java @@ -0,0 +1,15 @@ +package TechVault.service.user.request; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserProfileCreateRequest { + @NotNull + private String email; + @NotNull + private String password; + @NotNull + private String userName; +} diff --git a/src/main/java/TechVault/service/user/response/ContentResponse.java b/src/main/java/TechVault/service/user/response/ContentResponse.java index ed8f1c4..7ae801c 100644 --- a/src/main/java/TechVault/service/user/response/ContentResponse.java +++ b/src/main/java/TechVault/service/user/response/ContentResponse.java @@ -12,14 +12,10 @@ public class ContentResponse { private String source; private String timestamp; - @JsonIgnore - private HttpStatus status; - - public ContentResponse(String title, String company, String datePosted, HttpStatus httpStatus) { + public ContentResponse(String title, String company, String datePosted) { this.title = title; this.source = company; this.timestamp = datePosted; - this.status = httpStatus; } public String getTitle() { @@ -34,7 +30,4 @@ public String getTimestamp() { return timestamp; } - public HttpStatus getStatus() { - return status; - } } diff --git a/src/main/java/TechVault/service/user/response/LoginResponse.java b/src/main/java/TechVault/service/user/response/LoginResponse.java new file mode 100644 index 0000000..6ea62a3 --- /dev/null +++ b/src/main/java/TechVault/service/user/response/LoginResponse.java @@ -0,0 +1,18 @@ +package TechVault.service.user.response; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Data +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class LoginResponse { + private String message; + + @JsonIgnore + private HttpStatus status; +} diff --git a/src/main/java/TechVault/service/user/response/UserProfileCreateResponse.java b/src/main/java/TechVault/service/user/response/UserProfileCreateResponse.java new file mode 100644 index 0000000..4159689 --- /dev/null +++ b/src/main/java/TechVault/service/user/response/UserProfileCreateResponse.java @@ -0,0 +1,18 @@ +package TechVault.service.user.response; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Data +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class UserProfileCreateResponse { + private String message; + + @JsonIgnore + private HttpStatus status; +} diff --git a/src/main/java/TechVault/service/user/response/UserProfileResponse.java b/src/main/java/TechVault/service/user/response/UserProfileResponse.java index 1684c6d..a6baf3b 100644 --- a/src/main/java/TechVault/service/user/response/UserProfileResponse.java +++ b/src/main/java/TechVault/service/user/response/UserProfileResponse.java @@ -10,7 +10,7 @@ @Data @JsonInclude(JsonInclude.Include.NON_NULL) public class UserProfileResponse { - private final long userId; + private final String userId; private final List bookmarks; @JsonIgnore