Skip to content

Navbar links #158

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

Open
wants to merge 81 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
830a95b
Initial commit - add test data
xengeo Nov 14, 2023
07f7ab4
Update lombok version
NatalieJClark Nov 14, 2023
94c3e5f
add route for users show page and html file for users show
Nov 14, 2023
81cbd3c
write tests for users controller
Nov 14, 2023
a924737
Merge pull request #1 from davidsholoye/users_controller
davidsholoye Nov 14, 2023
b4418a9
Update post model fields and add sign up button
NatalieJClark Nov 14, 2023
6fd6da6
Merge pull request #2 from davidsholoye/navigation
NatalieJClark Nov 14, 2023
51dd9c6
update column types to bigint and complete comment model implementation
xengeo Nov 15, 2023
2546362
Merge pull request #3 from davidsholoye/add_comment_model
xengeo Nov 15, 2023
6f562d9
update V11 migration file for column type change
xengeo Nov 15, 2023
b7f4cc6
Merge pull request #4 from davidsholoye/add_comment_model
xengeo Nov 15, 2023
533486a
Add header and links to profile, friends and timeline. And signout
davidsholoye Nov 16, 2023
95c4d7d
tested sign up features, checked for empty credentials
xengeo Nov 16, 2023
3034112
Merge pull request #5 from davidsholoye/signup-testing
xengeo Nov 16, 2023
a1227ea
Friend request system with errors
davidsholoye Nov 16, 2023
41ffd26
posts appear by newest first
xengeo Nov 16, 2023
e182e72
Merge pull request #6 from davidsholoye/order-posts
xengeo Nov 16, 2023
1cbb2be
add friend controller and friend model
zakkariyaa Nov 17, 2023
d40fdb2
Add routes to friend controller and update model to be able to make a…
Nov 17, 2023
bd2552f
Merge changes with main
Nov 17, 2023
ae1460e
Merge pull request #7 from davidsholoye/userControllerTesting
NatalieJClark Nov 17, 2023
7eec94b
Rename V12__alter_friends_table.sql to V13__alter_friends_table.sql
xengeo Nov 17, 2023
920d81a
rename v12 and v13 to v12 and v14
zakkariyaa Nov 17, 2023
303c1e8
Merge pull request #8 from davidsholoye/fixdb
zakkariyaa Nov 17, 2023
ef6da3e
Delete flyway versions
NatalieJClark Nov 17, 2023
b6359dc
Add user_id to new post
NatalieJClark Nov 17, 2023
5c2da42
Resolved conflicts
NatalieJClark Nov 17, 2023
1d57d36
fixed the logout issue by changing the anchor tag to form
zakkariyaa Nov 17, 2023
f3d66d2
Resolved conflicts
NatalieJClark Nov 17, 2023
ea13863
Merge pull request #9 from davidsholoye/fix-logout-issue
zakkariyaa Nov 17, 2023
cd880f1
Merge pull request #10 from davidsholoye/Assign_user_id_to_post
xengeo Nov 17, 2023
c9ca0bf
add migration file test users into authorities table
xengeo Nov 17, 2023
3d7b663
Merge pull request #11 from davidsholoye/insert_users_into_authoritie…
xengeo Nov 17, 2023
d29d881
display names of request users with buttons
zakkariyaa Nov 20, 2023
b47fdb6
Add comment and like buttons
NatalieJClark Nov 20, 2023
c74c088
backend accept or deny working
zakkariyaa Nov 20, 2023
9181346
accept and deny fully functional
zakkariyaa Nov 20, 2023
f6d82f7
make button text conditional
zakkariyaa Nov 20, 2023
091d4e4
Comment button links to individual post page, and start to implement …
xengeo Nov 20, 2023
52c6c9d
fix accept request and double confirmation issues
zakkariyaa Nov 20, 2023
af06f93
Merge pull request #12 from davidsholoye/friend-request-backend
zakkariyaa Nov 21, 2023
05c1063
Merge pull request #13 from davidsholoye/comment_on_posts
xengeo Nov 21, 2023
2381874
Add field to upload picture
Nov 21, 2023
ae32ea4
trying to save a comment
xengeo Nov 21, 2023
356fff6
image upload in signup works
zakkariyaa Nov 21, 2023
de7280a
posts showing with names and images
zakkariyaa Nov 21, 2023
93dae21
add comments progress.. sort of
xengeo Nov 22, 2023
3625215
fix image showing on profile
zakkariyaa Nov 22, 2023
6c460a9
Merge pull request #14 from davidsholoye/upload-pic
zakkariyaa Nov 22, 2023
697452d
Add CommentController
NatalieJClark Nov 22, 2023
945069d
add comment form is working!
xengeo Nov 22, 2023
4a42347
Show user list of comments on post page
NatalieJClark Nov 22, 2023
08a9f4f
Editing add comment test
NatalieJClark Nov 22, 2023
20beaf1
Merge branch 'main' into comment_on_posts
NatalieJClark Nov 22, 2023
8df87ee
Merge pull request #15 from davidsholoye/comment_on_posts
NatalieJClark Nov 22, 2023
cb76165
Add CSS changes to the code
davidsholoye Nov 22, 2023
968faa0
Merge branch 'main' into css
davidsholoye Nov 22, 2023
5050087
Merge pull request #16 from davidsholoye/css
davidsholoye Nov 22, 2023
784b91b
Made tests work
NatalieJClark Nov 22, 2023
c06255b
fix bugs
Nov 22, 2023
e3f81fd
display username and photo next to comment
xengeo Nov 22, 2023
4753664
Merge branch 'main' into comment_on_posts
xengeo Nov 22, 2023
e41e624
Merge pull request #17 from davidsholoye/comment_on_posts
xengeo Nov 22, 2023
7543439
tidy styling for show and index page
Nov 22, 2023
eb30f29
add posts to show page and more styling
Nov 22, 2023
1c4e6a3
add posts to show page but only posts for that specific user
Nov 23, 2023
71d1c92
add posts to show page but only posts for that specific user
Nov 23, 2023
9edb05d
Merge branch 'main' into bug-fixes
somunachima Nov 23, 2023
a65d0a3
Merge pull request #18 from davidsholoye/bug-fixes
somunachima Nov 23, 2023
87bd2f3
order comments by id and test
xengeo Nov 23, 2023
39996d6
Merge pull request #19 from davidsholoye/order_comments
xengeo Nov 23, 2023
43cfdb4
display image and username next to post content on post/index.html
xengeo Nov 23, 2023
6ee33d8
Merge pull request #20 from davidsholoye/display_username_image_on_post
xengeo Nov 23, 2023
12d8a12
add more styling to timeline/posts index
Nov 23, 2023
9175240
Merge branch 'main' into timeline-css
somunachima Nov 23, 2023
39677eb
Merge pull request #21 from davidsholoye/timeline-css
somunachima Nov 23, 2023
234aef9
add more styling to friends index page
Nov 23, 2023
b99c6b5
Merge pull request #22 from davidsholoye/friends-css
somunachima Nov 23, 2023
2361673
add correct links to navbar to go to current user's profile page
Nov 23, 2023
8183db9
add correct links to navbar
Nov 23, 2023
d3feae9
add correct links to navbar
Nov 23, 2023
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
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -104,6 +104,11 @@
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId>
<version>4.7.0</version>
</dependency>
</dependencies>


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/posts").hasRole("USER")
.antMatchers("/users").permitAll()
.and().formLogin();
.and().formLogin().loginPage("/login");
}

