Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Web/search page subfroum page #502

Merged
merged 30 commits into from
Dec 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a580c30
Add DataInitializer and UserResponse classes; enhance GetPostResponse…
OmerFarukBOUN Dec 10, 2024
82498ed
Add DataInitializer for admin user setup; update GetPostResponse to i…
OmerFarukBOUN Dec 10, 2024
4e7ce15
Enhance subforum functionality: add GetSubforumResponse DTO, update P…
OmerFarukBOUN Dec 10, 2024
f1375f2
Add AllSubforumResponse DTO and update SubforumService and SubforumCo…
OmerFarukBOUN Dec 10, 2024
6f76b98
Added auth token logic instead of username
OmerFarukBOUN Dec 10, 2024
5b68cd0
Refactor follower and following responses to use GetUserResponse DTO …
OmerFarukBOUN Dec 10, 2024
365b3a2
Update DataInitializer for admin name, enhance SubforumService visibi…
OmerFarukBOUN Dec 11, 2024
8b6f9c6
new-dislike-enpoint-connected
TheRealLowyer Dec 11, 2024
b4aeef5
new-like-enpoint-connected
TheRealLowyer Dec 11, 2024
e2ef4bb
new-post-enpoint-connected
TheRealLowyer Dec 11, 2024
9268f9f
Home-post-fetching
TheRealLowyer Dec 11, 2024
71ce4e3
new-link-to-post
TheRealLowyer Dec 11, 2024
9d03bb6
PostPage-endpoint-fixes
TheRealLowyer Dec 11, 2024
9bae82d
feed-enpoint-fixes
TheRealLowyer Dec 11, 2024
6eb6c7d
post-like-dislike connection
TheRealLowyer Dec 11, 2024
3d4ab0d
new-subforum-header
TheRealLowyer Dec 11, 2024
297f313
post-header-new fields added
TheRealLowyer Dec 11, 2024
6ea754c
comment-delete function implemented
TheRealLowyer Dec 11, 2024
8a78143
comment styling
TheRealLowyer Dec 11, 2024
86c0525
search service implemented
TheRealLowyer Dec 12, 2024
1c0511c
Tag-Asset search implemented
TheRealLowyer Dec 12, 2024
79a45aa
search-results-styling
TheRealLowyer Dec 12, 2024
37971b5
link-to-subforumPage
TheRealLowyer Dec 12, 2024
7366c4e
subforumPage navigation
TheRealLowyer Dec 12, 2024
81c8934
SubforumPage routing
TheRealLowyer Dec 12, 2024
37c3f4e
subforum-services-implemented
TheRealLowyer Dec 12, 2024
2736777
SubforumPage implemented
TheRealLowyer Dec 12, 2024
8b15e33
Subforum page styling
TheRealLowyer Dec 12, 2024
3e331b5
add useEffect for first mount of the page
OguzTNCR Dec 13, 2024
c258263
Add margin at the bottom
OguzTNCR Dec 13, 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.bounswe2024group10.Tradeverse.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.PasswordEncoder;

import com.bounswe2024group10.Tradeverse.model.User;
import com.bounswe2024group10.Tradeverse.repository.UserRepository;

