Skip to content

Upload pic #153

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 46 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 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
356fff6
image upload in signup works
zakkariyaa Nov 21, 2023
de7280a
posts showing with names and images
zakkariyaa Nov 21, 2023
3625215
fix image showing on profile
zakkariyaa Nov 22, 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
2 changes: 1 addition & 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
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,96 @@
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);
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,104 @@
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.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());

return "posts/index";
}

@PostMapping("/posts")
public RedirectView create(@ModelAttribute Post post) {
repository.save(post);
public RedirectView create(@ModelAttribute Post post, Principal principal) {
String timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date());
post.setTimestamp(Timestamp.valueOf(timeStamp));
Optional<User> currentUser = userRepository.findByUsername(principal.getName());
User principalUser = currentUser.orElse(null);
post.setUserId(principalUser.getId());
postRepository.save(post);
return new RedirectView("/posts");
}

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

Optional<Post> post = postRepository.findById(id);
Post currentPost = post.orElse(null);
model.addAttribute("currentPost", currentPost);

Comment newComment = new Comment();
model.addAttribute("newComment", newComment);

return "posts/show";
}

@PostMapping("/post/{id}")
public ModelAndView createComment(@PathVariable Long id, @ModelAttribute Comment comment, Principal principal) {

// to make a new comment for a post:
// comment content, post_id, user_id
comment.setPostId(id);

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








ModelAndView modelAndView = new ModelAndView("/post/{id}");
modelAndView.addObject("comment", new Comment());
return modelAndView;

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

import com.makersacademy.acebook.model.Authority;
import com.makersacademy.acebook.model.Friend;
import com.makersacademy.acebook.model.User;
import com.makersacademy.acebook.repository.AuthoritiesRepository;
import com.makersacademy.acebook.repository.FriendRepository;
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.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;

import javax.servlet.http.HttpSession;
import java.security.Principal;
import java.util.List;
import java.util.Objects;
import java.util.ArrayList;
import java.util.Optional;

import static java.lang.Boolean.valueOf;

@Controller
public class UsersController {

@Autowired
UserRepository userRepository;
@Autowired
AuthoritiesRepository authoritiesRepository;
@Autowired
FriendRepository friendRepository;

@GetMapping("/users/new")
public String signup(Model model) {
Expand All @@ -27,10 +40,45 @@ public String signup(Model model) {
}

@PostMapping("/users")
public RedirectView signup(@ModelAttribute User user) {
public RedirectView signup(@ModelAttribute User user, @RequestParam("fileData") String fileData) {
user.setImageUrl(fileData);

userRepository.save(user);
Authority authority = new Authority(user.getUsername(), "ROLE_USER");
authoritiesRepository.save(authority);
return new RedirectView("/login");
}

@GetMapping("/users/{id}")
public ModelAndView show(@PathVariable Long id, Principal principal) {
Optional<User> pageUser = userRepository.findById(id);
User user = pageUser.orElse(null);

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

ModelAndView modelAndView = new ModelAndView("/users/show");
modelAndView.addObject("currentUser", principalUser);
modelAndView.addObject("user", user);

Iterable<Friend> userRequests = friendRepository.findByRequesterIdOrReceiverId(principalUser.getId(), principalUser.getId());

for (Friend friend : userRequests) {
if (Objects.equals(friend.getReceiverId(), id) || Objects.equals(friend.getRequesterId(), id)) {
modelAndView.addObject("userRequest", friend);
break;
} else {
modelAndView.addObject("userRequest", null);
}
}

if (principal.getName().equals(Objects.requireNonNull(user).getUsername())) {
modelAndView.addObject("isCurrentUser", true);
} else {
modelAndView.addObject("isCurrentUser", false);
}

return modelAndView;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.makersacademy.acebook.model;

import lombok.Data;

import javax.persistence.*;

@Data
Expand Down
Loading