From 9d97f36e7d74661f4cb3c7b4af95978008143d8c Mon Sep 17 00:00:00 2001 From: hsuush Date: Wed, 10 Jan 2024 23:01:46 +0900 Subject: [PATCH 01/37] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=EB=A1=9C=20=EC=9C=A0=EC=A0=80=20=ED=8C=94?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/follow/Follows.java | 29 +++++++++++ .../example/ReviewZIP/domain/user/Users.java | 48 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/Follows.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/Users.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java b/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java new file mode 100644 index 00000000..afa54e97 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java @@ -0,0 +1,29 @@ +package com.example.ReviewZIP.domain.follow; + +import com.example.ReviewZIP.domain.user.Users; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "follows") +public class Follows { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "sender_id") + private Users sender; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "receiver_id") + private Users receiver; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java new file mode 100644 index 00000000..ed519d7e --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -0,0 +1,48 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.follow.Follows; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Table(name = "users") +public class Users { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="id") + private Long id; + + @Column(nullable = false) + private String email; + + @Column(nullable = false) + private String name; + + @Column(nullable = true) + private String profile_image; + + @Column(nullable = false) + private String user_id; + + @Column(nullable = false) + private String password; + + @Column(nullable = false) + private String phone_num; + + @Column(nullable = false) + private String nickname; + + @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) + List followingList = new ArrayList<>(); + + @OneToMany(mappedBy = "receiver", cascade = CascadeType.ALL) + List followerList = new ArrayList<>(); +} From 06f5fdd8d610c60147e3681cdcf0bb319c728326 Mon Sep 17 00:00:00 2001 From: hsuush Date: Wed, 10 Jan 2024 23:11:58 +0900 Subject: [PATCH 02/37] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=EB=A1=9C=20=EC=9C=A0=EC=A0=80=20=ED=8C=94?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/ReviewZIP/domain/user/Users.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index ed519d7e..7572d1b5 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -40,6 +40,8 @@ public class Users { @Column(nullable = false) private String nickname; + private boolean status; + @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) List followingList = new ArrayList<>(); From 68e5fef0fd1c6b7c928c1913ad95a69546ff94f1 Mon Sep 17 00:00:00 2001 From: hsuush Date: Wed, 10 Jan 2024 23:36:29 +0900 Subject: [PATCH 03/37] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=EB=A1=9C=20=EC=9C=A0=EC=A0=80=20=ED=8C=94?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0=20#18?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/follow/FollowsController.java | 22 ++++++++++++++++ .../domain/follow/FollowsConverter.java | 19 ++++++++++++++ .../domain/follow/FollowsRepositoy.java | 8 ++++++ .../domain/follow/FollowsService.java | 26 +++++++++++++++++++ .../follow/dto/request/FollowReqDto.java | 8 ++++++ .../follow/dto/response/FollowResDto.java | 14 ++++++++++ .../domain/user/UsersRepository.java | 8 ++++++ 7 files changed, 105 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java new file mode 100644 index 00000000..4d4bbaaf --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -0,0 +1,22 @@ +package com.example.ReviewZIP.domain.follow; + +import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v1/follows") +public class FollowsController { + private final FollowsService followsService; + + @PostMapping("/users/{userId}") + public FollowResDto follow(@PathVariable(name="userId") Long userId){ + Follows follows = followsService.createFollowing(userId); + + return FollowsConverter.toCreateFollowDto(follows); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java new file mode 100644 index 00000000..a952155f --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java @@ -0,0 +1,19 @@ +package com.example.ReviewZIP.domain.follow; + +import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; +import com.example.ReviewZIP.domain.user.Users; + +public class FollowsConverter { + public static Follows toFollows(Users sender, Users receiver){ + return Follows.builder() + .sender(sender) + .receiver(receiver) + .build(); + } + + public static FollowResDto toCreateFollowDto(Follows follow){ + return FollowResDto.builder() + .followId(follow.getId()) + .build(); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java new file mode 100644 index 00000000..979f9517 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.follow; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FollowsRepositoy extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java new file mode 100644 index 00000000..f1ae9685 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java @@ -0,0 +1,26 @@ +package com.example.ReviewZIP.domain.follow; + + +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.domain.user.UsersRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class FollowsService { + private final FollowsRepositoy followsRepositoy; + private final UsersRepository usersRepository; + + + @Transactional + public Follows createFollowing(Long userId){ + Users sender = usersRepository.findById(1L).orElseThrow(()->new IllegalArgumentException("sender doesn't exist")); + Users receiver = usersRepository.findById(userId).orElseThrow(()->new IllegalArgumentException("receiver doesn't exist")); + Follows newFollow = FollowsConverter.toFollows(sender, receiver); + + return followsRepositoy.save(newFollow); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java new file mode 100644 index 00000000..664b4c0c --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.follow.dto.request; + +import lombok.Getter; + +@Getter +public class FollowReqDto { + private Long senderId; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java new file mode 100644 index 00000000..3e442324 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java @@ -0,0 +1,14 @@ +package com.example.ReviewZIP.domain.follow.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Builder +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class FollowResDto { + private Long followId; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java new file mode 100644 index 00000000..745a9d50 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.user; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UsersRepository extends JpaRepository { +} From 9a8ae7b6cc720573709d5a875afce7afac074f42 Mon Sep 17 00:00:00 2001 From: hsuush Date: Fri, 12 Jan 2024 00:29:43 +0900 Subject: [PATCH 04/37] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=EB=A1=9C=20=EC=9C=A0=EC=A0=80=20=ED=8C=94?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0=20#18?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/post/Posts.java | 34 +++++++++++++++++++ .../ReviewZIP/domain/scrab/Scrabs.java | 29 ++++++++++++++++ .../example/ReviewZIP/domain/user/Status.java | 12 +++++++ .../example/ReviewZIP/domain/user/Users.java | 17 ++++++---- .../ReviewZIP/global/entity/BaseEntity.java | 24 +++++++++++++ 5 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/Posts.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/Status.java create mode 100644 src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java new file mode 100644 index 00000000..78921ba6 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -0,0 +1,34 @@ +package com.example.ReviewZIP.domain.post; + +import com.example.ReviewZIP.domain.user.Users; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "posts") +public class Posts { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "comment", columnDefinition = "TEXT") + private String comment; + + @Column(nullable = false) + private Double point; + + @Column(nullable = false) + private Boolean read; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private Users user; + + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java b/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java new file mode 100644 index 00000000..07431e5b --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java @@ -0,0 +1,29 @@ +package com.example.ReviewZIP.domain.scrab; + +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "scrabs") +public class Scrabs extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private Users user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Posts post; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Status.java b/src/main/java/com/example/ReviewZIP/domain/user/Status.java new file mode 100644 index 00000000..1c2560f5 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/Status.java @@ -0,0 +1,12 @@ +package com.example.ReviewZIP.domain.user; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Status { + ENABLED, // 활성화(default) + DISABLED, // 비활성화 ( 장기 미접속자 ) + DELETED; // 삭제 +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 7572d1b5..cdfc5273 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -1,6 +1,8 @@ package com.example.ReviewZIP.domain.user; import com.example.ReviewZIP.domain.follow.Follows; +import com.example.ReviewZIP.domain.scrab.Scrabs; +import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.*; @@ -13,7 +15,7 @@ @AllArgsConstructor @NoArgsConstructor @Table(name = "users") -public class Users { +public class Users extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") @@ -25,9 +27,6 @@ public class Users { @Column(nullable = false) private String name; - @Column(nullable = true) - private String profile_image; - @Column(nullable = false) private String user_id; @@ -40,11 +39,15 @@ public class Users { @Column(nullable = false) private String nickname; - private boolean status; + @Enumerated(EnumType.STRING) + private Status status; @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) - List followingList = new ArrayList<>(); + private List followingList = new ArrayList<>(); @OneToMany(mappedBy = "receiver", cascade = CascadeType.ALL) - List followerList = new ArrayList<>(); + private List followerList = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List scrabList = new ArrayList<>(); } diff --git a/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java b/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java new file mode 100644 index 00000000..9cb0e458 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java @@ -0,0 +1,24 @@ +package com.example.ReviewZIP.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDate; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class BaseEntity { + @CreatedDate + @Column(name = "create_at") + private LocalDate createdAt; + + @LastModifiedDate + @Column(name = "updated_at") + private LocalDate updatedAt; +} \ No newline at end of file From 2d6a01785a811c02444dccfb32229a8e8c8b8ef1 Mon Sep 17 00:00:00 2001 From: hsuush Date: Fri, 12 Jan 2024 01:41:18 +0900 Subject: [PATCH 05/37] =?UTF-8?q?style=20:=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85=20#17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/follow/Follows.java | 28 +++++++++++ .../ReviewZIP/domain/hashtag/Hashtags.java | 21 ++++++++ .../ReviewZIP/domain/image/Images.java | 38 +++++++++++++++ .../example/ReviewZIP/domain/post/Posts.java | 48 +++++++++++++++++++ .../domain/postHashtag/PostHashtags.java | 29 +++++++++++ .../ReviewZIP/domain/postLike/PostLikes.java | 28 +++++++++++ .../ReviewZIP/domain/scrab/Scrabs.java | 29 +++++++++++ .../ReviewZIP/domain/store/Stores.java | 38 +++++++++++++++ .../example/ReviewZIP/domain/user/Status.java | 12 +++++ .../ReviewZIP/domain/user/UsersConverter.java | 5 ++ .../domain/user/UsersRepository.java | 8 ++++ .../ReviewZIP/global/entity/BaseEntity.java | 24 ++++++++++ 12 files changed, 308 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/Follows.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/hashtag/Hashtags.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/image/Images.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/Posts.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtags.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostLikes.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/store/Stores.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/Status.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java b/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java new file mode 100644 index 00000000..50164dfa --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java @@ -0,0 +1,28 @@ +package com.example.ReviewZIP.domain.follow; + +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "follows") +public class Follows extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "sender_id") + private Users sender; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "receiver_id") + private Users receiver; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/hashtag/Hashtags.java b/src/main/java/com/example/ReviewZIP/domain/hashtag/Hashtags.java new file mode 100644 index 00000000..5bb6446a --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/hashtag/Hashtags.java @@ -0,0 +1,21 @@ +package com.example.ReviewZIP.domain.hashtag; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "hashtags") +public class Hashtags { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "name", length = 50) + private String name; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/image/Images.java b/src/main/java/com/example/ReviewZIP/domain/image/Images.java new file mode 100644 index 00000000..e0c068df --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/image/Images.java @@ -0,0 +1,38 @@ +package com.example.ReviewZIP.domain.image; + +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.global.entity.BaseEntity; +import com.example.ReviewZIP.domain.post.Posts; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor +public class Images extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="id") + private Long id; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private String type; + + @Column(nullable = false) + private String url; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private Users user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Posts post; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java new file mode 100644 index 00000000..bef94db7 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -0,0 +1,48 @@ +package com.example.ReviewZIP.domain.post; + +import com.example.ReviewZIP.domain.image.Images; +import com.example.ReviewZIP.domain.postHashtag.PostHashtags; +import com.example.ReviewZIP.domain.postLike.PostLikes; +import com.example.ReviewZIP.domain.user.Users; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "posts") +public class Posts { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "comment", columnDefinition = "TEXT") + private String comment; + + @Column(nullable = false) + private Double point; + + @Column(nullable = false) + private Boolean read; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private Users user; + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + private List postImageList = new ArrayList<>(); + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + private List postLikeList = new ArrayList<>(); + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + private List postHashtagList = new ArrayList<>(); + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtags.java b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtags.java new file mode 100644 index 00000000..0549a25b --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtags.java @@ -0,0 +1,29 @@ +package com.example.ReviewZIP.domain.postHashtag; + +import com.example.ReviewZIP.domain.hashtag.Hashtags; +import com.example.ReviewZIP.domain.post.Posts; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "post_hashtags") +public class PostHashtags { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Posts post; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "hashtag_id") + private Hashtags hashtag; + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikes.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikes.java new file mode 100644 index 00000000..f1d3bde9 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikes.java @@ -0,0 +1,28 @@ +package com.example.ReviewZIP.domain.postLike; + +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.domain.post.Posts; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "post_likes") +public class PostLikes { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private Users user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Posts post; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java b/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java new file mode 100644 index 00000000..07431e5b --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java @@ -0,0 +1,29 @@ +package com.example.ReviewZIP.domain.scrab; + +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "scrabs") +public class Scrabs extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private Users user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Posts post; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/store/Stores.java b/src/main/java/com/example/ReviewZIP/domain/store/Stores.java new file mode 100644 index 00000000..63584d03 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/store/Stores.java @@ -0,0 +1,38 @@ +package com.example.ReviewZIP.domain.store; + +import com.example.ReviewZIP.global.entity.BaseEntity; +import com.example.ReviewZIP.domain.post.Posts; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.math.BigDecimal; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "stores") +public class Stores extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private String address; + + @Column(nullable = false) + private BigDecimal longitude; + + @Column(nullable = false) + private BigDecimal latitude; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Posts post; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Status.java b/src/main/java/com/example/ReviewZIP/domain/user/Status.java new file mode 100644 index 00000000..1c2560f5 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/Status.java @@ -0,0 +1,12 @@ +package com.example.ReviewZIP.domain.user; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Status { + ENABLED, // 활성화(default) + DISABLED, // 비활성화 ( 장기 미접속자 ) + DELETED; // 삭제 +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java new file mode 100644 index 00000000..2194c99f --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -0,0 +1,5 @@ +package com.example.ReviewZIP.domain.user; + +public class UsersConverter { + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java new file mode 100644 index 00000000..745a9d50 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.user; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UsersRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java b/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java new file mode 100644 index 00000000..5e6372c5 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java @@ -0,0 +1,24 @@ +package com.example.ReviewZIP.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDate; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class BaseEntity { + @CreatedDate + @Column(name = "create_at") + private LocalDate createdAt; + + @LastModifiedDate + @Column(name = "updated_at") + private LocalDate updatedAt; +} From 3e64cad9321a92479ff33adb62a14f63fdb16725 Mon Sep 17 00:00:00 2001 From: hsuush Date: Fri, 12 Jan 2024 01:41:36 +0900 Subject: [PATCH 06/37] =?UTF-8?q?feat=20:=20=EC=9C=A0=EC=A0=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20#17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/user/Users.java | 60 +++++++++++++++++++ .../domain/user/UsersController.java | 22 +++++++ .../ReviewZIP/domain/user/UsersService.java | 17 ++++++ 3 files changed, 99 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/Users.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersService.java diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java new file mode 100644 index 00000000..da39cd2f --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -0,0 +1,60 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.follow.Follows; +import com.example.ReviewZIP.domain.scrab.Scrabs; +import com.example.ReviewZIP.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.ColumnDefault; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@Table(name = "users") +@Where(clause = "status = 'ENABLED'") +@SQLDelete(sql = "UPDATE reviewzip.users SET status = 'DISABLED' WHERE id = ?") +public class Users extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="id") + private Long id; + + @Column(nullable = false) + private String email; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private String user_id; + + @Column(nullable = false) + private String password; + + @Column(nullable = false) + private String phone_num; + + @Column(nullable = false) + private String nickname; + + @Enumerated(EnumType.STRING) + @Column(columnDefinition = "VARCHAR(255) DEFAULT 'ENABLED'") + private Status status; + + @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) + private List followingList = new ArrayList<>(); + + @OneToMany(mappedBy = "receiver", cascade = CascadeType.ALL) + private List followerList = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List scrabList = new ArrayList<>(); +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java new file mode 100644 index 00000000..93abf9b3 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -0,0 +1,22 @@ +package com.example.ReviewZIP.domain.user; + +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v1/users") +public class UsersController { + private final UsersService usersService; + + @DeleteMapping("/delete/{userId}") + public ResponseEntity deleteUser(@PathVariable(name = "userId")Long userId){ + usersService.deleteUser(userId); + return ResponseEntity.ok() + .build(); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java new file mode 100644 index 00000000..3c47d53b --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -0,0 +1,17 @@ +package com.example.ReviewZIP.domain.user; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class UsersService { + private final UsersRepository usersRepository; + + @Transactional + public void deleteUser(Long userId){ + usersRepository.deleteById(userId); + } +} From 0dba537805d048bf960452732769c64d9d7cea5d Mon Sep 17 00:00:00 2001 From: hsuush Date: Sun, 14 Jan 2024 16:56:35 +0900 Subject: [PATCH 07/37] =?UTF-8?q?feat=20:=20=EC=9C=A0=EC=A0=80=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=EB=A1=9C=20=EC=9C=A0=EC=A0=80=20=EC=96=B8?= =?UTF-8?q?=ED=8C=94=EB=A1=9C=EC=9A=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/follow/FollowsController.java | 21 ++++++++++++++++ .../domain/follow/FollowsRepository.java | 11 ++++++++ .../domain/follow/FollowsService.java | 25 +++++++++++++++++++ .../follow/dto/request/UnfollowReqDto.java | 8 ++++++ .../follow/dto/response/UnfollowResDto.java | 14 +++++++++++ .../domain/user/UsersRepository.java | 8 ++++++ 6 files changed, 87 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/request/UnfollowReqDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/response/UnfollowResDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java new file mode 100644 index 00000000..f0754c78 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -0,0 +1,21 @@ +package com.example.ReviewZIP.domain.follow; + +import com.example.ReviewZIP.domain.follow.dto.response.UnfollowResDto; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v1/follows") +public class FollowsController { + private final FollowsService followsService; + @DeleteMapping("/users/{userId}") + public void unfollowUser(@PathVariable(name="userId")Long userId){ + followsService.unfollowUser(userId); + //추후에 ApiResponse 보낼 예정 + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java new file mode 100644 index 00000000..136d1671 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java @@ -0,0 +1,11 @@ +package com.example.ReviewZIP.domain.follow; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface FollowsRepository extends JpaRepository { + public Optional findBySenderIdAndReceiverId(Long senderId, Long receiverId); +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java new file mode 100644 index 00000000..9e8fbc67 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java @@ -0,0 +1,25 @@ +package com.example.ReviewZIP.domain.follow; + +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.domain.user.UsersRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class FollowsService { + private final FollowsRepository followsRepository; + private final UsersRepository usersRepository; + @Transactional + public void unfollowUser(Long userId){ + Users sender = usersRepository.findById(1L).orElseThrow(()->new IllegalArgumentException("not found sender")); + Users receiver = usersRepository.findById(userId).orElseThrow(()->new IllegalArgumentException("not found receiver")); + + Follows unfollow = followsRepository.findBySenderIdAndReceiverId(1L, receiver.getId()) + .orElseThrow(()->new IllegalArgumentException("NOT FOUND FOLLOWS TABLE")); + + followsRepository.delete(unfollow); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/UnfollowReqDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/UnfollowReqDto.java new file mode 100644 index 00000000..03141ea8 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/UnfollowReqDto.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.follow.dto.request; + +import lombok.Getter; + +@Getter +public class UnfollowReqDto { + private Long userId; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/UnfollowResDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/UnfollowResDto.java new file mode 100644 index 00000000..fa536ad2 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/UnfollowResDto.java @@ -0,0 +1,14 @@ +package com.example.ReviewZIP.domain.follow.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Builder +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class UnfollowResDto { + private Long followId; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java new file mode 100644 index 00000000..745a9d50 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.user; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UsersRepository extends JpaRepository { +} From 31481925e520c6e05986fea28702ec3df855b382 Mon Sep 17 00:00:00 2001 From: hsuush Date: Sun, 14 Jan 2024 20:47:46 +0900 Subject: [PATCH 08/37] =?UTF-8?q?fix=20:=20=EB=B0=98=ED=99=98=ED=83=80?= =?UTF-8?q?=EC=9E=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/follow/FollowsController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java index 4d4bbaaf..349542e6 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -2,6 +2,7 @@ import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -14,9 +15,9 @@ public class FollowsController { private final FollowsService followsService; @PostMapping("/users/{userId}") - public FollowResDto follow(@PathVariable(name="userId") Long userId){ + public ResponseEntity follow(@PathVariable(name="userId") Long userId){ Follows follows = followsService.createFollowing(userId); - return FollowsConverter.toCreateFollowDto(follows); + return ResponseEntity.ok(FollowsConverter.toCreateFollowDto(follows)); } } From 0bb3d7aa7c7074b9d4803f138993f02b89daadb4 Mon Sep 17 00:00:00 2001 From: hsuush Date: Mon, 15 Jan 2024 00:47:47 +0900 Subject: [PATCH 09/37] =?UTF-8?q?feat=20:=20=EC=9C=A0=EC=A0=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/follow/FollowsRepository.java | 8 ++++++++ .../com/example/ReviewZIP/domain/image/Images.java | 4 ---- .../ReviewZIP/domain/image/ImagesRepository.java | 8 ++++++++ .../com/example/ReviewZIP/domain/post/Posts.java | 8 ++++---- .../domain/postLike/PostHashtagsRepository.java | 9 +++++++++ .../ReviewZIP/domain/scrab/ScrabsRepository.java | 6 ++++++ .../com/example/ReviewZIP/domain/user/Users.java | 13 ++++++++++--- .../ReviewZIP/domain/user/UsersController.java | 1 + .../ReviewZIP/domain/user/UsersConverter.java | 8 +++++++- .../ReviewZIP/domain/user/UsersService.java | 7 +++++++ .../domain/user/dto/request/DeleteUserReqDto.java | 8 ++++++++ .../domain/user/dto/response/DeleteUserResDto.java | 14 ++++++++++++++ 12 files changed, 82 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostHashtagsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/request/DeleteUserReqDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/response/DeleteUserResDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java new file mode 100644 index 00000000..503f6393 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.follow; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FollowsRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/image/Images.java b/src/main/java/com/example/ReviewZIP/domain/image/Images.java index e0c068df..9d0b889d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/image/Images.java +++ b/src/main/java/com/example/ReviewZIP/domain/image/Images.java @@ -28,10 +28,6 @@ public class Images extends BaseEntity { @Column(nullable = false) private String url; - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private Users user; - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "post_id") private Posts post; diff --git a/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java b/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java new file mode 100644 index 00000000..c00327a0 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.image; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ImagesRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java index bef94db7..4c238a36 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -29,20 +29,20 @@ public class Posts { @Column(nullable = false) private Double point; - @Column(nullable = false) + @Column(name = "is_read", nullable = false) private Boolean read; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private Users user; - @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE) private List postImageList = new ArrayList<>(); - @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE) private List postLikeList = new ArrayList<>(); - @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE) private List postHashtagList = new ArrayList<>(); } diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostHashtagsRepository.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostHashtagsRepository.java new file mode 100644 index 00000000..2dc67f75 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostHashtagsRepository.java @@ -0,0 +1,9 @@ +package com.example.ReviewZIP.domain.postLike; + +import com.example.ReviewZIP.domain.postHashtag.PostHashtags; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PostHashtagsRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java b/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java new file mode 100644 index 00000000..d4a21b84 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java @@ -0,0 +1,6 @@ +package com.example.ReviewZIP.domain.scrab; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ScrabsRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index da39cd2f..e067073c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -1,6 +1,8 @@ package com.example.ReviewZIP.domain.user; import com.example.ReviewZIP.domain.follow.Follows; +import com.example.ReviewZIP.domain.image.Images; +import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; @@ -45,16 +47,21 @@ public class Users extends BaseEntity { @Column(nullable = false) private String nickname; + private String profileUrl; + @Enumerated(EnumType.STRING) @Column(columnDefinition = "VARCHAR(255) DEFAULT 'ENABLED'") private Status status; - @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) + @OneToMany + private List postsList = new ArrayList<>(); + + @OneToMany(mappedBy = "sender", cascade = CascadeType.REMOVE) private List followingList = new ArrayList<>(); - @OneToMany(mappedBy = "receiver", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "receiver", cascade = CascadeType.REMOVE) private List followerList = new ArrayList<>(); - @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) private List scrabList = new ArrayList<>(); } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index 93abf9b3..0a98fd58 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -1,5 +1,6 @@ package com.example.ReviewZIP.domain.user; +import com.example.ReviewZIP.domain.user.dto.response.DeleteUserResDto; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index 2194c99f..c856c715 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -1,5 +1,11 @@ package com.example.ReviewZIP.domain.user; -public class UsersConverter { +import com.example.ReviewZIP.domain.user.dto.response.DeleteUserResDto; +public class UsersConverter { + public static DeleteUserResDto toDeleteUserDto(Users user){ + return DeleteUserResDto.builder() + .userId(user.getId()) + .build(); + } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 3c47d53b..3f0d2d6b 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -1,6 +1,8 @@ package com.example.ReviewZIP.domain.user; +import com.example.ReviewZIP.domain.user.dto.response.DeleteUserResDto; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -12,6 +14,11 @@ public class UsersService { @Transactional public void deleteUser(Long userId){ + Users user = usersRepository.findById(userId).orElseThrow(()->new IllegalArgumentException("NOT FOUND USER")); + + usersRepository.deleteById(userId); + + // 추후 응답으로 반환 예정 } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/DeleteUserReqDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/DeleteUserReqDto.java new file mode 100644 index 00000000..1615cb40 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/DeleteUserReqDto.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.user.dto.request; + +import lombok.Getter; + +@Getter +public class DeleteUserReqDto { + private Long userId; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/DeleteUserResDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/DeleteUserResDto.java new file mode 100644 index 00000000..a874cb42 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/DeleteUserResDto.java @@ -0,0 +1,14 @@ +package com.example.ReviewZIP.domain.user.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeleteUserResDto { + private Long userId; +} From 28840a2a3835fdb1d50128f7e01d9b95abfeef46 Mon Sep 17 00:00:00 2001 From: hsuush Date: Mon, 15 Jan 2024 15:57:42 +0900 Subject: [PATCH 10/37] =?UTF-8?q?feat=20:=20=EC=9C=A0=EC=A0=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/post/Posts.java | 14 ++++++-- .../domain/post/PostsRepository.java | 10 ++++++ .../PostHashtagsRepository.java | 3 +- .../domain/postLike/PostLikesRepository.java | 8 +++++ .../domain/scrab/ScrabsRepository.java | 1 + .../example/ReviewZIP/domain/user/Users.java | 18 ++++++---- .../ReviewZIP/domain/user/UsersService.java | 36 +++++++++++++++++-- 7 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java rename src/main/java/com/example/ReviewZIP/domain/{postLike => postHashtag}/PostHashtagsRepository.java (66%) create mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java index 4c238a36..fbf8257d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -3,6 +3,8 @@ import com.example.ReviewZIP.domain.image.Images; import com.example.ReviewZIP.domain.postHashtag.PostHashtags; import com.example.ReviewZIP.domain.postLike.PostLikes; +import com.example.ReviewZIP.domain.scrab.Scrabs; +import com.example.ReviewZIP.domain.store.Stores; import com.example.ReviewZIP.domain.user.Users; import jakarta.persistence.*; import lombok.Getter; @@ -36,13 +38,19 @@ public class Posts { @JoinColumn(name = "user_id") private Users user; - @OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE) + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + private List scrabList = new ArrayList<>(); + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) + private List storeList = new ArrayList<>(); + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) private List postImageList = new ArrayList<>(); - @OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE) + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) private List postLikeList = new ArrayList<>(); - @OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE) + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) private List postHashtagList = new ArrayList<>(); } diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java new file mode 100644 index 00000000..ffa63768 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java @@ -0,0 +1,10 @@ +package com.example.ReviewZIP.domain.post; + +import com.example.ReviewZIP.domain.user.Users; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PostsRepository extends JpaRepository { + void deleteAllByUserId(Long userId); +} diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostHashtagsRepository.java b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java similarity index 66% rename from src/main/java/com/example/ReviewZIP/domain/postLike/PostHashtagsRepository.java rename to src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java index 2dc67f75..b2309c10 100644 --- a/src/main/java/com/example/ReviewZIP/domain/postLike/PostHashtagsRepository.java +++ b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java @@ -1,6 +1,5 @@ -package com.example.ReviewZIP.domain.postLike; +package com.example.ReviewZIP.domain.postHashtag; -import com.example.ReviewZIP.domain.postHashtag.PostHashtags; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java new file mode 100644 index 00000000..6c923faf --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.postLike; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PostLikesRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java b/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java index d4a21b84..4697949a 100644 --- a/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java +++ b/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java @@ -3,4 +3,5 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface ScrabsRepository extends JpaRepository { + void deleteAllByUserId(Long userId); } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index e067073c..89b236a0 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -3,6 +3,7 @@ import com.example.ReviewZIP.domain.follow.Follows; import com.example.ReviewZIP.domain.image.Images; import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.postLike.PostLikes; import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; @@ -53,15 +54,20 @@ public class Users extends BaseEntity { @Column(columnDefinition = "VARCHAR(255) DEFAULT 'ENABLED'") private Status status; - @OneToMany - private List postsList = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List postList = new ArrayList<>(); - @OneToMany(mappedBy = "sender", cascade = CascadeType.REMOVE) + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List postLikeList = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List scrabList = new ArrayList<>(); + + @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) private List followingList = new ArrayList<>(); - @OneToMany(mappedBy = "receiver", cascade = CascadeType.REMOVE) + @OneToMany(mappedBy = "receiver", cascade = CascadeType.ALL) private List followerList = new ArrayList<>(); - @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) - private List scrabList = new ArrayList<>(); + } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 3f0d2d6b..861bedf0 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -1,8 +1,16 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.user.dto.response.DeleteUserResDto; +import com.example.ReviewZIP.domain.image.Images; +import com.example.ReviewZIP.domain.image.ImagesRepository; +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.post.PostsRepository; +import com.example.ReviewZIP.domain.postHashtag.PostHashtags; +import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; +import com.example.ReviewZIP.domain.postLike.PostLikes; +import com.example.ReviewZIP.domain.postLike.PostLikesRepository; +import com.example.ReviewZIP.domain.scrab.Scrabs; +import com.example.ReviewZIP.domain.scrab.ScrabsRepository; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -11,14 +19,36 @@ @Transactional(readOnly = true) public class UsersService { private final UsersRepository usersRepository; + private final PostsRepository postsRepository; + private final ScrabsRepository scrabsRepository; + private final ImagesRepository imagesRepository; + private final PostLikesRepository postLikesRepository; + private final PostHashtagsRepository postHashtagsRepository; @Transactional public void deleteUser(Long userId){ Users user = usersRepository.findById(userId).orElseThrow(()->new IllegalArgumentException("NOT FOUND USER")); + for (Scrabs scrab : user.getScrabList()) { + scrabsRepository.delete(scrab); + } - usersRepository.deleteById(userId); + for (Posts post : user.getPostList()) { + for (Images image : post.getPostImageList()) { + imagesRepository.delete(image); + } + + for (PostLikes postLike : post.getPostLikeList()) { + postLikesRepository.delete(postLike); + } + for (PostHashtags postHashtag : post.getPostHashtagList()) { + postHashtagsRepository.delete(postHashtag); + } + postsRepository.delete(post); + } + + usersRepository.deleteById(userId); // 추후 응답으로 반환 예정 } } From ed9e19ff90240656f5de6c5ea0dd2f9fc2e54dfb Mon Sep 17 00:00:00 2001 From: hsuush Date: Mon, 15 Jan 2024 16:12:21 +0900 Subject: [PATCH 11/37] =?UTF-8?q?feat=20:=20=EC=9C=A0=EC=A0=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/ReviewZIP/domain/user/UsersService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 861bedf0..8750964b 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -29,6 +29,8 @@ public class UsersService { public void deleteUser(Long userId){ Users user = usersRepository.findById(userId).orElseThrow(()->new IllegalArgumentException("NOT FOUND USER")); + postLikesRepository.deleteById(userId); + for (Scrabs scrab : user.getScrabList()) { scrabsRepository.delete(scrab); } From d0d5e9f9f97a11c2a480233c50e480691389bf39 Mon Sep 17 00:00:00 2001 From: hsuush Date: Thu, 18 Jan 2024 09:50:45 +0900 Subject: [PATCH 12/37] =?UTF-8?q?chore=20:=20=ED=8C=8C=EC=9D=BC=EB=AA=85?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/follow/FollowsController.java | 4 ++-- .../example/ReviewZIP/domain/follow/FollowsConverter.java | 6 +++--- .../request/{FollowReqDto.java => FollowRequestDto.java} | 2 +- .../response/{FollowResDto.java => FollowResponseDto.java} | 2 +- src/main/java/com/example/ReviewZIP/domain/post/Posts.java | 1 + 5 files changed, 8 insertions(+), 7 deletions(-) rename src/main/java/com/example/ReviewZIP/domain/follow/dto/request/{FollowReqDto.java => FollowRequestDto.java} (78%) rename src/main/java/com/example/ReviewZIP/domain/follow/dto/response/{FollowResDto.java => FollowResponseDto.java} (88%) diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java index 349542e6..4f31b89f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -1,6 +1,6 @@ package com.example.ReviewZIP.domain.follow; -import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; +import com.example.ReviewZIP.domain.follow.dto.response.FollowResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -15,7 +15,7 @@ public class FollowsController { private final FollowsService followsService; @PostMapping("/users/{userId}") - public ResponseEntity follow(@PathVariable(name="userId") Long userId){ + public ResponseEntity follow(@PathVariable(name="userId") Long userId){ Follows follows = followsService.createFollowing(userId); return ResponseEntity.ok(FollowsConverter.toCreateFollowDto(follows)); diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java index a952155f..3364088e 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java @@ -1,6 +1,6 @@ package com.example.ReviewZIP.domain.follow; -import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; +import com.example.ReviewZIP.domain.follow.dto.response.FollowResponseDto; import com.example.ReviewZIP.domain.user.Users; public class FollowsConverter { @@ -11,8 +11,8 @@ public static Follows toFollows(Users sender, Users receiver){ .build(); } - public static FollowResDto toCreateFollowDto(Follows follow){ - return FollowResDto.builder() + public static FollowResponseDto toCreateFollowDto(Follows follow){ + return FollowResponseDto.builder() .followId(follow.getId()) .build(); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java similarity index 78% rename from src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java rename to src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java index 664b4c0c..70ca1707 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java @@ -3,6 +3,6 @@ import lombok.Getter; @Getter -public class FollowReqDto { +public class FollowRequestDto { private Long senderId; } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java similarity index 88% rename from src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java rename to src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java index 3e442324..93fe3424 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java @@ -9,6 +9,6 @@ @Getter @NoArgsConstructor @AllArgsConstructor -public class FollowResDto { +public class FollowResponseDto { private Long followId; } diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java index ee0b7334..1bf6d90c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -4,6 +4,7 @@ import com.example.ReviewZIP.domain.postHashtag.PostHashtags; import com.example.ReviewZIP.domain.postLike.PostLikes; import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; From 21675080e91fc21e97f2fdd2e5e7b3143e926d7b Mon Sep 17 00:00:00 2001 From: hsuush Date: Wed, 10 Jan 2024 23:36:29 +0900 Subject: [PATCH 13/37] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=EB=A1=9C=20=EC=9C=A0=EC=A0=80=20=ED=8C=94?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0=20#18?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/follow/FollowsController.java | 22 ++++++++++++++++ .../domain/follow/FollowsConverter.java | 19 ++++++++++++++ .../domain/follow/FollowsRepositoy.java | 8 ++++++ .../domain/follow/FollowsService.java | 26 +++++++++++++++++++ .../follow/dto/request/FollowReqDto.java | 8 ++++++ .../follow/dto/response/FollowResDto.java | 14 ++++++++++ .../domain/user/UsersRepository.java | 8 ++++++ 7 files changed, 105 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java new file mode 100644 index 00000000..4d4bbaaf --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -0,0 +1,22 @@ +package com.example.ReviewZIP.domain.follow; + +import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v1/follows") +public class FollowsController { + private final FollowsService followsService; + + @PostMapping("/users/{userId}") + public FollowResDto follow(@PathVariable(name="userId") Long userId){ + Follows follows = followsService.createFollowing(userId); + + return FollowsConverter.toCreateFollowDto(follows); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java new file mode 100644 index 00000000..a952155f --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java @@ -0,0 +1,19 @@ +package com.example.ReviewZIP.domain.follow; + +import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; +import com.example.ReviewZIP.domain.user.Users; + +public class FollowsConverter { + public static Follows toFollows(Users sender, Users receiver){ + return Follows.builder() + .sender(sender) + .receiver(receiver) + .build(); + } + + public static FollowResDto toCreateFollowDto(Follows follow){ + return FollowResDto.builder() + .followId(follow.getId()) + .build(); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java new file mode 100644 index 00000000..979f9517 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.follow; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FollowsRepositoy extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java new file mode 100644 index 00000000..f1ae9685 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java @@ -0,0 +1,26 @@ +package com.example.ReviewZIP.domain.follow; + + +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.domain.user.UsersRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class FollowsService { + private final FollowsRepositoy followsRepositoy; + private final UsersRepository usersRepository; + + + @Transactional + public Follows createFollowing(Long userId){ + Users sender = usersRepository.findById(1L).orElseThrow(()->new IllegalArgumentException("sender doesn't exist")); + Users receiver = usersRepository.findById(userId).orElseThrow(()->new IllegalArgumentException("receiver doesn't exist")); + Follows newFollow = FollowsConverter.toFollows(sender, receiver); + + return followsRepositoy.save(newFollow); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java new file mode 100644 index 00000000..664b4c0c --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.follow.dto.request; + +import lombok.Getter; + +@Getter +public class FollowReqDto { + private Long senderId; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java new file mode 100644 index 00000000..3e442324 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java @@ -0,0 +1,14 @@ +package com.example.ReviewZIP.domain.follow.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Builder +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class FollowResDto { + private Long followId; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java new file mode 100644 index 00000000..745a9d50 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.user; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UsersRepository extends JpaRepository { +} From 8bc84b1f3d02bc341bb963c03a57cbb9a188aa58 Mon Sep 17 00:00:00 2001 From: hsuush Date: Fri, 12 Jan 2024 00:29:43 +0900 Subject: [PATCH 14/37] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=EB=A1=9C=20=EC=9C=A0=EC=A0=80=20=ED=8C=94?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/ReviewZIP/domain/post/Posts.java | 2 ++ .../java/com/example/ReviewZIP/domain/scrab/Scrabs.java | 6 ++++++ .../java/com/example/ReviewZIP/domain/user/Users.java | 1 + .../com/example/ReviewZIP/global/entity/BaseEntity.java | 8 ++++++++ 4 files changed, 17 insertions(+) diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java index 9fa91578..8730dc1f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -7,6 +7,7 @@ import com.example.ReviewZIP.domain.store.Stores; import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.global.entity.BaseEntity; + import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; @@ -21,6 +22,7 @@ @NoArgsConstructor @Table(name = "posts") public class Posts extends BaseEntity { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java b/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java index 96d4fe23..f00fa40c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java +++ b/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java @@ -1,8 +1,14 @@ package com.example.ReviewZIP.domain.scrab; +<<<<<<< HEAD import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.global.entity.BaseEntity; import com.example.ReviewZIP.domain.post.Posts; +======= +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.global.entity.BaseEntity; +>>>>>>> 9a8ae7b (feat: 유저아이디로 유저 팔로우) import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index a4e83461..919c71a0 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -62,4 +62,5 @@ public class Users extends BaseEntity { @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List postLikeList = new ArrayList<>(); + } diff --git a/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java b/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java index e627c45d..a6167ee6 100644 --- a/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java +++ b/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java @@ -7,6 +7,10 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; +<<<<<<< HEAD +======= + +>>>>>>> 9a8ae7b (feat: 유저아이디로 유저 팔로우) import java.time.LocalDate; @Getter @@ -20,4 +24,8 @@ public class BaseEntity { @LastModifiedDate @Column(name = "updated_at") private LocalDate updatedAt; +<<<<<<< HEAD +} +======= } +>>>>>>> 9a8ae7b (feat: 유저아이디로 유저 팔로우) From 260df8e2ff50d0bb5f3a7063a871c48b6a3a68b6 Mon Sep 17 00:00:00 2001 From: hsuush Date: Sun, 14 Jan 2024 20:47:46 +0900 Subject: [PATCH 15/37] =?UTF-8?q?fix=20:=20=EB=B0=98=ED=99=98=ED=83=80?= =?UTF-8?q?=EC=9E=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/follow/FollowsController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java index 4d4bbaaf..349542e6 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -2,6 +2,7 @@ import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -14,9 +15,9 @@ public class FollowsController { private final FollowsService followsService; @PostMapping("/users/{userId}") - public FollowResDto follow(@PathVariable(name="userId") Long userId){ + public ResponseEntity follow(@PathVariable(name="userId") Long userId){ Follows follows = followsService.createFollowing(userId); - return FollowsConverter.toCreateFollowDto(follows); + return ResponseEntity.ok(FollowsConverter.toCreateFollowDto(follows)); } } From c4dbfdf3f74fbecbad23d5807cd267960da96075 Mon Sep 17 00:00:00 2001 From: hsuush Date: Thu, 18 Jan 2024 09:50:45 +0900 Subject: [PATCH 16/37] =?UTF-8?q?chore=20:=20=ED=8C=8C=EC=9D=BC=EB=AA=85?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/follow/FollowsController.java | 4 ++-- .../example/ReviewZIP/domain/follow/FollowsConverter.java | 6 +++--- .../request/{FollowReqDto.java => FollowRequestDto.java} | 2 +- .../response/{FollowResDto.java => FollowResponseDto.java} | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) rename src/main/java/com/example/ReviewZIP/domain/follow/dto/request/{FollowReqDto.java => FollowRequestDto.java} (78%) rename src/main/java/com/example/ReviewZIP/domain/follow/dto/response/{FollowResDto.java => FollowResponseDto.java} (88%) diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java index 349542e6..4f31b89f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -1,6 +1,6 @@ package com.example.ReviewZIP.domain.follow; -import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; +import com.example.ReviewZIP.domain.follow.dto.response.FollowResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -15,7 +15,7 @@ public class FollowsController { private final FollowsService followsService; @PostMapping("/users/{userId}") - public ResponseEntity follow(@PathVariable(name="userId") Long userId){ + public ResponseEntity follow(@PathVariable(name="userId") Long userId){ Follows follows = followsService.createFollowing(userId); return ResponseEntity.ok(FollowsConverter.toCreateFollowDto(follows)); diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java index a952155f..3364088e 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java @@ -1,6 +1,6 @@ package com.example.ReviewZIP.domain.follow; -import com.example.ReviewZIP.domain.follow.dto.response.FollowResDto; +import com.example.ReviewZIP.domain.follow.dto.response.FollowResponseDto; import com.example.ReviewZIP.domain.user.Users; public class FollowsConverter { @@ -11,8 +11,8 @@ public static Follows toFollows(Users sender, Users receiver){ .build(); } - public static FollowResDto toCreateFollowDto(Follows follow){ - return FollowResDto.builder() + public static FollowResponseDto toCreateFollowDto(Follows follow){ + return FollowResponseDto.builder() .followId(follow.getId()) .build(); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java similarity index 78% rename from src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java rename to src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java index 664b4c0c..70ca1707 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowReqDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java @@ -3,6 +3,6 @@ import lombok.Getter; @Getter -public class FollowReqDto { +public class FollowRequestDto { private Long senderId; } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java similarity index 88% rename from src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java rename to src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java index 3e442324..93fe3424 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java @@ -9,6 +9,6 @@ @Getter @NoArgsConstructor @AllArgsConstructor -public class FollowResDto { +public class FollowResponseDto { private Long followId; } From 37f0bd4e180939576d1ae09a20f6804239eaa5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Thu, 18 Jan 2024 23:59:45 +0900 Subject: [PATCH 17/37] =?UTF-8?q?refactor=20:=20ApiResponse=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/follow/Follows.java | 6 +++--- .../domain/follow/FollowsController.java | 5 +++-- .../domain/follow/FollowsConverter.java | 4 ++-- .../domain/follow/FollowsRepositoy.java | 2 ++ .../domain/follow/FollowsService.java | 15 ++++++++++++--- .../follow/dto/response/FollowResponseDto.java | 15 ++++++++++----- .../example/ReviewZIP/domain/scrab/Scrabs.java | 7 +------ .../ReviewZIP/global/entity/BaseEntity.java | 9 ++------- .../global/response/code/BaseCode.java | 4 ++-- .../global/response/code/BaseErrorCode.java | 4 ++-- ...ErrorReasonDTO.java => ErrorReasonDto.java} | 2 +- .../global/response/code/ReasonDto.java | 18 ++++++++++++++++++ .../response/code/resultCode/ErrorStatus.java | 14 ++++++++------ .../code/resultCode/SuccessStatus.java | 10 +++++----- .../response/exception/ExceptionAdvice.java | 6 +++--- .../response/exception/GeneralException.java | 6 +++--- .../exception/handler/FollowsHandler.java | 8 ++++++++ 17 files changed, 85 insertions(+), 50 deletions(-) rename src/main/java/com/example/ReviewZIP/global/response/code/{ErrorReasonDTO.java => ErrorReasonDto.java} (92%) create mode 100644 src/main/java/com/example/ReviewZIP/global/response/code/ReasonDto.java create mode 100644 src/main/java/com/example/ReviewZIP/global/response/exception/handler/FollowsHandler.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java b/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java index 50164dfa..2cb275cd 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/Follows.java @@ -3,13 +3,13 @@ import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; @Entity @Getter @Setter +@Builder +@AllArgsConstructor @NoArgsConstructor @Table(name = "follows") public class Follows extends BaseEntity { diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java index 4f31b89f..3076ebe8 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -1,6 +1,7 @@ package com.example.ReviewZIP.domain.follow; import com.example.ReviewZIP.domain.follow.dto.response.FollowResponseDto; +import com.example.ReviewZIP.global.response.ApiResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -15,9 +16,9 @@ public class FollowsController { private final FollowsService followsService; @PostMapping("/users/{userId}") - public ResponseEntity follow(@PathVariable(name="userId") Long userId){ + public ApiResponse follow(@PathVariable(name="userId") Long userId){ Follows follows = followsService.createFollowing(userId); - return ResponseEntity.ok(FollowsConverter.toCreateFollowDto(follows)); + return ApiResponse.onSuccess(FollowsConverter.toCreateFollowDto(follows)); } } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java index 3364088e..ca74e2b5 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java @@ -11,8 +11,8 @@ public static Follows toFollows(Users sender, Users receiver){ .build(); } - public static FollowResponseDto toCreateFollowDto(Follows follow){ - return FollowResponseDto.builder() + public static FollowResponseDto.toCreateFollowDto toCreateFollowDto(Follows follow){ + return FollowResponseDto.toCreateFollowDto.builder() .followId(follow.getId()) .build(); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java index 979f9517..7e03693a 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java @@ -1,8 +1,10 @@ package com.example.ReviewZIP.domain.follow; +import com.example.ReviewZIP.domain.user.Users; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface FollowsRepositoy extends JpaRepository { + boolean existsBySenderAndReceiver(Users sender, Users receiver); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java index f1ae9685..e295298d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java @@ -3,6 +3,9 @@ import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.domain.user.UsersRepository; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.FollowsHandler; +import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -17,10 +20,16 @@ public class FollowsService { @Transactional public Follows createFollowing(Long userId){ - Users sender = usersRepository.findById(1L).orElseThrow(()->new IllegalArgumentException("sender doesn't exist")); - Users receiver = usersRepository.findById(userId).orElseThrow(()->new IllegalArgumentException("receiver doesn't exist")); - Follows newFollow = FollowsConverter.toFollows(sender, receiver); + Users sender = usersRepository.findById(1L).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); + Users receiver = usersRepository.findById(userId).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); + + // 팔로우가 이미 존재하는지 존재확인 + boolean existsCheck = followsRepositoy.existsBySenderAndReceiver(sender, receiver); + if(existsCheck){ + throw new FollowsHandler(ErrorStatus.FOLLOW_ALREADY_EXISTS); + } + Follows newFollow = FollowsConverter.toFollows(sender, receiver); return followsRepositoy.save(newFollow); } } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java index 93fe3424..1e6ccb05 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java @@ -1,14 +1,19 @@ package com.example.ReviewZIP.domain.follow.dto.response; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -@Builder -@Getter -@NoArgsConstructor -@AllArgsConstructor public class FollowResponseDto { - private Long followId; + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class toCreateFollowDto{ + private Long followId; + } + } diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java b/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java index f00fa40c..db1fe445 100644 --- a/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java +++ b/src/main/java/com/example/ReviewZIP/domain/scrab/Scrabs.java @@ -1,14 +1,9 @@ package com.example.ReviewZIP.domain.scrab; -<<<<<<< HEAD import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.global.entity.BaseEntity; import com.example.ReviewZIP.domain.post.Posts; -======= -import com.example.ReviewZIP.domain.post.Posts; -import com.example.ReviewZIP.domain.user.Users; -import com.example.ReviewZIP.global.entity.BaseEntity; ->>>>>>> 9a8ae7b (feat: 유저아이디로 유저 팔로우) + import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java b/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java index a6167ee6..29439346 100644 --- a/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java +++ b/src/main/java/com/example/ReviewZIP/global/entity/BaseEntity.java @@ -7,10 +7,7 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -<<<<<<< HEAD -======= ->>>>>>> 9a8ae7b (feat: 유저아이디로 유저 팔로우) import java.time.LocalDate; @Getter @@ -24,8 +21,6 @@ public class BaseEntity { @LastModifiedDate @Column(name = "updated_at") private LocalDate updatedAt; -<<<<<<< HEAD -} -======= + } ->>>>>>> 9a8ae7b (feat: 유저아이디로 유저 팔로우) + diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/BaseCode.java b/src/main/java/com/example/ReviewZIP/global/response/code/BaseCode.java index af46e0c7..a015a4a6 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/code/BaseCode.java +++ b/src/main/java/com/example/ReviewZIP/global/response/code/BaseCode.java @@ -1,7 +1,7 @@ package com.example.ReviewZIP.global.response.code; public interface BaseCode { - public ReasonDTO getReason(); + public ReasonDto getReason(); - public ReasonDTO getReasonHttpStatus(); + public ReasonDto getReasonHttpStatus(); } diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/BaseErrorCode.java b/src/main/java/com/example/ReviewZIP/global/response/code/BaseErrorCode.java index 931895f9..5eecd931 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/code/BaseErrorCode.java +++ b/src/main/java/com/example/ReviewZIP/global/response/code/BaseErrorCode.java @@ -1,7 +1,7 @@ package com.example.ReviewZIP.global.response.code; public interface BaseErrorCode { - public ErrorReasonDTO getReason(); + public ErrorReasonDto getReason(); - public ErrorReasonDTO getReasonHttpStatus(); + public ErrorReasonDto getReasonHttpStatus(); } diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/ErrorReasonDTO.java b/src/main/java/com/example/ReviewZIP/global/response/code/ErrorReasonDto.java similarity index 92% rename from src/main/java/com/example/ReviewZIP/global/response/code/ErrorReasonDTO.java rename to src/main/java/com/example/ReviewZIP/global/response/code/ErrorReasonDto.java index 81d90cd9..50b95550 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/code/ErrorReasonDTO.java +++ b/src/main/java/com/example/ReviewZIP/global/response/code/ErrorReasonDto.java @@ -6,7 +6,7 @@ @Getter @Builder -public class ErrorReasonDTO { +public class ErrorReasonDto { private HttpStatus httpStatus; private final boolean isSuccess; diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/ReasonDto.java b/src/main/java/com/example/ReviewZIP/global/response/code/ReasonDto.java new file mode 100644 index 00000000..950bcd6c --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/global/response/code/ReasonDto.java @@ -0,0 +1,18 @@ +package com.example.ReviewZIP.global.response.code; + +import lombok.Builder; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@Builder +public class ReasonDto { + + private HttpStatus httpStatus; + + private final boolean isSuccess; + private final String code; + private final String message; + + public boolean getIsSuccess(){return isSuccess;} +} \ No newline at end of file diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java index 2f347de0..a2169bd2 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java +++ b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java @@ -2,7 +2,7 @@ import com.example.ReviewZIP.global.response.code.BaseErrorCode; -import com.example.ReviewZIP.global.response.code.ErrorReasonDTO; +import com.example.ReviewZIP.global.response.code.ErrorReasonDto; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.http.HttpStatus; @@ -41,16 +41,18 @@ public enum ErrorStatus implements BaseErrorCode { //Store STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE401", "존재하지 않는 가게입니다."), - LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE402", "존재하지 않는 가게 위치입니다."); + LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE402", "존재하지 않는 가게 위치입니다."), + //Follow + FOLLOW_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "FOLLOW401", "이미 팔로우한 상태입니다."); private final HttpStatus httpStatus; private final String code; private final String message; @Override - public ErrorReasonDTO getReason() { - return ErrorReasonDTO.builder() + public ErrorReasonDto getReason() { + return ErrorReasonDto.builder() .message(message) .code(code) .isSuccess(false) @@ -58,8 +60,8 @@ public ErrorReasonDTO getReason() { } @Override - public ErrorReasonDTO getReasonHttpStatus() { - return ErrorReasonDTO.builder() + public ErrorReasonDto getReasonHttpStatus() { + return ErrorReasonDto.builder() .message(message) .code(code) .isSuccess(false) diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/SuccessStatus.java b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/SuccessStatus.java index ee0ea6b4..d9e2333d 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/SuccessStatus.java +++ b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/SuccessStatus.java @@ -1,7 +1,7 @@ package com.example.ReviewZIP.global.response.code.resultCode; import com.example.ReviewZIP.global.response.code.BaseCode; -import com.example.ReviewZIP.global.response.code.ReasonDTO; +import com.example.ReviewZIP.global.response.code.ReasonDto; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.http.HttpStatus; @@ -62,8 +62,8 @@ public enum SuccessStatus implements BaseCode { private final String message; @Override - public ReasonDTO getReason() { - return ReasonDTO.builder() + public ReasonDto getReason() { + return ReasonDto.builder() .message(message) .code(code) .isSuccess(true) @@ -71,8 +71,8 @@ public ReasonDTO getReason() { } @Override - public ReasonDTO getReasonHttpStatus() { - return ReasonDTO.builder() + public ReasonDto getReasonHttpStatus() { + return ReasonDto.builder() .message(message) .code(code) .isSuccess(true) diff --git a/src/main/java/com/example/ReviewZIP/global/response/exception/ExceptionAdvice.java b/src/main/java/com/example/ReviewZIP/global/response/exception/ExceptionAdvice.java index 2bf18e37..85eff7a3 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/exception/ExceptionAdvice.java +++ b/src/main/java/com/example/ReviewZIP/global/response/exception/ExceptionAdvice.java @@ -1,7 +1,7 @@ package com.example.ReviewZIP.global.response.exception; import com.example.ReviewZIP.global.response.ApiResponse; -import com.example.ReviewZIP.global.response.code.ErrorReasonDTO; +import com.example.ReviewZIP.global.response.code.ErrorReasonDto; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.ConstraintViolationException; @@ -41,11 +41,11 @@ public ResponseEntity exception(Exception e, WebRequest request) { @ExceptionHandler(value = GeneralException.class) public ResponseEntity onThrowException(GeneralException generalException, HttpServletRequest request) { - ErrorReasonDTO errorReasonHttpStatus = generalException.getErrorReasonHttpStatus(); + ErrorReasonDto errorReasonHttpStatus = generalException.getErrorReasonHttpStatus(); return handleExceptionInternal(generalException,errorReasonHttpStatus,null,request); } - private ResponseEntity handleExceptionInternal(Exception e, ErrorReasonDTO reason, + private ResponseEntity handleExceptionInternal(Exception e, ErrorReasonDto reason, HttpHeaders headers, HttpServletRequest request) { ApiResponse body = ApiResponse.onFailure(reason.getCode(),reason.getMessage(),null); diff --git a/src/main/java/com/example/ReviewZIP/global/response/exception/GeneralException.java b/src/main/java/com/example/ReviewZIP/global/response/exception/GeneralException.java index 6433e275..a666f0d7 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/exception/GeneralException.java +++ b/src/main/java/com/example/ReviewZIP/global/response/exception/GeneralException.java @@ -1,7 +1,7 @@ package com.example.ReviewZIP.global.response.exception; import com.example.ReviewZIP.global.response.code.BaseErrorCode; -import com.example.ReviewZIP.global.response.code.ErrorReasonDTO; +import com.example.ReviewZIP.global.response.code.ErrorReasonDto; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,11 +11,11 @@ public class GeneralException extends RuntimeException { private BaseErrorCode code; - public ErrorReasonDTO getErrorReason() { + public ErrorReasonDto getErrorReason() { return this.code.getReason(); } - public ErrorReasonDTO getErrorReasonHttpStatus(){ + public ErrorReasonDto getErrorReasonHttpStatus(){ return this.code.getReasonHttpStatus(); } } diff --git a/src/main/java/com/example/ReviewZIP/global/response/exception/handler/FollowsHandler.java b/src/main/java/com/example/ReviewZIP/global/response/exception/handler/FollowsHandler.java new file mode 100644 index 00000000..93c5b16a --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/global/response/exception/handler/FollowsHandler.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.global.response.exception.handler; + +import com.example.ReviewZIP.global.response.code.BaseErrorCode; +import com.example.ReviewZIP.global.response.exception.GeneralException; + +public class FollowsHandler extends GeneralException { + public FollowsHandler(BaseErrorCode errorCode) {super(errorCode);} +} From 4d50602c49bec8239ba609e81ea82f1075f79cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Fri, 19 Jan 2024 00:17:17 +0900 Subject: [PATCH 18/37] =?UTF-8?q?chore=20:=20dto=20class=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/response/code/ReasonDTO.java | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/global/response/code/ReasonDTO.java diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/ReasonDTO.java b/src/main/java/com/example/ReviewZIP/global/response/code/ReasonDTO.java deleted file mode 100644 index d50c7c4c..00000000 --- a/src/main/java/com/example/ReviewZIP/global/response/code/ReasonDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.ReviewZIP.global.response.code; - -import lombok.Builder; -import lombok.Getter; -import org.springframework.http.HttpStatus; - -@Getter -@Builder -public class ReasonDTO { - - private HttpStatus httpStatus; - - private final boolean isSuccess; - private final String code; - private final String message; - - public boolean getIsSuccess(){return isSuccess;} -} \ No newline at end of file From cac010dc62ce09cf43899cfa48dac108778eab60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Fri, 19 Jan 2024 20:08:44 +0900 Subject: [PATCH 19/37] =?UTF-8?q?chore=20:=20=EC=9E=91=EC=9D=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/ReviewZIP/domain/user/UsersController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index 060883c8..633e535f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -15,6 +15,6 @@ public class UsersController { @DeleteMapping("/{userId}") public ApiResponse deleteUser(@PathVariable(name = "userId")Long userId) { - return ApiResponse.onFailure("USER410", "유저 삭제에 실패하였습니다.", null); + return ApiResponse.onSuccess(null); } } From 2fa63c169df1345f4facb66eebd16ac1a602e901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Fri, 19 Jan 2024 20:10:32 +0900 Subject: [PATCH 20/37] =?UTF-8?q?chore=20:=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/ReviewZIP/domain/user/UsersService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index ba79337a..963dc646 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -58,6 +58,5 @@ public void deleteUser(Long userId){ } catch (Exception e){ throw new UsersHandler(ErrorStatus.USER_DELETE_FAIL); } - // 추후 응답으로 반환 예정 } } From c0577a40d929c6ced15d433fc2b202591c3191dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Fri, 19 Jan 2024 20:22:11 +0900 Subject: [PATCH 21/37] =?UTF-8?q?refactor=20:=20ApiResponse=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/follow/FollowsController.java | 8 ++++---- .../ReviewZIP/domain/follow/FollowsRepository.java | 2 +- .../ReviewZIP/domain/follow/FollowsService.java | 9 +++++---- .../domain/follow/dto/request/UnfollowReqDto.java | 8 -------- .../domain/follow/dto/response/UnfollowResDto.java | 14 -------------- 5 files changed, 10 insertions(+), 31 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/request/UnfollowReqDto.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/response/UnfollowResDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java index f0754c78..f93b903d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -1,8 +1,7 @@ package com.example.ReviewZIP.domain.follow; -import com.example.ReviewZIP.domain.follow.dto.response.UnfollowResDto; +import com.example.ReviewZIP.global.response.ApiResponse; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -14,8 +13,9 @@ public class FollowsController { private final FollowsService followsService; @DeleteMapping("/users/{userId}") - public void unfollowUser(@PathVariable(name="userId")Long userId){ + public ApiResponse unfollowUser(@PathVariable(name="userId")Long userId){ followsService.unfollowUser(userId); - //추후에 ApiResponse 보낼 예정 + + return ApiResponse.onSuccess(null); } } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java index 136d1671..a22370fa 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java @@ -7,5 +7,5 @@ @Repository public interface FollowsRepository extends JpaRepository { - public Optional findBySenderIdAndReceiverId(Long senderId, Long receiverId); + Follows getBySenderIdAndReceiverId(Long senderId, Long receiverId); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java index 9e8fbc67..f8bdb60c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java @@ -2,6 +2,8 @@ import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.domain.user.UsersRepository; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -14,11 +16,10 @@ public class FollowsService { private final UsersRepository usersRepository; @Transactional public void unfollowUser(Long userId){ - Users sender = usersRepository.findById(1L).orElseThrow(()->new IllegalArgumentException("not found sender")); - Users receiver = usersRepository.findById(userId).orElseThrow(()->new IllegalArgumentException("not found receiver")); + Users sender = usersRepository.findById(1L).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); + Users receiver = usersRepository.findById(userId).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); - Follows unfollow = followsRepository.findBySenderIdAndReceiverId(1L, receiver.getId()) - .orElseThrow(()->new IllegalArgumentException("NOT FOUND FOLLOWS TABLE")); + Follows unfollow = followsRepository.getBySenderIdAndReceiverId(1L, receiver.getId()); followsRepository.delete(unfollow); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/UnfollowReqDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/UnfollowReqDto.java deleted file mode 100644 index 03141ea8..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/UnfollowReqDto.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.ReviewZIP.domain.follow.dto.request; - -import lombok.Getter; - -@Getter -public class UnfollowReqDto { - private Long userId; -} diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/UnfollowResDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/UnfollowResDto.java deleted file mode 100644 index fa536ad2..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/UnfollowResDto.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.ReviewZIP.domain.follow.dto.response; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Builder -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class UnfollowResDto { - private Long followId; -} From 06a20d65a2df51feee173b21caef28a5c1ff13d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sat, 20 Jan 2024 16:39:02 +0900 Subject: [PATCH 22/37] =?UTF-8?q?fix=20:=20annoctation=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/ReviewZIP/domain/user/Users.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 1c3b787a..ac66e32e 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -9,6 +9,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; import java.util.ArrayList; import java.util.List; @@ -16,6 +18,8 @@ @Entity @Getter @Setter +@Where(clause = "status = 'ENABLED'") +@SQLDelete(sql = "UPDATE reviewzip.users SET status = 'DISABLED' WHERE id = ?") @NoArgsConstructor @Table(name = "users") public class Users extends BaseEntity { From d1fd6e08f5a279848583702234dd5aaa4828648d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 10:08:28 +0900 Subject: [PATCH 23/37] =?UTF-8?q?chore=20:=20=EB=B3=80=EC=88=98=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20=EA=B0=92=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/ReviewZIP/domain/user/Users.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index ac66e32e..f17234af 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -49,6 +49,7 @@ public class Users extends BaseEntity { private String profileUrl; @Enumerated(EnumType.STRING) + @Column(columnDefinition = "VARCHAR(255) DEFAULT 'ENABLED'") private Status status; @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) From 7f6e59a89b4a35d3400b45f4c185ab65333a05a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 12:48:25 +0900 Subject: [PATCH 24/37] =?UTF-8?q?refactor=20:=20=EC=96=91=EB=B0=A9?= =?UTF-8?q?=ED=96=A5=EB=A7=A4=ED=95=91=EC=9C=BC=EB=A1=9C=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EA=B0=84=EA=B2=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/UsersController.java | 1 + .../ReviewZIP/domain/user/UsersService.java | 36 ++++++------------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index 633e535f..b0af065a 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -15,6 +15,7 @@ public class UsersController { @DeleteMapping("/{userId}") public ApiResponse deleteUser(@PathVariable(name = "userId")Long userId) { + usersService.deleteUser(userId); return ApiResponse.onSuccess(null); } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 963dc646..3e1fae7a 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -32,31 +32,17 @@ public class UsersService { public void deleteUser(Long userId){ Users user = usersRepository.findById(userId).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); - try { - postLikesRepository.deleteById(userId); - - for (Scrabs scrab : user.getScrabList()) { - scrabsRepository.delete(scrab); - } - - for (Posts post : user.getPostList()) { - for (Images image : post.getPostImageList()) { - imagesRepository.delete(image); - } - - for (PostLikes postLike : post.getPostLikeList()) { - postLikesRepository.delete(postLike); - } - - for (PostHashtags postHashtag : post.getPostHashtagList()) { - postHashtagsRepository.delete(postHashtag); - } - postsRepository.delete(post); - } - - usersRepository.deleteById(userId); - } catch (Exception e){ - throw new UsersHandler(ErrorStatus.USER_DELETE_FAIL); + postLikesRepository.deleteById(userId); + + for (Scrabs scrab : user.getScrabList()) { + scrabsRepository.delete(scrab); + } + + for (Posts post : user.getPostList()) { + postsRepository.delete(post); } + + usersRepository.deleteById(userId); + } } From 78e0cb8d038eae8315461141612cf7be08a2a250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 13:04:04 +0900 Subject: [PATCH 25/37] =?UTF-8?q?chore=20:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=EC=95=8A=EB=8A=94=20repository=EB=AC=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/ReviewZIP/domain/user/UsersService.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 3e1fae7a..898f6c0c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -1,16 +1,12 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.image.Images; import com.example.ReviewZIP.domain.image.ImagesRepository; import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.post.PostsRepository; -import com.example.ReviewZIP.domain.postHashtag.PostHashtags; import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; -import com.example.ReviewZIP.domain.postLike.PostLikes; import com.example.ReviewZIP.domain.postLike.PostLikesRepository; import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.domain.scrab.ScrabsRepository; -import com.example.ReviewZIP.global.response.code.BaseErrorCode; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; import lombok.RequiredArgsConstructor; @@ -24,9 +20,7 @@ public class UsersService { private final UsersRepository usersRepository; private final PostsRepository postsRepository; private final ScrabsRepository scrabsRepository; - private final ImagesRepository imagesRepository; private final PostLikesRepository postLikesRepository; - private final PostHashtagsRepository postHashtagsRepository; @Transactional public void deleteUser(Long userId){ From 4b2e9ad3c41e98082a0424df9fc5081162177fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 13:05:06 +0900 Subject: [PATCH 26/37] =?UTF-8?q?chore=20:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=EC=95=8A=EB=8A=94=20repository=EB=AC=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/follow/FollowsRepository.java | 8 -------- .../example/ReviewZIP/domain/image/ImagesRepository.java | 8 -------- .../domain/postHashtag/PostHashtagsRepository.java | 8 -------- .../com/example/ReviewZIP/domain/user/UsersService.java | 2 -- 4 files changed, 26 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java deleted file mode 100644 index 503f6393..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.ReviewZIP.domain.follow; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface FollowsRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java b/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java deleted file mode 100644 index c00327a0..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.ReviewZIP.domain.image; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ImagesRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java deleted file mode 100644 index b2309c10..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.ReviewZIP.domain.postHashtag; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface PostHashtagsRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 898f6c0c..5f710888 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -1,9 +1,7 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.image.ImagesRepository; import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.post.PostsRepository; -import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; import com.example.ReviewZIP.domain.postLike.PostLikesRepository; import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.domain.scrab.ScrabsRepository; From e833641a124cfa71e1255d481408da3d6ac3a3ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 15:20:30 +0900 Subject: [PATCH 27/37] =?UTF-8?q?refactor=20:=20=EB=A7=A4=ED=95=91?= =?UTF-8?q?=EC=9D=B4=EC=9A=A9=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EA=B0=84?= =?UTF-8?q?=EA=B2=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/user/UsersService.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 5f710888..34282266 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -1,9 +1,7 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.post.PostsRepository; import com.example.ReviewZIP.domain.postLike.PostLikesRepository; -import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.domain.scrab.ScrabsRepository; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; @@ -24,16 +22,6 @@ public class UsersService { public void deleteUser(Long userId){ Users user = usersRepository.findById(userId).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); - postLikesRepository.deleteById(userId); - - for (Scrabs scrab : user.getScrabList()) { - scrabsRepository.delete(scrab); - } - - for (Posts post : user.getPostList()) { - postsRepository.delete(post); - } - usersRepository.deleteById(userId); } From bcd83a0eaf5c6b783ac3531f64fef0aa83ce6209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 15:25:49 +0900 Subject: [PATCH 28/37] =?UTF-8?q?chore=20:=20repository=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/post/PostsRepository.java | 10 ---------- .../ReviewZIP/domain/postLike/PostLikesRepository.java | 8 -------- .../ReviewZIP/domain/scrab/ScrabsRepository.java | 7 ------- .../example/ReviewZIP/domain/user/UsersService.java | 6 ------ 4 files changed, 31 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java deleted file mode 100644 index ffa63768..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.ReviewZIP.domain.post; - -import com.example.ReviewZIP.domain.user.Users; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface PostsRepository extends JpaRepository { - void deleteAllByUserId(Long userId); -} diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java deleted file mode 100644 index 6c923faf..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.ReviewZIP.domain.postLike; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface PostLikesRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java b/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java deleted file mode 100644 index 4697949a..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.ReviewZIP.domain.scrab; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ScrabsRepository extends JpaRepository { - void deleteAllByUserId(Long userId); -} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 34282266..fc29c59f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -1,8 +1,5 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.post.PostsRepository; -import com.example.ReviewZIP.domain.postLike.PostLikesRepository; -import com.example.ReviewZIP.domain.scrab.ScrabsRepository; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; import lombok.RequiredArgsConstructor; @@ -14,9 +11,6 @@ @Transactional(readOnly = true) public class UsersService { private final UsersRepository usersRepository; - private final PostsRepository postsRepository; - private final ScrabsRepository scrabsRepository; - private final PostLikesRepository postLikesRepository; @Transactional public void deleteUser(Long userId){ From 684508e8cd68ffdb53d438dbe5bc382e90e23fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 00:24:18 +0900 Subject: [PATCH 29/37] =?UTF-8?q?feat=20:=20kakao=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/oauth/KakaoController.java | 70 +++++++++++++++++++ .../ReviewZIP/domain/oauth/OauthService.java | 27 +++++++ .../oauth/dto/Response/OauthResponseDto.java | 9 +++ .../oauth/dto/request/OauthRequestDto.java | 12 ++++ .../example/ReviewZIP/domain/user/Users.java | 6 +- .../domain/user/UsersRepository.java | 2 + 6 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/oauth/dto/Response/OauthResponseDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/oauth/dto/request/OauthRequestDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java b/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java new file mode 100644 index 00000000..36ba89cf --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java @@ -0,0 +1,70 @@ +package com.example.ReviewZIP.domain.oauth; + +import com.example.ReviewZIP.domain.oauth.dto.request.OauthRequestDto; +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.domain.user.UsersRepository; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + + +@RestController +@RequiredArgsConstructor +@RequestMapping("/kakao") +public class KakaoController { + + private final OauthService oauthService; + //토큰 이용해서 유저 정보 가져오기 + @GetMapping() + public Long kakaoLogin(@RequestBody OauthRequestDto.kakaoTokenRequest request) throws JsonProcessingException { + String token = request.getToken(); + + + HttpHeaders headers = new HttpHeaders(); + headers.set("Content-type", " application/x-www-form-urlencoded;charset=utf-8 "); + headers.set("Authorization", "Bearer " + token); + + HttpEntity> kakaoProfileRequest = new HttpEntity<>(headers); + + RestTemplate restTemplate = new RestTemplate(); + + ResponseEntity response = restTemplate.exchange( + "https://kapi.kako.com/v2/user/me", + HttpMethod.POST, + kakaoProfileRequest, + String.class + ); + + ObjectMapper objectMapper = new ObjectMapper(); + String responseBody = response.getBody(); + JsonNode jsonNode = objectMapper.readTree(responseBody); + Long id = jsonNode.get("id").asLong(); + String nickname = jsonNode.get("properties").get("nickname").asText(); + String email = jsonNode.get("kakao_account").get("email").asText(); + + //이제 id로 유저정보가 있는지 없는지 확인 + boolean exist = oauthService.existBySocialId(id); + + //유저가 존재할 때 + if(exist == true){ + + }else{ + // 유저가 존재하지 않을때 -> 유저 생성 + Users newUser = oauthService.createUser(id, nickname, email); + + oauthService.createUser(id,nickname, email); + } + + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java b/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java new file mode 100644 index 00000000..600496f3 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java @@ -0,0 +1,27 @@ +package com.example.ReviewZIP.domain.oauth; + +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.domain.user.UsersRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class OauthService { + private final UsersRepository usersRepository; + public boolean existBySocialId(Long id){ + return usersRepository.existsByUser_id(id); + } + + public Users createUser(Long id, String nickname, String email){ + Users newUser = Users.builder() + .user_id(id) + .nickname(nickname) + .name(nickname) + .email(email) + .build(); + return usersRepository.save(newUser); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/dto/Response/OauthResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/oauth/dto/Response/OauthResponseDto.java new file mode 100644 index 00000000..945907a7 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/dto/Response/OauthResponseDto.java @@ -0,0 +1,9 @@ +package com.example.ReviewZIP.domain.oauth.dto.Response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; + + +public class OauthResponseDto { + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/dto/request/OauthRequestDto.java b/src/main/java/com/example/ReviewZIP/domain/oauth/dto/request/OauthRequestDto.java new file mode 100644 index 00000000..0a121d8d --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/dto/request/OauthRequestDto.java @@ -0,0 +1,12 @@ +package com.example.ReviewZIP.domain.oauth.dto.request; + +import lombok.Getter; + + +public class OauthRequestDto { + + @Getter + public static class kakaoTokenRequest{ + String token; + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 1c3b787a..e9c20a02 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -6,9 +6,7 @@ import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import java.util.ArrayList; import java.util.List; @@ -16,6 +14,8 @@ @Entity @Getter @Setter +@Builder +@AllArgsConstructor @NoArgsConstructor @Table(name = "users") public class Users extends BaseEntity { diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java index 1a9aa7e5..92a6f4d8 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -10,4 +10,6 @@ public interface UsersRepository extends JpaRepository { Page findByName(String name, Pageable pageable); Page findByNickname(String nickname, Pageable pageable); + + boolean existsByUser_id(Long id); } From 6fa88a306e46e4b8a74fc0a82c9b2e4849f22046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 00:58:17 +0900 Subject: [PATCH 30/37] =?UTF-8?q?refactor:=20=EC=B6=A9=EB=8F=8C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20=EB=B0=8F=20swagger=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/follow/FollowsController.java | 14 ++++++++++++++ .../ReviewZIP/domain/follow/FollowsRepositoy.java | 2 +- .../ReviewZIP/domain/follow/FollowsService.java | 8 +------- .../follow/dto/request/FollowRequestDto.java | 8 -------- .../ReviewZIP/domain/post/PostsController.java | 2 +- .../ReviewZIP/domain/user/UsersController.java | 4 ---- .../response/code/resultCode/ErrorStatus.java | 7 +++---- 7 files changed, 20 insertions(+), 25 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java index 3076ebe8..deca9a1e 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -2,6 +2,12 @@ import com.example.ReviewZIP.domain.follow.dto.response.FollowResponseDto; import com.example.ReviewZIP.global.response.ApiResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -16,6 +22,14 @@ public class FollowsController { private final FollowsService followsService; @PostMapping("/users/{userId}") + @Operation(summary = "유저 팔로우 하기 API",description = "유저의 id를 받아 해당 유저 팔로우, FollowerPreviewDto와 FollowerPreviewListDto 이용") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "팔로우 할 유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) + @Parameters({ + @Parameter(name = "userId", description = "팔로우할 유저의 아이디"), + }) public ApiResponse follow(@PathVariable(name="userId") Long userId){ Follows follows = followsService.createFollowing(userId); diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java index 7e03693a..b990096d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java @@ -6,5 +6,5 @@ @Repository public interface FollowsRepositoy extends JpaRepository { - boolean existsBySenderAndReceiver(Users sender, Users receiver); } + diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java index e295298d..db044d60 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java @@ -20,15 +20,9 @@ public class FollowsService { @Transactional public Follows createFollowing(Long userId){ - Users sender = usersRepository.findById(1L).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); + Users sender = usersRepository.getById(1L); Users receiver = usersRepository.findById(userId).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); - // 팔로우가 이미 존재하는지 존재확인 - boolean existsCheck = followsRepositoy.existsBySenderAndReceiver(sender, receiver); - if(existsCheck){ - throw new FollowsHandler(ErrorStatus.FOLLOW_ALREADY_EXISTS); - } - Follows newFollow = FollowsConverter.toFollows(sender, receiver); return followsRepositoy.save(newFollow); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java deleted file mode 100644 index 70ca1707..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/request/FollowRequestDto.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.ReviewZIP.domain.follow.dto.request; - -import lombok.Getter; - -@Getter -public class FollowRequestDto { - private Long senderId; -} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java index 4ecc6021..4241b5a5 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java @@ -38,7 +38,7 @@ public class PostsController { @Operation(summary = "특정 게시글의 정보 가져오기 API",description = "게시글의 id를 이용하여 상세정보 출력, UserInfoDto & ImageListDto & PostInfoDto 이용") @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POST401", description = "해당 게시물이 존재하지 않음",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POST401", description = "해당 게시물이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), }) @Parameters({ @Parameter(name = "postId", description = "게시글의 아이디"), diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index f9e2e978..d1cb0cc5 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -60,7 +60,6 @@ public ApiResponse searchUsersByNickname(@Re @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER406", description = "팔로잉 목록이 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), }) @Parameters({ @Parameter(name = "userId", description = "유저의 아이디"), @@ -79,7 +78,6 @@ public ApiResponse getOtherFollowingL @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POST405", description = "팔로워 목록이 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), }) @Parameters({ @Parameter(name = "userId", description = "유저의 아이디"), @@ -99,7 +97,6 @@ public ApiResponse getOtherFollowerLis @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POST406", description = "게시글 목록이 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), }) @Parameters({ @Parameter(name = "userId", description = "유저의 아이디"), @@ -124,7 +121,6 @@ public ApiResponse getOtherPostList(@PathVar @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POST406", description = "게시글 목록이 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), }) @Parameters({ @Parameter(name = "userId", description = "유저의 아이디"), diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java index 9fc80d77..ca5a1eb3 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java +++ b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java @@ -48,11 +48,10 @@ public enum ErrorStatus implements BaseErrorCode { // Image IMAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "IMAGE401", "파일이 존재하지 않습니다."), - IMAGE_UPLOAD_FAIL(HttpStatus.BAD_REQUEST, "IMAGE402", "이미지 업로드에 실패하였습니다."); + IMAGE_UPLOAD_FAIL(HttpStatus.BAD_REQUEST, "IMAGE402", "이미지 업로드에 실패하였습니다."), - - //Follow - FOLLOW_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "FOLLOW401", "이미 팔로우한 상태입니다."); + // Follow + FOLLOW_ALREADY(HttpStatus.BAD_REQUEST, "FOLLOW401", "이미 팔로우한 상태입니다."); private final HttpStatus httpStatus; private final String code; From ee28dc91e0f2321a6924e26bdecbbfbe860666ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 01:15:02 +0900 Subject: [PATCH 31/37] =?UTF-8?q?refactor:=20=EC=B6=A9=EB=8F=8C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20=EB=B0=8F=20swagger=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/follow/FollowsController.java | 19 +++++++++++-------- .../domain/follow/FollowsConverter.java | 6 ------ .../domain/follow/FollowsRepository.java | 2 +- .../domain/follow/FollowsRepositoy.java | 10 ---------- .../domain/follow/FollowsService.java | 7 +++---- .../dto/response/FollowResponseDto.java | 19 ------------------- 6 files changed, 15 insertions(+), 48 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java index bd9b4b30..f96dfa71 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsController.java @@ -1,6 +1,5 @@ package com.example.ReviewZIP.domain.follow; -import com.example.ReviewZIP.domain.follow.dto.response.FollowResponseDto; import com.example.ReviewZIP.global.response.ApiResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -9,13 +8,9 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponses; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import com.example.ReviewZIP.global.response.ApiResponse; -import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -26,7 +21,7 @@ public class FollowsController { private final FollowsService followsService; @PostMapping("/users/{userId}") - @Operation(summary = "유저 팔로우 하기 API",description = "유저의 id를 받아 해당 유저 팔로우, FollowerPreviewDto와 FollowerPreviewListDto 이용") + @Operation(summary = "유저 팔로우 하기 API",description = "유저의 id를 받아 해당 유저 팔로우") @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "팔로우 할 유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), @@ -34,13 +29,21 @@ public class FollowsController { @Parameters({ @Parameter(name = "userId", description = "팔로우할 유저의 아이디"), }) - public ApiResponse follow(@PathVariable(name="userId") Long userId) { + public ApiResponse follow(@PathVariable(name="userId") Long userId) { Follows follows = followsService.createFollowing(userId); - return ApiResponse.onSuccess(FollowsConverter.toCreateFollowDto(follows)); + return ApiResponse.onSuccess(null); } @DeleteMapping("/users/{userId}") + @Operation(summary = " 유저 언팔로우 하기 API",description = "유저의 id를 받아 해당 유저 언팔로우") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "언팔로우 할 유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) + @Parameters({ + @Parameter(name = "userId", description = "팔로우 취소할 유저의 아이디"), + }) public ApiResponse unfollowUser(@PathVariable(name="userId")Long userId){ followsService.unfollowUser(userId); diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java index ca74e2b5..f4729a91 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsConverter.java @@ -1,6 +1,5 @@ package com.example.ReviewZIP.domain.follow; -import com.example.ReviewZIP.domain.follow.dto.response.FollowResponseDto; import com.example.ReviewZIP.domain.user.Users; public class FollowsConverter { @@ -11,9 +10,4 @@ public static Follows toFollows(Users sender, Users receiver){ .build(); } - public static FollowResponseDto.toCreateFollowDto toCreateFollowDto(Follows follow){ - return FollowResponseDto.toCreateFollowDto.builder() - .followId(follow.getId()) - .build(); - } } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java index b078ad55..0dd44594 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java @@ -12,5 +12,5 @@ public interface FollowsRepository extends JpaRepository { Page findAllBySender(Users sender, PageRequest pageRequest); Page findAllByReceiver(Users user, PageRequest pageRequest); - Follows getBySenderIdAndReceiverId(Long senderId, Long receiverId); + Follows getBySenderAndReceiver(Users sender, Users receiver); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java deleted file mode 100644 index b990096d..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepositoy.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.ReviewZIP.domain.follow; - -import com.example.ReviewZIP.domain.user.Users; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface FollowsRepositoy extends JpaRepository { -} - diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java index 9a214e6c..22fe2ae9 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsService.java @@ -4,7 +4,6 @@ import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.domain.user.UsersRepository; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; -import com.example.ReviewZIP.global.response.exception.handler.FollowsHandler; import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -14,7 +13,7 @@ @RequiredArgsConstructor @Transactional(readOnly = true) public class FollowsService { - private final FollowsRepositoy followsRepositoy; + private final FollowsRepository followsRepository; private final UsersRepository usersRepository; @@ -24,7 +23,7 @@ public Follows createFollowing(Long userId) { Users receiver = usersRepository.findById(userId).orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND)); Follows newFollow = FollowsConverter.toFollows(sender, receiver); - return followsRepositoy.save(newFollow); + return followsRepository.save(newFollow); } @Transactional @@ -32,7 +31,7 @@ public void unfollowUser(Long userId){ Users sender = usersRepository.findById(1L).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); Users receiver = usersRepository.findById(userId).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); - Follows unfollow = followsRepository.getBySenderIdAndReceiverId(1L, receiver.getId()); + Follows unfollow = followsRepository.getBySenderAndReceiver(sender, receiver); followsRepository.delete(unfollow); } diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java deleted file mode 100644 index 1e6ccb05..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/follow/dto/response/FollowResponseDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.ReviewZIP.domain.follow.dto.response; - - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -public class FollowResponseDto { - - @Builder - @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class toCreateFollowDto{ - private Long followId; - } - -} From 1c34cd9db423b9db8abaef73b5f35208d436cc9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 01:35:01 +0900 Subject: [PATCH 32/37] =?UTF-8?q?refactor:=20=EC=B6=A9=EB=8F=8C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20=EB=B0=8F=20swagger=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/UsersController.java | 35 +++++++++---------- .../ReviewZIP/domain/user/UsersService.java | 3 ++ .../user/dto/request/UsersRequestDto.java | 4 --- .../user/dto/response/UserResponseDto.java | 2 -- .../user/dto/response/UsersResponseDto.java | 4 --- 5 files changed, 19 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/request/UsersRequestDto.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/response/UsersResponseDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index 725eea16..6284e640 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -1,7 +1,13 @@ package com.example.ReviewZIP.domain.user; +import com.example.ReviewZIP.domain.follow.Follows; +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.scrab.Scrabs; +import com.example.ReviewZIP.domain.user.dto.response.FollowResponseDto; import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; import com.example.ReviewZIP.global.response.ApiResponse; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.PostsHandler; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; @@ -10,23 +16,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import com.example.ReviewZIP.domain.follow.Follows; -import com.example.ReviewZIP.domain.post.Posts; -import com.example.ReviewZIP.domain.scrab.Scrabs; -import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; -import com.example.ReviewZIP.global.response.exception.handler.PostsHandler; import org.springframework.web.bind.annotation.*; -import com.example.ReviewZIP.domain.user.dto.response.FollowResponseDto; -import com.example.ReviewZIP.global.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor @@ -136,13 +126,20 @@ public ApiResponse getOtherPostList(@PathVar public ApiResponse getOtherScrabList(@PathVariable(name = "userId") Long userId, @RequestParam(name = "page")Integer page, @RequestParam(name = "size") Integer size) { Page UserPage = usersService.getOtherScrabList(userId, page, size); - if (UserPage.isEmpty()) { - throw new PostsHandler(ErrorStatus.SCRAB_LIST_NOT_FOUND); - } return ApiResponse.onSuccess(UsersConverter.toScrabPreviewListDto(UserPage)); } + // 유저 삭제하기 @DeleteMapping("/{userId}") + @Operation(summary = "유저 삭제하기 API",description = "유저를 삭제") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + }) + @Parameters({ + @Parameter(name = "userId", description = "유저의 아이디"), + @Parameter(name = "page", description = "페이지 번호"), + @Parameter(name = "size", description = "페이징 사이즈") + }) public ApiResponse deleteUser(@PathVariable(name = "userId")Long userId) { usersService.deleteUser(userId); return ApiResponse.onSuccess(null); diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 26227fba..d1f5d8a7 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -9,6 +9,9 @@ import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/UsersRequestDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/UsersRequestDto.java deleted file mode 100644 index a246450b..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/UsersRequestDto.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.ReviewZIP.domain.user.dto.request; - -public class UsersRequestDto { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java index 3da61457..54aa70df 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java @@ -1,7 +1,5 @@ package com.example.ReviewZIP.domain.user.dto.response; - -import com.example.ReviewZIP.domain.postHashtag.PostHashtags; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UsersResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UsersResponseDto.java deleted file mode 100644 index 18cc8875..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UsersResponseDto.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.ReviewZIP.domain.user.dto.response; - -public class UsersResponseDto { -} From 05e8ff1fc150a3ab801b1ff03125280eef52ef3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= <119154537+hsuush@users.noreply.github.com> Date: Mon, 29 Jan 2024 01:42:05 +0900 Subject: [PATCH 33/37] =?UTF-8?q?feat=20:=20=EC=9C=A0=EC=A0=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/ReviewZIP/domain/user/UsersService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index d1f5d8a7..3f8e5e8f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -104,6 +104,7 @@ public Page getOtherScrabList(Long userId, Integer page, Integer size){ return UserPage; } + // 해당 유저가 맞는지에 대한 검증 필요, 원래 1L 필요하나 일단 데이터베이스 확인을 위하여 다음과 같이 진행 @Transactional public void deleteUser(Long userId){ Users user = usersRepository.findById(userId).orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); From 708647d2f7b6a6c02151c62cb503a34c4e600d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 15:06:03 +0900 Subject: [PATCH 34/37] =?UTF-8?q?feat=20:=20kakao=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../ReviewZIP/domain/jwt/JwtProperties.java | 20 +++++ .../ReviewZIP/domain/jwt/TokenProvider.java | 54 +++++++++++++ .../domain/oauth/KakaoController.java | 64 +++++----------- .../ReviewZIP/domain/oauth/OauthService.java | 75 +++++++++++++++++-- .../ReviewZIP/domain/post/PostsService.java | 2 + .../example/ReviewZIP/domain/user/Users.java | 3 +- .../domain/user/UsersRepository.java | 4 +- 8 files changed, 171 insertions(+), 52 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/domain/jwt/JwtProperties.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/jwt/TokenProvider.java diff --git a/build.gradle b/build.gradle index 72bda1e5..3211b39d 100644 --- a/build.gradle +++ b/build.gradle @@ -44,6 +44,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' implementation 'io.jsonwebtoken:jjwt:0.9.1' // 자바 jwt 라이브러리 implementation 'io.jsonwebtoken:jjwt-api:0.11.2' + annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" implementation 'javax.xml.bind:jaxb-api:2.3.1' // XML 문서와 Java 객체 간 매핑을 자동화 implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' // aws s3 diff --git a/src/main/java/com/example/ReviewZIP/domain/jwt/JwtProperties.java b/src/main/java/com/example/ReviewZIP/domain/jwt/JwtProperties.java new file mode 100644 index 00000000..72723b6a --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/jwt/JwtProperties.java @@ -0,0 +1,20 @@ +package com.example.ReviewZIP.domain.jwt; + +import lombok.Getter; +import lombok.Setter; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Getter +@Setter +@Component +@ConfigurationProperties("jwt") +public class JwtProperties { + @Value("${jwt.issuer}") + private String issuer; + + @Value("${jwt.secretKey}") + private String secretKey; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/jwt/TokenProvider.java b/src/main/java/com/example/ReviewZIP/domain/jwt/TokenProvider.java new file mode 100644 index 00000000..816f0512 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/jwt/TokenProvider.java @@ -0,0 +1,54 @@ +package com.example.ReviewZIP.domain.jwt; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Header; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@RequiredArgsConstructor +@Service +public class TokenProvider { + private final JwtProperties jwtProperties; + + public String makeToken(Long userId){ + Date now = new Date(); + Date exp = new Date(now.getTime() + 3600000); //1시간 만료 기준 + Claims claims = Jwts.claims(); + claims.put("userid", userId); + + return Jwts.builder() + .setHeaderParam(Header.TYPE, Header.JWT_TYPE) + .setIssuer(jwtProperties.getIssuer()) + .setIssuedAt(now) + .setExpiration(exp) + .setClaims(claims) + //.setSubject(userId.toString()) + .signWith(SignatureAlgorithm.HS256, jwtProperties.getSecretKey()) + .compact(); + } + + public Long getUserId(String token){ + Claims claims = Jwts.parser() + .setSigningKey(jwtProperties.getSecretKey()) + .parseClaimsJws(token) + .getBody(); + return claims.get("userId", Long.class); + } + + public boolean validToken(String token){ + try{ + Jwts.parser() + .setSigningKey(jwtProperties.getSecretKey()) + .parseClaimsJws(token); + return true; + } catch(Exception e){ + return false; + } + } + + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java b/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java index 36ba89cf..907fe81d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java @@ -1,70 +1,46 @@ package com.example.ReviewZIP.domain.oauth; +import com.example.ReviewZIP.domain.jwt.TokenProvider; import com.example.ReviewZIP.domain.oauth.dto.request.OauthRequestDto; -import com.example.ReviewZIP.domain.user.Users; -import com.example.ReviewZIP.domain.user.UsersRepository; +import com.example.ReviewZIP.global.response.ApiResponse; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.client.RestTemplate; + +import java.util.List; +import java.util.Map; @RestController @RequiredArgsConstructor -@RequestMapping("/kakao") +@RequestMapping("/oauth") public class KakaoController { private final OauthService oauthService; - //토큰 이용해서 유저 정보 가져오기 - @GetMapping() - public Long kakaoLogin(@RequestBody OauthRequestDto.kakaoTokenRequest request) throws JsonProcessingException { - String token = request.getToken(); - - - HttpHeaders headers = new HttpHeaders(); - headers.set("Content-type", " application/x-www-form-urlencoded;charset=utf-8 "); - headers.set("Authorization", "Bearer " + token); + private final TokenProvider tokenProvider; - HttpEntity> kakaoProfileRequest = new HttpEntity<>(headers); + // 유저 관련 token 받은 후 해당 정보로 accessToken 발급 + @GetMapping("/kakao/token") + public ApiResponse> create(@RequestBody OauthRequestDto.kakaoTokenRequest request) throws JsonProcessingException { - RestTemplate restTemplate = new RestTemplate(); + List kakaoUserInfoList = oauthService.getKakaoUserInfo(request); - ResponseEntity response = restTemplate.exchange( - "https://kapi.kako.com/v2/user/me", - HttpMethod.POST, - kakaoProfileRequest, - String.class - ); + return ApiResponse.onSuccess(oauthService.generateAccessToken(kakaoUserInfoList.get(0),kakaoUserInfoList.get(1) , kakaoUserInfoList.get(2))); - ObjectMapper objectMapper = new ObjectMapper(); - String responseBody = response.getBody(); - JsonNode jsonNode = objectMapper.readTree(responseBody); - Long id = jsonNode.get("id").asLong(); - String nickname = jsonNode.get("properties").get("nickname").asText(); - String email = jsonNode.get("kakao_account").get("email").asText(); - - //이제 id로 유저정보가 있는지 없는지 확인 - boolean exist = oauthService.existBySocialId(id); + } - //유저가 존재할 때 - if(exist == true){ + @GetMapping("/token") + public Long getUserIdByToken(HttpServletRequest request){ + String header = request.getHeader("Authorization"); - }else{ - // 유저가 존재하지 않을때 -> 유저 생성 - Users newUser = oauthService.createUser(id, nickname, email); + String token = header.replace("Barer: ", ""); - oauthService.createUser(id,nickname, email); - } + Long userId = tokenProvider.getUserId(token); + return userId; } } diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java b/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java index 600496f3..6ecb459e 100644 --- a/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java @@ -1,27 +1,92 @@ package com.example.ReviewZIP.domain.oauth; +import com.example.ReviewZIP.domain.jwt.TokenProvider; +import com.example.ReviewZIP.domain.oauth.dto.request.OauthRequestDto; import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.domain.user.UsersRepository; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.client.RestTemplate; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class OauthService { private final UsersRepository usersRepository; - public boolean existBySocialId(Long id){ - return usersRepository.existsByUser_id(id); - } + private final TokenProvider tokenProvider; - public Users createUser(Long id, String nickname, String email){ + public Users createUser(String id, String nickname, String email){ Users newUser = Users.builder() - .user_id(id) + .social(id) .nickname(nickname) .name(nickname) .email(email) .build(); + return usersRepository.save(newUser); } + + public Map generateAccessToken(String id, String nickname, String email){ + boolean exist = usersRepository.existsBySocial(id); + + // 유저가 존재하지 않을때 -> 유저 생성 + if(!exist) { + Users newUser = createUser(id, nickname, email); + } + + // 생성된 유저의 id값을 이용하여 token화 + Long userId = usersRepository.getBySocial(id).getId(); + + String accessToken = tokenProvider.makeToken(userId); + + Map map = new LinkedHashMap<>(); + map.put("accessToken", accessToken); + + return map; + } + + public List getKakaoUserInfo(OauthRequestDto.kakaoTokenRequest request) throws JsonProcessingException { + String token = request.getToken(); + + HttpHeaders headers = new HttpHeaders(); + headers.set("Content-type", " application/x-www-form-urlencoded;charset=utf-8 "); + headers.set("Authorization", "Bearer " + token); + + HttpEntity> kakaoProfileRequest = new HttpEntity<>(headers); + + RestTemplate restTemplate = new RestTemplate(); + + ResponseEntity response = restTemplate.exchange( + "https://kapi.kako.com/v2/user/me", + HttpMethod.POST, + kakaoProfileRequest, + String.class + ); + + ObjectMapper objectMapper = new ObjectMapper(); + String responseBody = response.getBody(); + JsonNode jsonNode = objectMapper.readTree(responseBody); + String id = jsonNode.get("id").asText(); + String nickname = jsonNode.get("properties").get("nickname").asText(); + String email = jsonNode.get("kakao_account").get("email").asText(); + + List kakaoUserInfoList = Arrays.asList(id, nickname, email); + + return kakaoUserInfoList; + } } diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java index 0c330204..3e3c0af9 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java @@ -102,4 +102,6 @@ public PostResponseDto.PostInfoDto getPostInfoDto(Long postId){ return PostsConverter.toPostInfoResultDto(post, checkLike, checkScrab); } + + } \ No newline at end of file diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index e9c20a02..08d3d69d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -30,8 +30,7 @@ public class Users extends BaseEntity { @Column(nullable = false) private String name; - @Column(nullable = false) - private String user_id; + private String social; @Column(nullable = false) private String password; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java index 92a6f4d8..6b5d8a6b 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -11,5 +11,7 @@ public interface UsersRepository extends JpaRepository { Page findByName(String name, Pageable pageable); Page findByNickname(String nickname, Pageable pageable); - boolean existsByUser_id(Long id); + boolean existsBySocial(String id); + + Users getBySocial(String userId); } From 21c3d7c23f0b94e2e5920af3d5d96450cd8c6d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= <119154537+hsuush@users.noreply.github.com> Date: Mon, 29 Jan 2024 16:16:52 +0900 Subject: [PATCH 35/37] Update Users MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nullable 삭제 및 social column 수정 --- src/main/java/com/example/ReviewZIP/domain/user/Users.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 5a544674..e2d9750f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -34,13 +34,10 @@ public class Users extends BaseEntity { @Column(nullable = false) private String name; - @Column(nullable = false) - private String user_id; + private String social; - @Column(nullable = false) private String password; - @Column(nullable = false) private String phone_num; @Column(nullable = false) @@ -49,7 +46,6 @@ public class Users extends BaseEntity { private String profileUrl; @Enumerated(EnumType.STRING) - @Column(columnDefinition = "VARCHAR(255) DEFAULT 'ENABLED'") private Status status; @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) From 33a5e4a9f3122d2a7c7d1c86e7d480b7be44d39b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 16:35:13 +0900 Subject: [PATCH 36/37] =?UTF-8?q?feat=20:=20kakao=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config | 2 +- .../domain/oauth/KakaoController.java | 25 +++------------- .../ReviewZIP/domain/oauth/OauthService.java | 30 +++++++++---------- .../example/ReviewZIP/domain/user/Users.java | 2 -- 4 files changed, 20 insertions(+), 39 deletions(-) diff --git a/config b/config index 80f8e462..d8e0093e 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 80f8e4625eeb7370198551642b111a3eca7e6b84 +Subproject commit d8e0093ed7c949c75286aa6ad1486698ec240eff diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java b/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java index 907fe81d..7ecfee96 100644 --- a/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/KakaoController.java @@ -4,43 +4,26 @@ import com.example.ReviewZIP.domain.oauth.dto.request.OauthRequestDto; import com.example.ReviewZIP.global.response.ApiResponse; import com.fasterxml.jackson.core.JsonProcessingException; -import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; - @RestController @RequiredArgsConstructor -@RequestMapping("/oauth") +@RequestMapping("/v1/oauth") public class KakaoController { private final OauthService oauthService; - private final TokenProvider tokenProvider; // 유저 관련 token 받은 후 해당 정보로 accessToken 발급 - @GetMapping("/kakao/token") - public ApiResponse> create(@RequestBody OauthRequestDto.kakaoTokenRequest request) throws JsonProcessingException { + @PostMapping("/kakao") + public ApiResponse> sendAccessToken(@RequestBody OauthRequestDto.kakaoTokenRequest request) throws JsonProcessingException { List kakaoUserInfoList = oauthService.getKakaoUserInfo(request); return ApiResponse.onSuccess(oauthService.generateAccessToken(kakaoUserInfoList.get(0),kakaoUserInfoList.get(1) , kakaoUserInfoList.get(2))); } - - @GetMapping("/token") - public Long getUserIdByToken(HttpServletRequest request){ - String header = request.getHeader("Authorization"); - - String token = header.replace("Barer: ", ""); - - Long userId = tokenProvider.getUserId(token); - - return userId; - } } diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java b/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java index 6ecb459e..f5ec4f74 100644 --- a/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java @@ -15,13 +15,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.client.RestTemplate; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Service @RequiredArgsConstructor @@ -30,28 +26,32 @@ public class OauthService { private final UsersRepository usersRepository; private final TokenProvider tokenProvider; - public Users createUser(String id, String nickname, String email){ + @Transactional + public Long createUser(String id, String nickname, String email){ Users newUser = Users.builder() .social(id) .nickname(nickname) .name(nickname) .email(email) .build(); + usersRepository.save(newUser); - return usersRepository.save(newUser); + return newUser.getId(); } + @Transactional public Map generateAccessToken(String id, String nickname, String email){ boolean exist = usersRepository.existsBySocial(id); + Long userId; - // 유저가 존재하지 않을때 -> 유저 생성 if(!exist) { - Users newUser = createUser(id, nickname, email); + // 유저가 존재하지 않을때 -> 유저 생성 + userId = createUser(id, nickname, email); + } else { + // 존재할 경우 해당 유저의 userId 반환 + userId = usersRepository.getBySocial(id).getId(); } - // 생성된 유저의 id값을 이용하여 token화 - Long userId = usersRepository.getBySocial(id).getId(); - String accessToken = tokenProvider.makeToken(userId); Map map = new LinkedHashMap<>(); @@ -64,15 +64,15 @@ public List getKakaoUserInfo(OauthRequestDto.kakaoTokenRequest request) String token = request.getToken(); HttpHeaders headers = new HttpHeaders(); - headers.set("Content-type", " application/x-www-form-urlencoded;charset=utf-8 "); + headers.set("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); headers.set("Authorization", "Bearer " + token); - HttpEntity> kakaoProfileRequest = new HttpEntity<>(headers); + HttpEntity> kakaoProfileRequest = new HttpEntity<>(null, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity response = restTemplate.exchange( - "https://kapi.kako.com/v2/user/me", + "https://kapi.kakao.com/v2/user/me", HttpMethod.POST, kakaoProfileRequest, String.class diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 08d3d69d..a286bb6c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -32,10 +32,8 @@ public class Users extends BaseEntity { private String social; - @Column(nullable = false) private String password; - @Column(nullable = false) private String phone_num; @Column(nullable = false) From 8c5e9ba064ba590f2f16fb27cbde57a5ababca2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 16:39:58 +0900 Subject: [PATCH 37/37] =?UTF-8?q?chore=20:=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/ReviewZIP/domain/user/Users.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index cb3f6c62..0265fde0 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -6,9 +6,7 @@ import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; @@ -18,6 +16,8 @@ @Entity @Getter @Setter +@Builder +@AllArgsConstructor @Where(clause = "status = 'ENABLED'") @SQLDelete(sql = "UPDATE reviewzip.users SET status = 'DISABLED' WHERE id = ?") @NoArgsConstructor