@Configuration
public class DataInitializer {

@Autowired
private UserRepository userRepository;

@Autowired
private PasswordEncoder passwordEncoder;

@Bean
public CommandLineRunner initData() {
return args -> {
if (userRepository.findByUsername("admin") == null) {
User user = new User();
user.setEmail("admin@tradeverse.com");
user.setUsername("admin");
user.setPassword(passwordEncoder.encode("admin"));
user.setName("admin_name");
user.setTag(0);
user.setBio("admin");
user.setIsAdmin(true);
userRepository.save(user);
}
};
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,58 @@
package com.bounswe2024group10.Tradeverse.controller;

import com.bounswe2024group10.Tradeverse.dto.dislike.*;
import com.bounswe2024group10.Tradeverse.service.DislikeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.bounswe2024group10.Tradeverse.dto.dislike.DislikePostRequest;
import com.bounswe2024group10.Tradeverse.dto.dislike.DislikePostResponse;
import com.bounswe2024group10.Tradeverse.dto.dislike.UndislikePostRequest;
import com.bounswe2024group10.Tradeverse.dto.dislike.UndislikePostResponse;
import com.bounswe2024group10.Tradeverse.service.DislikeService;
import com.bounswe2024group10.Tradeverse.util.JwtUtil;

@RestController
@RequestMapping("/api/dislike")
public class DislikeController {

@Autowired
private DislikeService dislikeService;
@Autowired
private JwtUtil jwtUtil;

@CrossOrigin(origins = "*", allowedHeaders = "*")
@PostMapping("/dislike-post")
public ResponseEntity<DislikePostResponse> dislikePost(@RequestBody DislikePostRequest request) {
public ResponseEntity<DislikePostResponse> dislikePost(@RequestParam Long postId, @RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
DislikePostRequest request = new DislikePostRequest();
request.setPostId(postId);
request.setUsername(username);
DislikePostResponse response = dislikeService.dislikePost(request);
return ResponseEntity.ok(response);
}

@CrossOrigin(origins = "*", allowedHeaders = "*")
@PostMapping("/undislike-post")
public ResponseEntity<UndislikePostResponse> undislikePost(@RequestBody UndislikePostRequest request) {
public ResponseEntity<UndislikePostResponse> undislikePost(@RequestParam Long postId, @RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
UndislikePostRequest request = new UndislikePostRequest();
request.setPostId(postId);
request.setUsername(username);
UndislikePostResponse response = dislikeService.undislikePost(request);
return ResponseEntity.ok(response);
}

}
}
Original file line number Diff line number Diff line change
@@ -1,41 +1,89 @@
package com.bounswe2024group10.Tradeverse.controller;

import com.bounswe2024group10.Tradeverse.dto.follow.*;
import com.bounswe2024group10.Tradeverse.service.FollowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.bounswe2024group10.Tradeverse.dto.follow.FollowUserRequest;
import com.bounswe2024group10.Tradeverse.dto.follow.FollowUserResponse;
import com.bounswe2024group10.Tradeverse.dto.follow.GetFollowersRequest;
import com.bounswe2024group10.Tradeverse.dto.follow.GetFollowersResponse;
import com.bounswe2024group10.Tradeverse.dto.follow.GetFollowingsRequest;
import com.bounswe2024group10.Tradeverse.dto.follow.GetFollowingsResponse;
import com.bounswe2024group10.Tradeverse.dto.follow.UnfollowUserRequest;
import com.bounswe2024group10.Tradeverse.dto.follow.UnfollowUserResponse;
import com.bounswe2024group10.Tradeverse.service.FollowService;
import com.bounswe2024group10.Tradeverse.util.JwtUtil;

@RestController
@RequestMapping("/api/follow")
public class FollowController {

@Autowired
private FollowService followService;
@Autowired
private JwtUtil jwtUtil;

@CrossOrigin(origins = "*", allowedHeaders = "*")
@PostMapping("/follow-user")
public ResponseEntity<FollowUserResponse> followUser(@RequestBody FollowUserRequest request) {
public ResponseEntity<FollowUserResponse> followUser(@RequestParam String followedUsername, @RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
FollowUserRequest request = new FollowUserRequest();
request.setFollowedUsername(followedUsername);
request.setFollowerUsername(username);
FollowUserResponse response = followService.followUser(request);
return ResponseEntity.ok(response);
}

@CrossOrigin(origins = "*", allowedHeaders = "*")
@PostMapping("/unfollow-user")
public ResponseEntity<UnfollowUserResponse> unfollowUser(@RequestBody UnfollowUserRequest request) {
public ResponseEntity<UnfollowUserResponse> unfollowUser(@RequestParam String unfollowedUsername, @RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
UnfollowUserRequest request = new UnfollowUserRequest();
request.setFollowedUsername(unfollowedUsername);
request.setFollowerUsername(username);
UnfollowUserResponse response = followService.unfollowUser(request);
return ResponseEntity.ok(response);
}

@CrossOrigin(origins = "*", allowedHeaders = "*")
@GetMapping("/get-followings")
public ResponseEntity<GetFollowingsResponse> getFollowings(@RequestBody GetFollowingsRequest request) {
public ResponseEntity<GetFollowingsResponse> getFollowings(@RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
GetFollowingsRequest request = new GetFollowingsRequest();
request.setUsername(username);
GetFollowingsResponse response = followService.getFollowings(request);
return ResponseEntity.ok(response);
}

@CrossOrigin(origins = "*", allowedHeaders = "*")
@GetMapping("/get-followers")
public ResponseEntity<GetFollowersResponse> getFollowers(@RequestBody GetFollowersRequest request) {
public ResponseEntity<GetFollowersResponse> getFollowers(@RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
GetFollowersRequest request = new GetFollowersRequest();
request.setUsername(username);
GetFollowersResponse response = followService.getFollowers(request);
return ResponseEntity.ok(response);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,73 @@
package com.bounswe2024group10.Tradeverse.controller;

import com.bounswe2024group10.Tradeverse.dto.like.*;
import com.bounswe2024group10.Tradeverse.service.LikeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.bounswe2024group10.Tradeverse.dto.like.GetLikedPostsRequest;
import com.bounswe2024group10.Tradeverse.dto.like.GetLikedPostsResponse;
import com.bounswe2024group10.Tradeverse.dto.like.LikePostRequest;
import com.bounswe2024group10.Tradeverse.dto.like.LikePostResponse;
import com.bounswe2024group10.Tradeverse.dto.like.UnlikePostRequest;
import com.bounswe2024group10.Tradeverse.dto.like.UnlikePostResponse;
import com.bounswe2024group10.Tradeverse.service.LikeService;
import com.bounswe2024group10.Tradeverse.util.JwtUtil;

@RestController
@RequestMapping("/api/like")
public class LikeController {

@Autowired
private LikeService likeService;
@Autowired
private JwtUtil jwtUtil;

@CrossOrigin(origins = "*", allowedHeaders = "*")
@PostMapping("/like-post")
public ResponseEntity<LikePostResponse> likePost(@RequestBody LikePostRequest request) {
public ResponseEntity<LikePostResponse> likePost(@RequestParam Long postId, @RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
LikePostRequest request = new LikePostRequest();
request.setPostId(postId);
request.setUsername(username);
LikePostResponse response = likeService.likePost(request);
return ResponseEntity.ok(response);
}

@CrossOrigin(origins = "*", allowedHeaders = "*")
@PostMapping("/unlike-post")
public ResponseEntity<UnlikePostResponse> unlikePost(@RequestBody UnlikePostRequest request) {
public ResponseEntity<UnlikePostResponse> unlikePost(@RequestParam Long postId, @RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
UnlikePostRequest request = new UnlikePostRequest();
request.setPostId(postId);
request.setUsername(username);
UnlikePostResponse response = likeService.unlikePost(request);
return ResponseEntity.ok(response);
}

@CrossOrigin(origins = "*", allowedHeaders = "*")
@GetMapping("/get-liked-posts")
public ResponseEntity<GetLikedPostsResponse> getLikedPosts(@RequestBody GetLikedPostsRequest request) {
public ResponseEntity<GetLikedPostsResponse> getLikedPosts(@RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
GetLikedPostsRequest request = new GetLikedPostsRequest();
request.setUsername(username);
GetLikedPostsResponse response = likeService.getLikedPosts(request);
return ResponseEntity.ok(response);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
package com.bounswe2024group10.Tradeverse.controller;

import com.bounswe2024group10.Tradeverse.dto.portfolio.*;
import com.bounswe2024group10.Tradeverse.service.PortfolioService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.bounswe2024group10.Tradeverse.dto.portfolio.AddAssetToPortfolioRequest;
import com.bounswe2024group10.Tradeverse.dto.portfolio.AddAssetToPortfolioResponse;
import com.bounswe2024group10.Tradeverse.dto.portfolio.AddAssetToPortfolioServiceRequest;
import com.bounswe2024group10.Tradeverse.dto.portfolio.GetPortfolioResponse;
import com.bounswe2024group10.Tradeverse.service.PortfolioService;
import com.bounswe2024group10.Tradeverse.util.JwtUtil;

@RestController
@RequestMapping("/api/portfolio")
Expand All @@ -13,6 +25,9 @@ public class PortfolioController {
@Autowired
private PortfolioService portfolioService;

@Autowired
private JwtUtil jwtUtil;

@CrossOrigin(origins = "*", allowedHeaders = "*")
@GetMapping("/get-portfolio")
public GetPortfolioResponse getPortfolio(@RequestParam String username) {
Expand All @@ -21,8 +36,17 @@ public GetPortfolioResponse getPortfolio(@RequestParam String username) {

@CrossOrigin(origins = "*", allowedHeaders = "*")
@PostMapping("/add-asset")
public ResponseEntity<AddAssetToPortfolioResponse> addAssetToPortfolio(@RequestBody AddAssetToPortfolioRequest request) {
AddAssetToPortfolioResponse response = portfolioService.addAssetToPortfolio(request);
public ResponseEntity<AddAssetToPortfolioResponse> addAssetToPortfolio(@RequestBody AddAssetToPortfolioRequest request, @RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
AddAssetToPortfolioServiceRequest serviceRequest = new AddAssetToPortfolioServiceRequest();
serviceRequest.setAssetId(request.getAssetId());
serviceRequest.setAmount(request.getAmount());
serviceRequest.setUsername(username);
AddAssetToPortfolioResponse response = portfolioService.addAssetToPortfolio(serviceRequest);
return ResponseEntity.ok(response);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
package com.bounswe2024group10.Tradeverse.controller;

import com.bounswe2024group10.Tradeverse.dto.post.*;
import com.bounswe2024group10.Tradeverse.service.PostService;
import com.bounswe2024group10.Tradeverse.util.JwtUtil;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import com.bounswe2024group10.Tradeverse.dto.post.CreatePostRequest;
import com.bounswe2024group10.Tradeverse.dto.post.CreatePostResponse;
import com.bounswe2024group10.Tradeverse.dto.post.DeletePostRequest;
import com.bounswe2024group10.Tradeverse.dto.post.DeletePostResponse;
import com.bounswe2024group10.Tradeverse.dto.post.GetPostResponse;
import com.bounswe2024group10.Tradeverse.service.PostService;
import com.bounswe2024group10.Tradeverse.util.JwtUtil;

@RestController
@RequestMapping(value = "/api/post")
Expand Down Expand Up @@ -61,8 +66,8 @@ public ResponseEntity<DeletePostResponse> deletePost(@RequestBody DeletePostRequ
@CrossOrigin(origins = "*", allowedHeaders = "*")
@GetMapping("/get-posts-by-subforum")
public ResponseEntity<List<GetPostResponse>> getPostsBySubforum(
@RequestParam Long subforumId,
@RequestHeader("Authorization") String token
@RequestParam Long subforumId,
@RequestHeader("Authorization") String token
) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
Expand Down Expand Up @@ -132,4 +137,19 @@ public ResponseEntity<List<GetPostResponse>> getFollowedPeoplePosts(@RequestHead
List<GetPostResponse> posts = postService.getFollowedPeoplePosts(username);
return ResponseEntity.ok(posts);
}

@CrossOrigin(origins = "*", allowedHeaders = "*")
@GetMapping("/{id}")
public ResponseEntity<GetPostResponse> getPostById(@PathVariable Long id, @RequestHeader("Authorization") String token) {
String username = null;
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
username = jwtUtil.extractUsername(token);
}
GetPostResponse response = postService.getPost(id, username);
if (response == null) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
return ResponseEntity.ok(response);
}
}
Loading