@Bean
public PasswordEncoder getPasswordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package com.makersacademy.acebook.controller;

import com.makersacademy.acebook.model.Comment;
import com.makersacademy.acebook.model.Post;
import com.makersacademy.acebook.model.User;
import com.makersacademy.acebook.repository.CommentRepository;
import com.makersacademy.acebook.repository.PostRepository;
import com.makersacademy.acebook.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.security.Principal;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Optional;

@Controller
public class CommentController {


@Autowired
PostRepository postRepository;

@Autowired
CommentRepository commentRepository;

@Autowired
UserRepository userRepository;

@GetMapping("/post/{id}")
public String show(@PathVariable Long id, Model model, Principal principal) {

// get post to display at the top of page
Optional<Post> post = postRepository.findById(id);
Post currentPost = post.orElse(null);
model.addAttribute("currentPost", currentPost);


Optional<User> postUser = userRepository.findById(currentPost.getUserId());
User postOwner = postUser.orElse(null);
model.addAttribute("postOwner", postOwner);

Optional<User> currentUser = userRepository.findByUsername(principal.getName());
User principalUser = currentUser.orElse(null);


// create new comment object to make a new comment using the form
Comment commentObj = new Comment();
model.addAttribute("newComment", commentObj);

// Create a LinkedHashMap to store sorted data
LinkedHashMap<Comment, User> commentsAndOwners = new LinkedHashMap<>();

// get an ordered list of comments associated with the post we are visiting
List<Comment> comments = commentRepository.findAllByPostIdOrderById(id);
model.addAttribute("comments", comments);

// for each comment, find the associated user/owner and add both to LinkedHaspMap
for (Comment comment : comments) {
Optional<User> commentOwner = userRepository.findById(comment.getUserId());
User user = commentOwner.orElse(null);
commentsAndOwners.put(comment, user);
}
// System.out.println(commentsAndOwners);
model.addAttribute("commentsAndOwners", commentsAndOwners);
model.addAttribute("currentUser", principalUser);
model.addAttribute("profilePicture", principalUser.getImageUrl());

return "posts/show";
}

@PostMapping("/post/addComment")
public String createComment(@RequestParam String comment, @RequestParam Long postId, Principal principal) {

// Get userID
Optional<User> currentUser = userRepository.findByUsername(principal.getName());
User principalUser = currentUser.orElse(null);

Comment newComment = new Comment(comment, postId, principalUser.getId());

commentRepository.save(newComment);

return "redirect:/post/" + postId;

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package com.makersacademy.acebook.controller;

import com.makersacademy.acebook.model.Friend;
import com.makersacademy.acebook.model.User;
import com.makersacademy.acebook.repository.FriendRepository;
import com.makersacademy.acebook.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

@Controller
public class FriendController {

@Autowired
FriendRepository friendRepository;
@Autowired
UserRepository userRepository;

@GetMapping("/users/friend")
public ModelAndView showFriends(Model model) {
ModelAndView modelAndView = new ModelAndView("/users/friend");
modelAndView.addObject("friend", new Friend());
return modelAndView;
}

@GetMapping("/friends")
public ModelAndView showRequests(Principal principal) {
ModelAndView modelAndView = new ModelAndView("/users/friends");

Optional<User> currentUser = userRepository.findByUsername(principal.getName());
User principalUser = currentUser.orElse(null);

assert principalUser != null;
List<Friend> pendingRequests = friendRepository.findByStatusAndReceiverId(principalUser.getId(), "PENDING");
List<Friend> acceptedRequests = friendRepository.findByStatusAndReceiverId(principalUser.getId(), "ACCEPTED");

ArrayList<User> friendRequests = new ArrayList<>();
for (Friend friend : pendingRequests) {
Optional<User> optionalUser = userRepository.findById(friend.getRequesterId());
User friendRequest = optionalUser.orElse(null);
friendRequests.add(friendRequest);
}

ArrayList<User> friends = new ArrayList<>();
for (Friend friend : acceptedRequests) {
Optional<User> optionalUser = userRepository.findById(friend.getRequesterId());
User acceptedRequest = optionalUser.orElse(null);
friends.add(acceptedRequest);
}

modelAndView.addObject("friendRequests", friendRequests);
modelAndView.addObject("friends", friends);
modelAndView.addObject("currentUser", principalUser);
modelAndView.addObject("profilePicture", principalUser.getImageUrl());
return modelAndView;
}

@PostMapping("/handleFriendRequest")
public RedirectView handleFriendRequest(@RequestParam("requester_id") Long requesterId,
@RequestParam("receiver_id") Long receiverId, Principal principal) {

Optional<User> currentUser = userRepository.findByUsername(principal.getName());
User principalUser = currentUser.orElse(null);
assert principalUser != null;

Friend friendRequest = new Friend(requesterId, receiverId, "PENDING");
friendRepository.save(friendRequest);

return new RedirectView("/users/" + receiverId);
}

@PostMapping("/handleFriendConfirmation")
public String handleConfirmation(@RequestParam("action") String action,
@RequestParam("requesterId") Long requesterId, Principal principal) {
Optional<User> currentUser = userRepository.findByUsername(principal.getName());
User receiverId = currentUser.orElse(null);
assert receiverId != null;

if ("accept".equals(action)) {
friendRepository.updateStatusByRequesterIdAndReceiverId(requesterId, receiverId.getId(), "ACCEPTED");
} else if ("deny".equals(action)) {
friendRepository.updateStatusByRequesterIdAndReceiverId(requesterId, receiverId.getId(), "DENIED");
}

return "redirect:/friends";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,24 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.view.RedirectView;

import javax.servlet.http.HttpSession;

@Controller
public class HomeController {
@RequestMapping(value = "/")
public RedirectView index() {
return new RedirectView("/posts");
}

@RequestMapping("/login")
public String login() {
return "login";
}
@RequestMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("user_id");
return "logout";
}

}

Original file line number Diff line number Diff line change
@@ -1,32 +1,77 @@
package com.makersacademy.acebook.controller;

import com.makersacademy.acebook.model.Comment;
import com.makersacademy.acebook.model.Friend;
import com.makersacademy.acebook.model.Post;
import com.makersacademy.acebook.model.User;
import com.makersacademy.acebook.repository.CommentRepository;
import com.makersacademy.acebook.repository.PostRepository;
import com.makersacademy.acebook.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

import java.util.List;
import java.security.Principal;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;

@Controller
public class PostsController {

@Autowired
PostRepository repository;
PostRepository postRepository;
@Autowired
UserRepository userRepository;

@GetMapping("/posts")
public String index(Model model) {
Iterable<Post> posts = repository.findAll();
model.addAttribute("posts", posts);
model.addAttribute("post", new Post());
public String index(Model model, Principal principal) {
Optional<User> currentUser = userRepository.findByUsername(principal.getName());
User principalUser = currentUser.orElse(null);
assert principalUser != null;

Iterable<Post> posts = postRepository.findAllByOrderByTimestampDesc();
ArrayList<HashMap<Post, User>> postsAndPosters = new ArrayList<>();

for (Post post : posts) {
HashMap<Post, User> entry = new HashMap<>();

Optional<User> optionalUser = userRepository.findById(post.getUserId());
User poster = optionalUser.orElse(null);

entry.put(post, poster);
postsAndPosters.add(entry);
}

// System.out.println(postsAndPosters);

model.addAttribute("postsAndPosters", postsAndPosters);
model.addAttribute("newPost", new Post());
model.addAttribute("profilePicture", principalUser.getImageUrl());
model.addAttribute("currentUser", principalUser);

return "posts/index";
}

@PostMapping("/posts")
public RedirectView create(@ModelAttribute Post post) {
repository.save(post);
public RedirectView create(@ModelAttribute Post post, Principal principal) {

// get and set timestamp of post
String timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date());
post.setTimestamp(Timestamp.valueOf(timeStamp));

// get user and set userid of post
Optional<User> currentUser = userRepository.findByUsername(principal.getName());
User principalUser = currentUser.orElse(null);
post.setUserId(principalUser.getId());

// save post
postRepository.save(post);

return new RedirectView("/posts");
}

}
Loading