diff --git a/RabbitBack/src/main/java/com/purdue/project/controller/UserController.java b/RabbitBack/src/main/java/com/purdue/project/controller/UserController.java index 787271e..23c4486 100644 --- a/RabbitBack/src/main/java/com/purdue/project/controller/UserController.java +++ b/RabbitBack/src/main/java/com/purdue/project/controller/UserController.java @@ -1,8 +1,10 @@ package com.purdue.project.controller; +import com.purdue.project.model.*; +import com.purdue.project.exception.UserNotFoundException; import com.purdue.project.dao.UserDAO; -import com.purdue.project.model.User; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -14,11 +16,35 @@ public class UserController { @Autowired UserDAO userDAO; - @PostMapping("/user") - public User save(@RequestBody User userObj) { - return userDAO.save(userObj); + @PostMapping("/signUp") + public ResponseEntity signUp(@RequestBody User userObj) { + + // check if the email is valid + if (userDAO.findByEmail(userObj.getEmail()).isPresent()) { + return ResponseEntity.badRequest().body(new SignupResponse("Email already exists.")); + } + userObj.setMaking(1); + + Integer userId = userDAO.save(userObj).getId(); + return ResponseEntity.ok(new SignupResponse(userId, "Sign up succeed.")); } + @PostMapping("/signIn") + public ResponseEntity signIn(@RequestBody User userObj) { + + // check if the user is valid + if (!userDAO.findByEmail(userObj.getEmail()).isPresent()) { + return ResponseEntity.badRequest().body(new SigninResponse("Please sign up first.")); + } + User user = userDAO.findByEmail(userObj.getEmail()).orElseThrow(UserNotFoundException::new); + + // check if the password is valid + if (!user.getPassword().equals(userObj.getPassword())) { + return ResponseEntity.badRequest().body(new SigninResponse("Your password is wrong.")); + } + SigninResponse response = new SigninResponse("Sign in succeed.", user.getId(), user.getEmail(), user.getNickname(), user.getCrime()); + return ResponseEntity.ok(response); + } @GetMapping("/user") public List get() { return userDAO.findAll(); @@ -34,9 +60,27 @@ public User get(@PathVariable int id) { } } - @PutMapping("/user") - public User update(@RequestBody User userObj) { - return userDAO.save(userObj); + @PostMapping("/user/update") + public ResponseEntity update(@RequestBody User userObj) { + Optional user = userDAO.findById(userObj.getId()); + UpdateResponse returnedUser = new UpdateResponse(user.get().getId(), userObj.getNickname(), userObj.getCrime(), Boolean.FALSE, user.get().getProcessing(),"Crime is not processing."); + + //check if the crime is updating + if(user.get().getProcessing() == 1) { + return ResponseEntity.badRequest().body(new UpdateResponse("Please wait until processing your previous request.")); + } + + //check if the crime has been changed + if(!userObj.getCrime().equals(user.get().getCrime())) { + returnedUser.setIsCrimeUpdated(Boolean.TRUE); + User updatedUser = new User(user.get().getId(), user.get().getEmail(), user.get().getPassword(), userObj.getNickname(), userObj.getCrime(), user.get().getMaking(), 1, user.get().getRegdate()); + userDAO.save(updatedUser); + } else { + User updatedUser = new User(user.get().getId(), user.get().getEmail(), user.get().getPassword(), userObj.getNickname(), userObj.getCrime(), user.get().getMaking(), user.get().getProcessing(), user.get().getRegdate()); + userDAO.save(updatedUser); + } + + return ResponseEntity.ok(returnedUser); } @DeleteMapping("/user/{id}") diff --git a/RabbitBack/src/main/java/com/purdue/project/dao/UserDAO.java b/RabbitBack/src/main/java/com/purdue/project/dao/UserDAO.java index c6771cc..5b953b2 100644 --- a/RabbitBack/src/main/java/com/purdue/project/dao/UserDAO.java +++ b/RabbitBack/src/main/java/com/purdue/project/dao/UserDAO.java @@ -4,7 +4,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface UserDAO extends JpaRepository { + Optional findByEmail(String email); } diff --git a/RabbitBack/src/main/java/com/purdue/project/exception/RabbitException.java b/RabbitBack/src/main/java/com/purdue/project/exception/RabbitException.java new file mode 100644 index 0000000..09179e7 --- /dev/null +++ b/RabbitBack/src/main/java/com/purdue/project/exception/RabbitException.java @@ -0,0 +1,14 @@ +package com.purdue.project.exception; + +import org.springframework.http.HttpStatus; + +public class RabbitException extends RuntimeException { + private final HttpStatus httpStatus; + + public RabbitException(String message, HttpStatus httpStatus) { + super(message); + this.httpStatus = httpStatus; + } + + public HttpStatus getHttpStatus() {return httpStatus;} +} \ No newline at end of file diff --git a/RabbitBack/src/main/java/com/purdue/project/exception/UserException.java b/RabbitBack/src/main/java/com/purdue/project/exception/UserException.java new file mode 100644 index 0000000..6f3c804 --- /dev/null +++ b/RabbitBack/src/main/java/com/purdue/project/exception/UserException.java @@ -0,0 +1,7 @@ +package com.purdue.project.exception; + +import org.springframework.http.HttpStatus; + +public class UserException extends RabbitException{ + protected UserException(String message, HttpStatus httpStatus) {super(message, httpStatus);} +} diff --git a/RabbitBack/src/main/java/com/purdue/project/exception/UserNotFoundException.java b/RabbitBack/src/main/java/com/purdue/project/exception/UserNotFoundException.java new file mode 100644 index 0000000..d78943f --- /dev/null +++ b/RabbitBack/src/main/java/com/purdue/project/exception/UserNotFoundException.java @@ -0,0 +1,8 @@ +package com.purdue.project.exception; + +import org.springframework.http.HttpStatus; + +public class UserNotFoundException extends UserException{ + public UserNotFoundException() {super("회원 가입을 진행해주세요.", HttpStatus.BAD_REQUEST);} + +} diff --git a/RabbitBack/src/main/java/com/purdue/project/model/SigninResponse.java b/RabbitBack/src/main/java/com/purdue/project/model/SigninResponse.java new file mode 100644 index 0000000..2cd55fd --- /dev/null +++ b/RabbitBack/src/main/java/com/purdue/project/model/SigninResponse.java @@ -0,0 +1,23 @@ +package com.purdue.project.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class SigninResponse { + + private String message; + private Integer id; + private String email; + private String nickname; + private String crime; + + public SigninResponse(String message) { + this.message = message; + } +} diff --git a/RabbitBack/src/main/java/com/purdue/project/model/SignupResponse.java b/RabbitBack/src/main/java/com/purdue/project/model/SignupResponse.java new file mode 100644 index 0000000..df4cc49 --- /dev/null +++ b/RabbitBack/src/main/java/com/purdue/project/model/SignupResponse.java @@ -0,0 +1,21 @@ +package com.purdue.project.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class SignupResponse { + + private Integer userId; + private String message; + + public SignupResponse(String message) { + this.message = message; + } + +} diff --git a/RabbitBack/src/main/java/com/purdue/project/model/UpdateResponse.java b/RabbitBack/src/main/java/com/purdue/project/model/UpdateResponse.java new file mode 100644 index 0000000..eba6d6c --- /dev/null +++ b/RabbitBack/src/main/java/com/purdue/project/model/UpdateResponse.java @@ -0,0 +1,27 @@ +package com.purdue.project.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.persistence.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class UpdateResponse { + + private Integer id; + private String nickname; + private String crime; + private Boolean isCrimeUpdated; + private int processing; + private String message; + + public UpdateResponse(String message) { + this.message = message; + } + +} diff --git a/RabbitBack/src/main/java/com/purdue/project/model/User.java b/RabbitBack/src/main/java/com/purdue/project/model/User.java index 4578d94..51ca3b6 100644 --- a/RabbitBack/src/main/java/com/purdue/project/model/User.java +++ b/RabbitBack/src/main/java/com/purdue/project/model/User.java @@ -1,8 +1,17 @@ package com.purdue.project.model; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + import javax.persistence.*; import java.util.Date; +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor @Entity @Table(name = "user") public class User { @@ -19,56 +28,12 @@ public class User { @Column private String crime; @Column + private int making; + @Column + private int processing; + @Column private Date regdate; - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getNickname() { - return nickname; - } - - public void setNickname(String nickname) { - this.nickname = nickname; - } - - public String getCrime() { - return crime; - } - - public void setCrime(String crime) { - this.crime = crime; - } - - public Date getRegdate() { - return regdate; - } - - public void setRegdate(Date regdate) { - this.regdate = regdate; - } - @Override public String toString() { return "User{" + @@ -77,6 +42,7 @@ public String toString() { ", password='" + password + '\'' + ", nickname='" + nickname + '\'' + ", crime='" + crime + '\'' + + ", processing=" + processing + ", regdate=" + regdate + '}'; } diff --git a/RabbitBack/src/main/java/com/purdue/project/model/UserUpdate.java b/RabbitBack/src/main/java/com/purdue/project/model/UserUpdate.java new file mode 100644 index 0000000..087fa96 --- /dev/null +++ b/RabbitBack/src/main/java/com/purdue/project/model/UserUpdate.java @@ -0,0 +1,31 @@ +package com.purdue.project.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.persistence.*; +import java.util.Date; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "user") +public class UserUpdate { + @Column + @Id + @GeneratedValue(strategy=GenerationType.IDENTITY) + private Integer id; + @Column + private String nickname; + @Column + private String crime; + @Column + private Boolean isCrimeUpdated; + @Column + private String message; + +}