diff --git a/BE/pom.xml b/BE/pom.xml index 09fad9b..0e736cc 100644 --- a/BE/pom.xml +++ b/BE/pom.xml @@ -40,7 +40,18 @@ org.neo4j.driver neo4j-java-driver - + + org.neo4j + neo4j-ogm-core + 4.0.10 + compile + + + org.neo4j + neo4j-ogm-bolt-driver + 4.0.10 + runtime + org.springframework.boot spring-boot-devtools diff --git a/BE/src/main/java/org/example/controllers/UserController.java b/BE/src/main/java/org/example/controllers/UserController.java index 4044a11..4f43e9b 100644 --- a/BE/src/main/java/org/example/controllers/UserController.java +++ b/BE/src/main/java/org/example/controllers/UserController.java @@ -1,8 +1,10 @@ package org.example.controllers; import org.example.models.User; +import org.example.objects.ApiResponse; import org.example.objects.UserDTO; import org.example.repositories.UserRepository; +import org.example.requests.CreateLikeRequest; import org.example.requests.CreateUserRequest; import org.example.services.UserService; import org.springframework.http.HttpStatus; @@ -36,4 +38,11 @@ public class UserController { return new ResponseEntity<>(responseUser, HttpStatus.CREATED); } + + @PostMapping("/createLike") + public ApiResponse createLike(@RequestBody CreateLikeRequest request) { + ApiResponse response = new ApiResponse<>(); + response.setResult(userService.createLike(request)); + return response; + } } diff --git a/BE/src/main/java/org/example/models/Like.java b/BE/src/main/java/org/example/models/Like.java new file mode 100644 index 0000000..f36c6ea --- /dev/null +++ b/BE/src/main/java/org/example/models/Like.java @@ -0,0 +1,26 @@ +package org.example.models; + + +import lombok.*; +import lombok.experimental.FieldDefaults; +import org.neo4j.ogm.annotation.EndNode; +import org.neo4j.ogm.annotation.RelationshipEntity; +import org.neo4j.ogm.annotation.StartNode; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +@RelationshipEntity(type = "LIKE") +public class Like { + Long userId; + Long postId; + String status; + + @StartNode + private User user; + + @EndNode + private Post post; +} diff --git a/BE/src/main/java/org/example/objects/ApiResponse.java b/BE/src/main/java/org/example/objects/ApiResponse.java new file mode 100644 index 0000000..cea6462 --- /dev/null +++ b/BE/src/main/java/org/example/objects/ApiResponse.java @@ -0,0 +1,18 @@ +package org.example.objects; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.*; +import lombok.experimental.FieldDefaults; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@FieldDefaults(level = AccessLevel.PRIVATE) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiResponse{ + int code = 1000; + String message; + T result; +} diff --git a/BE/src/main/java/org/example/repositories/UserRepository.java b/BE/src/main/java/org/example/repositories/UserRepository.java index 0b29d02..5f091da 100644 --- a/BE/src/main/java/org/example/repositories/UserRepository.java +++ b/BE/src/main/java/org/example/repositories/UserRepository.java @@ -4,6 +4,7 @@ import org.example.models.User; import org.example.queryresults.PostQueryResult; import org.springframework.data.neo4j.repository.Neo4jRepository; import org.springframework.data.neo4j.repository.query.Query; +import org.springframework.data.repository.query.Param; import java.util.Optional; @@ -17,6 +18,16 @@ public interface UserRepository extends Neo4jRepository { "RETURN EXISTS((user)-[:ENROLLED_IN]->(course))") Boolean findEnrolmentStatus(String username, String identifier); + @Query("match (u:User), (p:POST)\n" + + "WHERE id(u) = $nameId AND id(p) = $postId\n" + + "create (u) - [:LIKE] -> (p)") + void createLike(@Param("nameId") Long nameId, @Param("postId") Long postId); + + @Query("match (a:User)-[r:LIKE]-> (b:POST)" + + "WHERE id(a) = $id AND id(b) = $idd" + + "RETURN COUNT(r) > 0 AS Relationship") + boolean checkLike(Long userId, Long postId); + // @Query("MATCH (user:User), (course:Course) WHERE user.username = $username AND course.identifier = $identifier " + // "CREATE (user)-[:ENROLLED_IN]->(course) RETURN user, course") // CourseEnrolmentQueryResult createEnrolmentRelationship(String username, String identifier); diff --git a/BE/src/main/java/org/example/requests/CreateLikeRequest.java b/BE/src/main/java/org/example/requests/CreateLikeRequest.java new file mode 100644 index 0000000..30976cb --- /dev/null +++ b/BE/src/main/java/org/example/requests/CreateLikeRequest.java @@ -0,0 +1,15 @@ +package org.example.requests; + + +import lombok.*; +import lombok.experimental.FieldDefaults; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public class CreateLikeRequest { + Long userId; + Long postId; +} diff --git a/BE/src/main/java/org/example/services/UserService.java b/BE/src/main/java/org/example/services/UserService.java index 9ba60f7..ac530d4 100644 --- a/BE/src/main/java/org/example/services/UserService.java +++ b/BE/src/main/java/org/example/services/UserService.java @@ -2,6 +2,7 @@ package org.example.services; import org.example.models.User; import org.example.repositories.UserRepository; +import org.example.requests.CreateLikeRequest; import org.example.requests.CreateUserRequest; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -33,4 +34,11 @@ public class UserService { return user; } + + public CreateLikeRequest createLike(CreateLikeRequest request) { + Long userId = request.getUserId(); + Long postId = request.getPostId(); + userRepository.createLike(userId, postId); + return request; + } }