From f977d89b5e8ffa87fba8cc4d30518691cb6fe501 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Thu, 2 Nov 2023 14:35:26 +0900 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20ClubPray=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20+a)=20=EC=97=B0=EA=B4=80=20=EA=B4=80?= =?UTF-8?q?=EA=B3=84=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/uspray/uspray/domain/Club.java | 28 ++++++++++ .../com/uspray/uspray/domain/ClubPray.java | 53 +++++++++++++++++++ .../java/com/uspray/uspray/domain/Member.java | 5 ++ 3 files changed, 86 insertions(+) create mode 100644 src/main/java/com/uspray/uspray/domain/Club.java create mode 100644 src/main/java/com/uspray/uspray/domain/ClubPray.java diff --git a/src/main/java/com/uspray/uspray/domain/Club.java b/src/main/java/com/uspray/uspray/domain/Club.java new file mode 100644 index 00000000..350aa229 --- /dev/null +++ b/src/main/java/com/uspray/uspray/domain/Club.java @@ -0,0 +1,28 @@ +package com.uspray.uspray.domain; + +import com.uspray.uspray.common.domain.AuditingTimeEntity; +import java.util.List; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Club extends AuditingTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "club_id") + private Long id; + + @OneToMany(mappedBy = "club", orphanRemoval = true) + private List clubPrayList; + +} diff --git a/src/main/java/com/uspray/uspray/domain/ClubPray.java b/src/main/java/com/uspray/uspray/domain/ClubPray.java new file mode 100644 index 00000000..8e2942cf --- /dev/null +++ b/src/main/java/com/uspray/uspray/domain/ClubPray.java @@ -0,0 +1,53 @@ +package com.uspray.uspray.domain; + +import com.uspray.uspray.common.domain.AuditingTimeEntity; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ClubPray extends AuditingTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "clubpray_id") + private Long id; + + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "club_id") + private Club club; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member author; + + @Builder + public ClubPray(String content, Club club, Member author) { + this.content = content; + setClub(club); + setAuthor(author); + } + + private void setClub(Club club) { + this.club = club; + club.getClubPrayList().add(this); + } + + private void setAuthor(Member author) { + this.author = author; + author.getClubPrayList().add(this); + } +} diff --git a/src/main/java/com/uspray/uspray/domain/Member.java b/src/main/java/com/uspray/uspray/domain/Member.java index 5163199d..5179447a 100644 --- a/src/main/java/com/uspray/uspray/domain/Member.java +++ b/src/main/java/com/uspray/uspray/domain/Member.java @@ -3,6 +3,7 @@ import com.uspray.uspray.DTO.notification.NotificationAgreeDto; import com.uspray.uspray.Enums.Authority; import com.uspray.uspray.common.domain.AuditingTimeEntity; +import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -10,6 +11,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.OneToMany; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; @@ -47,6 +49,9 @@ public class Member extends AuditingTimeEntity { @Enumerated(EnumType.STRING) private Authority authority; + @OneToMany(mappedBy = "author") + private List clubPrayList; + public void changeFirebaseToken(String firebaseToken) { this.firebaseToken = firebaseToken; From daf91f98649d8b5acb6632954e7fadb071955633 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Wed, 1 Nov 2023 11:46:19 +0900 Subject: [PATCH 02/11] =?UTF-8?q?refactor:=20init=20db=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=83=9D=EC=84=B1=20=EC=98=A4=EB=A5=98=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 --- src/main/java/com/uspray/uspray/InitDb.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/uspray/uspray/InitDb.java b/src/main/java/com/uspray/uspray/InitDb.java index 4f6a66fb..8e9d1a76 100644 --- a/src/main/java/com/uspray/uspray/InitDb.java +++ b/src/main/java/com/uspray/uspray/InitDb.java @@ -1,5 +1,6 @@ package com.uspray.uspray; +import com.uspray.uspray.Enums.Authority; import com.uspray.uspray.domain.Member; import com.uspray.uspray.domain.Pray; import java.time.LocalDate; @@ -37,6 +38,7 @@ public void dbInit() { .phone("01012345678") .birth("2002-02-01") .gender("female") + .authority(Authority.ROLE_USER) .build(); em.persist(member); @@ -44,6 +46,7 @@ public void dbInit() { .content("테스트 기도") .deadline(LocalDate.parse("2025-01-01")) .member(member) + .originPrayId(null) .build(); em.persist(pray); From 025fee750a201bb8ed84bafb58e4abd42235f05a Mon Sep 17 00:00:00 2001 From: dong2ast Date: Thu, 2 Nov 2023 14:38:34 +0900 Subject: [PATCH 03/11] =?UTF-8?q?fix:=20pray=20id=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=A0=BC=EB=9E=B5=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uspray/uspray/domain/Pray.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/uspray/uspray/domain/Pray.java b/src/main/java/com/uspray/uspray/domain/Pray.java index b77990af..6309596b 100644 --- a/src/main/java/com/uspray/uspray/domain/Pray.java +++ b/src/main/java/com/uspray/uspray/domain/Pray.java @@ -6,6 +6,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @@ -24,7 +25,7 @@ public class Pray extends AuditingTimeEntity { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "pray_id") private Long id; @ManyToOne From 4628cd69341ed85979c0ae5b74cddf041a89bb2b Mon Sep 17 00:00:00 2001 From: dong2ast Date: Thu, 2 Nov 2023 15:12:32 +0900 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20club=20pray=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/clubpray/ClubPrayRequestDto.java | 11 ++++++ .../uspray/uspray/exception/ErrorStatus.java | 1 + .../infrastructure/ClubPrayRepository.java | 8 +++++ .../uspray/infrastructure/ClubRepository.java | 16 +++++++++ .../uspray/service/ClubPrayService.java | 34 +++++++++++++++++++ 5 files changed, 70 insertions(+) create mode 100644 src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayRequestDto.java create mode 100644 src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java create mode 100644 src/main/java/com/uspray/uspray/infrastructure/ClubRepository.java create mode 100644 src/main/java/com/uspray/uspray/service/ClubPrayService.java diff --git a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayRequestDto.java b/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayRequestDto.java new file mode 100644 index 00000000..c44542ae --- /dev/null +++ b/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayRequestDto.java @@ -0,0 +1,11 @@ +package com.uspray.uspray.DTO.clubpray; + +import lombok.Data; + +@Data +public class ClubPrayRequestDto { + + private Long clubId; + private String content; + +} diff --git a/src/main/java/com/uspray/uspray/exception/ErrorStatus.java b/src/main/java/com/uspray/uspray/exception/ErrorStatus.java index 23688952..7262c976 100644 --- a/src/main/java/com/uspray/uspray/exception/ErrorStatus.java +++ b/src/main/java/com/uspray/uspray/exception/ErrorStatus.java @@ -29,6 +29,7 @@ public enum ErrorStatus { * 404 NOT FOUND */ NOT_FOUND_USER_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 유저입니다"), + NOT_FOUND_CLUB_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 모임입니다"), PRAY_NOT_FOUND_EXCEPTION(HttpStatus.NOT_FOUND, "해당 기도제목을 찾을 수 없습니다."), PRAY_ALREADY_DELETED_EXCEPTION(HttpStatus.NOT_FOUND, "원본 기도제목이 삭제되었습니다."), NOT_FOUND_SHARED_PRAY_EXCEPTION(HttpStatus.NOT_FOUND, "해당 공유기도제목을 찾을 수 없습니다."), diff --git a/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java b/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java new file mode 100644 index 00000000..3ee2e9f8 --- /dev/null +++ b/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java @@ -0,0 +1,8 @@ +package com.uspray.uspray.infrastructure; + +import com.uspray.uspray.domain.ClubPray; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ClubPrayRepository extends JpaRepository { + +} diff --git a/src/main/java/com/uspray/uspray/infrastructure/ClubRepository.java b/src/main/java/com/uspray/uspray/infrastructure/ClubRepository.java new file mode 100644 index 00000000..2279b1f2 --- /dev/null +++ b/src/main/java/com/uspray/uspray/infrastructure/ClubRepository.java @@ -0,0 +1,16 @@ +package com.uspray.uspray.infrastructure; + +import com.uspray.uspray.domain.Club; +import com.uspray.uspray.exception.ErrorStatus; +import com.uspray.uspray.exception.model.NotFoundException; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ClubRepository extends JpaRepository { + + default Club getClubById(Long id) { + return this.findById(id).orElseThrow( + () -> new NotFoundException(ErrorStatus.NOT_FOUND_CLUB_EXCEPTION, + ErrorStatus.NOT_FOUND_CLUB_EXCEPTION.getMessage())); + } + +} diff --git a/src/main/java/com/uspray/uspray/service/ClubPrayService.java b/src/main/java/com/uspray/uspray/service/ClubPrayService.java new file mode 100644 index 00000000..250217f8 --- /dev/null +++ b/src/main/java/com/uspray/uspray/service/ClubPrayService.java @@ -0,0 +1,34 @@ +package com.uspray.uspray.service; + +import com.uspray.uspray.DTO.clubpray.ClubPrayRequestDto; +import com.uspray.uspray.domain.Club; +import com.uspray.uspray.domain.ClubPray; +import com.uspray.uspray.domain.Member; +import com.uspray.uspray.infrastructure.ClubPrayRepository; +import com.uspray.uspray.infrastructure.ClubRepository; +import com.uspray.uspray.infrastructure.MemberRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class ClubPrayService { + + private final MemberRepository memberRepository; + private final ClubRepository clubRepository; + private final ClubPrayRepository clubPrayRepository; + + @Transactional + public void createClubPray(ClubPrayRequestDto clubPrayRequestDto, String userId) { + Member author = memberRepository.getMemberByUserId(userId); + Club club = clubRepository.getClubById(clubPrayRequestDto.getClubId()); + ClubPray clubPray = ClubPray.builder() + .club(club) + .author(author) + .content(clubPrayRequestDto.getContent()) + .build(); + clubPrayRepository.save(clubPray); + } + +} From 9014c66d0d031412c728ec92cd88c786561aa0ed Mon Sep 17 00:00:00 2001 From: dong2ast Date: Thu, 2 Nov 2023 15:21:29 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feat:=20club=20pray=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java | 9 +++++++++ src/main/java/com/uspray/uspray/domain/ClubPray.java | 4 ++++ .../java/com/uspray/uspray/exception/ErrorStatus.java | 1 + .../uspray/uspray/infrastructure/ClubPrayRepository.java | 8 ++++++++ .../java/com/uspray/uspray/service/ClubPrayService.java | 8 ++++++++ 5 files changed, 30 insertions(+) create mode 100644 src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java diff --git a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java b/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java new file mode 100644 index 00000000..dfeeadb0 --- /dev/null +++ b/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java @@ -0,0 +1,9 @@ +package com.uspray.uspray.DTO.clubpray; + +import lombok.Data; + +@Data +public class ClubPrayUpdateDto { + private Long clubPrayId; + private String content; +} diff --git a/src/main/java/com/uspray/uspray/domain/ClubPray.java b/src/main/java/com/uspray/uspray/domain/ClubPray.java index 8e2942cf..a6dde5a2 100644 --- a/src/main/java/com/uspray/uspray/domain/ClubPray.java +++ b/src/main/java/com/uspray/uspray/domain/ClubPray.java @@ -50,4 +50,8 @@ private void setAuthor(Member author) { this.author = author; author.getClubPrayList().add(this); } + + public void changeContent(String content) { + this.content = content; + } } diff --git a/src/main/java/com/uspray/uspray/exception/ErrorStatus.java b/src/main/java/com/uspray/uspray/exception/ErrorStatus.java index 7262c976..f0e4e240 100644 --- a/src/main/java/com/uspray/uspray/exception/ErrorStatus.java +++ b/src/main/java/com/uspray/uspray/exception/ErrorStatus.java @@ -30,6 +30,7 @@ public enum ErrorStatus { */ NOT_FOUND_USER_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 유저입니다"), NOT_FOUND_CLUB_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 모임입니다"), + NOT_FOUND_CLUB_PRAY_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 모임 기도입니다"), PRAY_NOT_FOUND_EXCEPTION(HttpStatus.NOT_FOUND, "해당 기도제목을 찾을 수 없습니다."), PRAY_ALREADY_DELETED_EXCEPTION(HttpStatus.NOT_FOUND, "원본 기도제목이 삭제되었습니다."), NOT_FOUND_SHARED_PRAY_EXCEPTION(HttpStatus.NOT_FOUND, "해당 공유기도제목을 찾을 수 없습니다."), diff --git a/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java b/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java index 3ee2e9f8..a8e70c97 100644 --- a/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java +++ b/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java @@ -1,8 +1,16 @@ package com.uspray.uspray.infrastructure; import com.uspray.uspray.domain.ClubPray; +import com.uspray.uspray.exception.ErrorStatus; +import com.uspray.uspray.exception.model.NotFoundException; import org.springframework.data.jpa.repository.JpaRepository; public interface ClubPrayRepository extends JpaRepository { + default ClubPray getClubPrayById(Long id) { + return this.findById(id).orElseThrow( + () -> new NotFoundException(ErrorStatus.NOT_FOUND_CLUB_PRAY_EXCEPTION, + ErrorStatus.NOT_FOUND_CLUB_PRAY_EXCEPTION.getMessage())); + } + } diff --git a/src/main/java/com/uspray/uspray/service/ClubPrayService.java b/src/main/java/com/uspray/uspray/service/ClubPrayService.java index 250217f8..dd1e61f7 100644 --- a/src/main/java/com/uspray/uspray/service/ClubPrayService.java +++ b/src/main/java/com/uspray/uspray/service/ClubPrayService.java @@ -1,6 +1,7 @@ package com.uspray.uspray.service; import com.uspray.uspray.DTO.clubpray.ClubPrayRequestDto; +import com.uspray.uspray.DTO.clubpray.ClubPrayUpdateDto; import com.uspray.uspray.domain.Club; import com.uspray.uspray.domain.ClubPray; import com.uspray.uspray.domain.Member; @@ -31,4 +32,11 @@ public void createClubPray(ClubPrayRequestDto clubPrayRequestDto, String userId) clubPrayRepository.save(clubPray); } + @Transactional + public void updateClubPray(ClubPrayUpdateDto clubPrayUpdateDto) { + ClubPray clubpray = clubPrayRepository.getClubPrayById( + clubPrayUpdateDto.getClubPrayId()); + clubpray.changeContent(clubPrayUpdateDto.getContent()); + } + } From e81003d0d70f4680cfdef38cbd9b188791b7059a Mon Sep 17 00:00:00 2001 From: dong2ast Date: Thu, 2 Nov 2023 15:44:41 +0900 Subject: [PATCH 06/11] =?UTF-8?q?refactor:=20pray=20QueryDSL=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20package=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{ => querydsl/pray}/PrayRepositoryCustom.java | 2 +- .../infrastructure/querydsl/{ => pray}/PrayRepositoryImpl.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) rename src/main/java/com/uspray/uspray/infrastructure/{ => querydsl/pray}/PrayRepositoryCustom.java (75%) rename src/main/java/com/uspray/uspray/infrastructure/querydsl/{ => pray}/PrayRepositoryImpl.java (86%) diff --git a/src/main/java/com/uspray/uspray/infrastructure/PrayRepositoryCustom.java b/src/main/java/com/uspray/uspray/infrastructure/querydsl/pray/PrayRepositoryCustom.java similarity index 75% rename from src/main/java/com/uspray/uspray/infrastructure/PrayRepositoryCustom.java rename to src/main/java/com/uspray/uspray/infrastructure/querydsl/pray/PrayRepositoryCustom.java index c83017ba..15013da0 100644 --- a/src/main/java/com/uspray/uspray/infrastructure/PrayRepositoryCustom.java +++ b/src/main/java/com/uspray/uspray/infrastructure/querydsl/pray/PrayRepositoryCustom.java @@ -1,4 +1,4 @@ -package com.uspray.uspray.infrastructure; +package com.uspray.uspray.infrastructure.querydsl.pray; import com.uspray.uspray.domain.Pray; import java.util.List; diff --git a/src/main/java/com/uspray/uspray/infrastructure/querydsl/PrayRepositoryImpl.java b/src/main/java/com/uspray/uspray/infrastructure/querydsl/pray/PrayRepositoryImpl.java similarity index 86% rename from src/main/java/com/uspray/uspray/infrastructure/querydsl/PrayRepositoryImpl.java rename to src/main/java/com/uspray/uspray/infrastructure/querydsl/pray/PrayRepositoryImpl.java index 3e22ef7c..246c2eec 100644 --- a/src/main/java/com/uspray/uspray/infrastructure/querydsl/PrayRepositoryImpl.java +++ b/src/main/java/com/uspray/uspray/infrastructure/querydsl/pray/PrayRepositoryImpl.java @@ -1,10 +1,9 @@ -package com.uspray.uspray.infrastructure.querydsl; +package com.uspray.uspray.infrastructure.querydsl.pray; import static com.uspray.uspray.domain.QPray.pray; import com.querydsl.jpa.impl.JPAQueryFactory; import com.uspray.uspray.domain.Pray; -import com.uspray.uspray.infrastructure.PrayRepositoryCustom; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; From 8dc2743ce2207d7471b526035c3c3123e45f1381 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Thu, 2 Nov 2023 16:42:32 +0900 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20clubpray=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/clubpray/ClubPrayResponseDto.java | 27 +++++++++++++ .../com/uspray/uspray/Enums/PrayType.java | 15 +++++++ .../java/com/uspray/uspray/domain/Pray.java | 14 ++++++- .../infrastructure/ClubPrayRepository.java | 4 +- .../uspray/infrastructure/PrayRepository.java | 1 + .../clubpray/ClubPrayRepositoryCustom.java | 12 ++++++ .../clubpray/ClubPrayRepositoryImpl.java | 39 +++++++++++++++++++ .../uspray/service/ClubPrayService.java | 18 +++++++++ 8 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayResponseDto.java create mode 100644 src/main/java/com/uspray/uspray/Enums/PrayType.java create mode 100644 src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryCustom.java create mode 100644 src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryImpl.java diff --git a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayResponseDto.java b/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayResponseDto.java new file mode 100644 index 00000000..8baf57bc --- /dev/null +++ b/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayResponseDto.java @@ -0,0 +1,27 @@ +package com.uspray.uspray.DTO.clubpray; + +import com.querydsl.core.annotations.QueryProjection; +import lombok.Data; + +@Data +public class ClubPrayResponseDto { + + private Long clubPrayId; + private String content; + private Boolean isOwner = false; + private Long authorId; + private Integer liked; + + @QueryProjection + public ClubPrayResponseDto(Long clubPrayId, String content, Long authorId, Integer liked) { + this.clubPrayId = clubPrayId; + this.content = content; + this.authorId = authorId; + this.liked = liked; + } + + public void changeOwner() { + this.isOwner = true; + } + +} diff --git a/src/main/java/com/uspray/uspray/Enums/PrayType.java b/src/main/java/com/uspray/uspray/Enums/PrayType.java new file mode 100644 index 00000000..20fe9ca6 --- /dev/null +++ b/src/main/java/com/uspray/uspray/Enums/PrayType.java @@ -0,0 +1,15 @@ +package com.uspray.uspray.Enums; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public enum PrayType { + SHARED("공유 기도"), + PERSONAL("개인 기도"), + GROUP("그룹 기도"), + ; + private final String title; +} diff --git a/src/main/java/com/uspray/uspray/domain/Pray.java b/src/main/java/com/uspray/uspray/domain/Pray.java index 6309596b..858041bd 100644 --- a/src/main/java/com/uspray/uspray/domain/Pray.java +++ b/src/main/java/com/uspray/uspray/domain/Pray.java @@ -1,10 +1,14 @@ package com.uspray.uspray.domain; import com.uspray.uspray.DTO.pray.request.PrayRequestDto; +import com.uspray.uspray.Enums.PrayType; import com.uspray.uspray.common.domain.AuditingTimeEntity; import java.time.LocalDate; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @@ -45,14 +49,22 @@ public class Pray extends AuditingTimeEntity { @Column(name = "origin_pray_id") private Long originPrayId; + @Enumerated(EnumType.STRING) + private PrayType prayType; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "clubpray_id") + private ClubPray clubPray; + @Builder - public Pray(Member member, String content, LocalDate deadline, Long originPrayId) { + public Pray(Member member, String content, LocalDate deadline, Long originPrayId, PrayType prayType) { this.member = member; this.content = content; this.count = 0; this.deadline = deadline; this.originPrayId = originPrayId; this.isShared = (originPrayId != null); + this.prayType = prayType; } public void update(PrayRequestDto prayRequestDto) { diff --git a/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java b/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java index a8e70c97..8d5c304c 100644 --- a/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java +++ b/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java @@ -3,9 +3,11 @@ import com.uspray.uspray.domain.ClubPray; import com.uspray.uspray.exception.ErrorStatus; import com.uspray.uspray.exception.model.NotFoundException; +import com.uspray.uspray.infrastructure.querydsl.clubpray.ClubPrayRepositoryCustom; import org.springframework.data.jpa.repository.JpaRepository; -public interface ClubPrayRepository extends JpaRepository { +public interface ClubPrayRepository extends JpaRepository, + ClubPrayRepositoryCustom { default ClubPray getClubPrayById(Long id) { return this.findById(id).orElseThrow( diff --git a/src/main/java/com/uspray/uspray/infrastructure/PrayRepository.java b/src/main/java/com/uspray/uspray/infrastructure/PrayRepository.java index 4d826a76..e3c9370b 100644 --- a/src/main/java/com/uspray/uspray/infrastructure/PrayRepository.java +++ b/src/main/java/com/uspray/uspray/infrastructure/PrayRepository.java @@ -3,6 +3,7 @@ import com.uspray.uspray.domain.Pray; import com.uspray.uspray.exception.ErrorStatus; import com.uspray.uspray.exception.model.NotFoundException; +import com.uspray.uspray.infrastructure.querydsl.pray.PrayRepositoryCustom; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryCustom.java b/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryCustom.java new file mode 100644 index 00000000..f419a4d1 --- /dev/null +++ b/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryCustom.java @@ -0,0 +1,12 @@ +package com.uspray.uspray.infrastructure.querydsl.clubpray; + +import com.uspray.uspray.DTO.clubpray.ClubPrayResponseDto; +import com.uspray.uspray.domain.Club; +import com.uspray.uspray.domain.Member; +import java.util.List; + +public interface ClubPrayRepositoryCustom { + + List getClubPrayList(Club club, Member member); + +} diff --git a/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryImpl.java b/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryImpl.java new file mode 100644 index 00000000..6cab6075 --- /dev/null +++ b/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryImpl.java @@ -0,0 +1,39 @@ +package com.uspray.uspray.infrastructure.querydsl.clubpray; + +import static com.uspray.uspray.domain.QClubPray.*; +import static com.uspray.uspray.domain.QPray.*; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.uspray.uspray.DTO.clubpray.ClubPrayResponseDto; +import com.uspray.uspray.DTO.clubpray.QClubPrayResponseDto; +import com.uspray.uspray.Enums.PrayType; +import com.uspray.uspray.domain.Club; +import com.uspray.uspray.domain.Member; +import java.util.List; +import javax.persistence.EntityManager; + +public class ClubPrayRepositoryImpl implements ClubPrayRepositoryCustom{ + + private final JPAQueryFactory queryFactory; + + public ClubPrayRepositoryImpl(EntityManager em) { + this.queryFactory = new JPAQueryFactory(em); + } + + //Club Id, memberId, Pray중 Shared만 + @Override + public List getClubPrayList(Club club, Member member) { + return queryFactory + .select(new QClubPrayResponseDto( + clubPray.id, + clubPray.content, + clubPray.author.id, + pray.count)) + .from(pray) + .rightJoin(pray.clubPray, clubPray) + .where(pray.member.eq(member), + pray.prayType.eq(PrayType.SHARED), + clubPray.club.eq(club)) + .fetch(); + } +} diff --git a/src/main/java/com/uspray/uspray/service/ClubPrayService.java b/src/main/java/com/uspray/uspray/service/ClubPrayService.java index dd1e61f7..79f65c8d 100644 --- a/src/main/java/com/uspray/uspray/service/ClubPrayService.java +++ b/src/main/java/com/uspray/uspray/service/ClubPrayService.java @@ -1,6 +1,7 @@ package com.uspray.uspray.service; import com.uspray.uspray.DTO.clubpray.ClubPrayRequestDto; +import com.uspray.uspray.DTO.clubpray.ClubPrayResponseDto; import com.uspray.uspray.DTO.clubpray.ClubPrayUpdateDto; import com.uspray.uspray.domain.Club; import com.uspray.uspray.domain.ClubPray; @@ -8,6 +9,7 @@ import com.uspray.uspray.infrastructure.ClubPrayRepository; import com.uspray.uspray.infrastructure.ClubRepository; import com.uspray.uspray.infrastructure.MemberRepository; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,4 +41,20 @@ public void updateClubPray(ClubPrayUpdateDto clubPrayUpdateDto) { clubpray.changeContent(clubPrayUpdateDto.getContent()); } + //clubId와 자신의 Id를 이용해 club pray들 반환 + 작성자인지 and 좋아요를 눌렀는지 확인 가능 + public List getClubPray(Long clubId, String userId) { + Member member = memberRepository.getMemberByUserId(userId); + Club club = clubRepository.getClubById(clubId); + + List clubPrayList = clubPrayRepository.getClubPrayList(club, member); + + for (ClubPrayResponseDto clubPrayResponseDto : clubPrayList) { + if (clubPrayResponseDto.getAuthorId().equals(member.getId())) { + clubPrayResponseDto.changeOwner(); + } + } + + return clubPrayList; + } + } From ed88cbb29a928d07c1a3a86d315a7d38bcf5abc9 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Thu, 2 Nov 2023 17:39:57 +0900 Subject: [PATCH 08/11] =?UTF-8?q?feat:=20clubpray=20controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uspray/controller/ClubPrayController.java | 64 +++++++++++++++++++ .../uspray/exception/SuccessStatus.java | 3 + 2 files changed, 67 insertions(+) create mode 100644 src/main/java/com/uspray/uspray/controller/ClubPrayController.java diff --git a/src/main/java/com/uspray/uspray/controller/ClubPrayController.java b/src/main/java/com/uspray/uspray/controller/ClubPrayController.java new file mode 100644 index 00000000..8e124b45 --- /dev/null +++ b/src/main/java/com/uspray/uspray/controller/ClubPrayController.java @@ -0,0 +1,64 @@ +package com.uspray.uspray.controller; + +import com.uspray.uspray.DTO.ApiResponseDto; +import com.uspray.uspray.DTO.clubpray.ClubPrayRequestDto; +import com.uspray.uspray.DTO.clubpray.ClubPrayResponseDto; +import com.uspray.uspray.DTO.clubpray.ClubPrayUpdateDto; +import com.uspray.uspray.exception.SuccessStatus; +import com.uspray.uspray.service.ClubPrayService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.userdetails.User; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/clubpray") +@Tag(name = "ClubPray", description = "모임 기도제목 API") +@RequiredArgsConstructor +@SecurityRequirement(name = "JWT Auth") +public class ClubPrayController { + + private final ClubPrayService clubPrayService; + + @Operation(summary = "모임 기도제목 생성") + @PostMapping + public ApiResponseDto createClubPray(@RequestBody ClubPrayRequestDto clubPrayRequestDto, + @Parameter(hidden = true) @AuthenticationPrincipal User user) { + clubPrayService.createClubPray(clubPrayRequestDto, user.getUsername()); + return ApiResponseDto.success(SuccessStatus.CREATE_CLUB_PRAY_SUCCESS, + SuccessStatus.CREATE_CLUB_PRAY_SUCCESS.getMessage()); + } + + @Operation(summary = "모임 기도제목 수정") + @PostMapping("/update") + public ApiResponseDto updateClubPray(@RequestBody ClubPrayUpdateDto clubPrayUpdateDto) { + clubPrayService.updateClubPray(clubPrayUpdateDto); + return ApiResponseDto.success(SuccessStatus.UPDATE_CLUB_PRAY_SUCCESS, + SuccessStatus.UPDATE_CLUB_PRAY_SUCCESS.getMessage()); + } + + @Operation(summary = "모임 기도제목 조회") + @GetMapping("/{club-id}") + @ApiResponse( + responseCode = "200", + description = "모임 기도제목 목록 반환", + content = @Content(schema = @Schema(implementation = ClubPrayResponseDto.class))) + public ApiResponseDto> getClubPray(@PathVariable(name = "club-id") Long clubId, + @Parameter(hidden = true) @AuthenticationPrincipal User user) { + return ApiResponseDto.success(SuccessStatus.GET_CLUB_PRAY_LIST_SUCCESS, + clubPrayService.getClubPray(clubId, user.getUsername())); + } +} diff --git a/src/main/java/com/uspray/uspray/exception/SuccessStatus.java b/src/main/java/com/uspray/uspray/exception/SuccessStatus.java index 1eae018c..0be482f7 100644 --- a/src/main/java/com/uspray/uspray/exception/SuccessStatus.java +++ b/src/main/java/com/uspray/uspray/exception/SuccessStatus.java @@ -14,6 +14,7 @@ public enum SuccessStatus { */ LOGIN_SUCCESS(HttpStatus.OK, "로그인에 성공했습니다."), GET_PRAY_LIST_SUCCESS(HttpStatus.OK, "기도제목 목록 조회에 성공했습니다."), + GET_CLUB_PRAY_LIST_SUCCESS(HttpStatus.OK, "기도제목 목록 조회에 성공했습니다."), GET_PRAY_SUCCESS(HttpStatus.OK, "기도제목 조회에 성공했습니다."), SEND_SMS_SUCCESS(HttpStatus.OK, "SMS를 성공적으로 전송했습니다."), CERTIFICATION_SUCCESS(HttpStatus.OK, "전화번호 인증에 성공했습니다."), @@ -22,6 +23,7 @@ public enum SuccessStatus { CHANGE_USER_PW_SUCCESS(HttpStatus.OK, "비밀번호를 성공적으로 변경했습니다."), CHECK_USER_ID_SUCCESS(HttpStatus.OK, "사용 가능한 아이디입니다."), UPDATE_PRAY_SUCCESS(HttpStatus.OK, "기도제목 수정에 성공했습니다."), + UPDATE_CLUB_PRAY_SUCCESS(HttpStatus.OK, "기도제목 수정에 성공했습니다."), REISSUE_SUCCESS(HttpStatus.OK, "토큰 재발급에 성공했습니다."), PUSH_SUCCESS(HttpStatus.OK, "푸쉬 알림을 성공적으로 전송했습니다."), CHANGE_PUSH_AGREE_SUCCESS(HttpStatus.OK, "푸쉬 알림 설정을 성공적으로 변경했습니다."), @@ -32,6 +34,7 @@ public enum SuccessStatus { */ SIGNUP_SUCCESS(HttpStatus.CREATED, "회원가입이 완료되었습니다."), CREATE_PRAY_SUCCESS(HttpStatus.CREATED, "기도제목 생성에 성공했습니다."), + CREATE_CLUB_PRAY_SUCCESS(HttpStatus.CREATED, "모임 기도제목 생성에 성공했습니다."), SHARE_PRAY_SUCCESS(HttpStatus.CREATED, "기도제목 공유에 성공했습니다."), SHARE_PRAY_AGREE_SUCCESS(HttpStatus.CREATED, "기도제목 공유 수락에 성공했습니다."), From 9da101130a7a22d17ccfbdca80cf96a43bb930a7 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Thu, 2 Nov 2023 18:20:52 +0900 Subject: [PATCH 09/11] =?UTF-8?q?feat:=20clubpray=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uspray/uspray/controller/ClubPrayController.java | 12 +++++++++++- src/main/java/com/uspray/uspray/domain/Pray.java | 3 ++- .../com/uspray/uspray/exception/SuccessStatus.java | 1 + .../com/uspray/uspray/service/ClubPrayService.java | 5 +++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uspray/uspray/controller/ClubPrayController.java b/src/main/java/com/uspray/uspray/controller/ClubPrayController.java index 8e124b45..faa947ff 100644 --- a/src/main/java/com/uspray/uspray/controller/ClubPrayController.java +++ b/src/main/java/com/uspray/uspray/controller/ClubPrayController.java @@ -17,6 +17,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.userdetails.User; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -56,9 +57,18 @@ public ApiResponseDto updateClubPray(@RequestBody ClubPrayUpdateDto clubPrayU responseCode = "200", description = "모임 기도제목 목록 반환", content = @Content(schema = @Schema(implementation = ClubPrayResponseDto.class))) - public ApiResponseDto> getClubPray(@PathVariable(name = "club-id") Long clubId, + public ApiResponseDto> getClubPray( + @PathVariable(name = "club-id") Long clubId, @Parameter(hidden = true) @AuthenticationPrincipal User user) { return ApiResponseDto.success(SuccessStatus.GET_CLUB_PRAY_LIST_SUCCESS, clubPrayService.getClubPray(clubId, user.getUsername())); } + + @Operation(summary = "모임 기도제목 삭제") + @DeleteMapping("/{clubpray-id}") + public ApiResponseDto deleteClubPray(@PathVariable(name = "clubpray-id") Long id) { + clubPrayService.deleteClubPray(id); + return ApiResponseDto.success(SuccessStatus.DELETE_CLUB_PRAY_SUCCESS, + SuccessStatus.DELETE_CLUB_PRAY_SUCCESS.getMessage()); + } } diff --git a/src/main/java/com/uspray/uspray/domain/Pray.java b/src/main/java/com/uspray/uspray/domain/Pray.java index 858041bd..2ca2fb56 100644 --- a/src/main/java/com/uspray/uspray/domain/Pray.java +++ b/src/main/java/com/uspray/uspray/domain/Pray.java @@ -4,6 +4,7 @@ import com.uspray.uspray.Enums.PrayType; import com.uspray.uspray.common.domain.AuditingTimeEntity; import java.time.LocalDate; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -52,7 +53,7 @@ public class Pray extends AuditingTimeEntity { @Enumerated(EnumType.STRING) private PrayType prayType; - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "clubpray_id") private ClubPray clubPray; diff --git a/src/main/java/com/uspray/uspray/exception/SuccessStatus.java b/src/main/java/com/uspray/uspray/exception/SuccessStatus.java index 0be482f7..a53852cf 100644 --- a/src/main/java/com/uspray/uspray/exception/SuccessStatus.java +++ b/src/main/java/com/uspray/uspray/exception/SuccessStatus.java @@ -42,6 +42,7 @@ public enum SuccessStatus { * 204 deleted */ DELETE_PRAY_SUCCESS(HttpStatus.NO_CONTENT, "기도제목 삭제에 성공했습니다."), + DELETE_CLUB_PRAY_SUCCESS(HttpStatus.NO_CONTENT, "모임 기도제목 삭제에 성공했습니다."), WITHDRAWAL_SUCCESS(HttpStatus.NO_CONTENT, "회원 탈퇴에 성공했습니다."), ; diff --git a/src/main/java/com/uspray/uspray/service/ClubPrayService.java b/src/main/java/com/uspray/uspray/service/ClubPrayService.java index 79f65c8d..142c7af0 100644 --- a/src/main/java/com/uspray/uspray/service/ClubPrayService.java +++ b/src/main/java/com/uspray/uspray/service/ClubPrayService.java @@ -57,4 +57,9 @@ public List getClubPray(Long clubId, String userId) { return clubPrayList; } + @Transactional + public void deleteClubPray(Long clubPrayId) { + clubPrayRepository.delete(clubPrayRepository.getClubPrayById(clubPrayId)); + } + } From a7745df79f06754d36404f9eef1a56c2f4a9195c Mon Sep 17 00:00:00 2001 From: dong2ast Date: Tue, 7 Nov 2023 19:03:23 +0900 Subject: [PATCH 10/11] =?UTF-8?q?:recycle:=20refactor:=20club=20->=20group?= =?UTF-8?q?=20=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/clubpray/ClubPrayRequestDto.java | 11 --- .../DTO/clubpray/ClubPrayUpdateDto.java | 9 --- .../DTO/grouppray/GroupPrayRequestDto.java | 11 +++ .../GroupPrayResponseDto.java} | 10 +-- .../DTO/grouppray/GroupPrayUpdateDto.java | 9 +++ .../uspray/controller/ClubPrayController.java | 74 ------------------- .../controller/GroupPrayController.java | 74 +++++++++++++++++++ .../uspray/domain/{Club.java => Group.java} | 8 +- .../domain/{ClubPray.java => GroupPray.java} | 20 ++--- .../java/com/uspray/uspray/domain/Member.java | 2 +- .../java/com/uspray/uspray/domain/Pray.java | 4 +- .../uspray/uspray/exception/ErrorStatus.java | 4 +- .../uspray/exception/SuccessStatus.java | 8 +- .../infrastructure/ClubPrayRepository.java | 18 ----- .../uspray/infrastructure/ClubRepository.java | 16 ---- .../infrastructure/GroupPrayRepository.java | 18 +++++ .../infrastructure/GroupRepository.java | 16 ++++ .../clubpray/ClubPrayRepositoryCustom.java | 12 --- .../clubpray/ClubPrayRepositoryImpl.java | 39 ---------- .../grouppray/GroupPrayRepositoryCustom.java | 12 +++ .../grouppray/GroupPrayRepositoryImpl.java | 39 ++++++++++ .../uspray/service/ClubPrayService.java | 65 ---------------- .../uspray/service/GroupPrayService.java | 65 ++++++++++++++++ 23 files changed, 272 insertions(+), 272 deletions(-) delete mode 100644 src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayRequestDto.java delete mode 100644 src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java create mode 100644 src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayRequestDto.java rename src/main/java/com/uspray/uspray/DTO/{clubpray/ClubPrayResponseDto.java => grouppray/GroupPrayResponseDto.java} (61%) create mode 100644 src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayUpdateDto.java delete mode 100644 src/main/java/com/uspray/uspray/controller/ClubPrayController.java create mode 100644 src/main/java/com/uspray/uspray/controller/GroupPrayController.java rename src/main/java/com/uspray/uspray/domain/{Club.java => Group.java} (76%) rename src/main/java/com/uspray/uspray/domain/{ClubPray.java => GroupPray.java} (72%) delete mode 100644 src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java delete mode 100644 src/main/java/com/uspray/uspray/infrastructure/ClubRepository.java create mode 100644 src/main/java/com/uspray/uspray/infrastructure/GroupPrayRepository.java create mode 100644 src/main/java/com/uspray/uspray/infrastructure/GroupRepository.java delete mode 100644 src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryCustom.java delete mode 100644 src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryImpl.java create mode 100644 src/main/java/com/uspray/uspray/infrastructure/querydsl/grouppray/GroupPrayRepositoryCustom.java create mode 100644 src/main/java/com/uspray/uspray/infrastructure/querydsl/grouppray/GroupPrayRepositoryImpl.java delete mode 100644 src/main/java/com/uspray/uspray/service/ClubPrayService.java create mode 100644 src/main/java/com/uspray/uspray/service/GroupPrayService.java diff --git a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayRequestDto.java b/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayRequestDto.java deleted file mode 100644 index c44542ae..00000000 --- a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayRequestDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.uspray.uspray.DTO.clubpray; - -import lombok.Data; - -@Data -public class ClubPrayRequestDto { - - private Long clubId; - private String content; - -} diff --git a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java b/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java deleted file mode 100644 index dfeeadb0..00000000 --- a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayUpdateDto.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.uspray.uspray.DTO.clubpray; - -import lombok.Data; - -@Data -public class ClubPrayUpdateDto { - private Long clubPrayId; - private String content; -} diff --git a/src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayRequestDto.java b/src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayRequestDto.java new file mode 100644 index 00000000..a6584dd4 --- /dev/null +++ b/src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayRequestDto.java @@ -0,0 +1,11 @@ +package com.uspray.uspray.DTO.grouppray; + +import lombok.Data; + +@Data +public class GroupPrayRequestDto { + + private Long groupId; + private String content; + +} diff --git a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayResponseDto.java b/src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayResponseDto.java similarity index 61% rename from src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayResponseDto.java rename to src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayResponseDto.java index 8baf57bc..bef23ead 100644 --- a/src/main/java/com/uspray/uspray/DTO/clubpray/ClubPrayResponseDto.java +++ b/src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayResponseDto.java @@ -1,20 +1,20 @@ -package com.uspray.uspray.DTO.clubpray; +package com.uspray.uspray.DTO.grouppray; import com.querydsl.core.annotations.QueryProjection; import lombok.Data; @Data -public class ClubPrayResponseDto { +public class GroupPrayResponseDto { - private Long clubPrayId; + private Long groupPrayId; private String content; private Boolean isOwner = false; private Long authorId; private Integer liked; @QueryProjection - public ClubPrayResponseDto(Long clubPrayId, String content, Long authorId, Integer liked) { - this.clubPrayId = clubPrayId; + public GroupPrayResponseDto(Long groupPrayId, String content, Long authorId, Integer liked) { + this.groupPrayId = groupPrayId; this.content = content; this.authorId = authorId; this.liked = liked; diff --git a/src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayUpdateDto.java b/src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayUpdateDto.java new file mode 100644 index 00000000..2bc05630 --- /dev/null +++ b/src/main/java/com/uspray/uspray/DTO/grouppray/GroupPrayUpdateDto.java @@ -0,0 +1,9 @@ +package com.uspray.uspray.DTO.grouppray; + +import lombok.Data; + +@Data +public class GroupPrayUpdateDto { + private Long groupPrayId; + private String content; +} diff --git a/src/main/java/com/uspray/uspray/controller/ClubPrayController.java b/src/main/java/com/uspray/uspray/controller/ClubPrayController.java deleted file mode 100644 index faa947ff..00000000 --- a/src/main/java/com/uspray/uspray/controller/ClubPrayController.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.uspray.uspray.controller; - -import com.uspray.uspray.DTO.ApiResponseDto; -import com.uspray.uspray.DTO.clubpray.ClubPrayRequestDto; -import com.uspray.uspray.DTO.clubpray.ClubPrayResponseDto; -import com.uspray.uspray.DTO.clubpray.ClubPrayUpdateDto; -import com.uspray.uspray.exception.SuccessStatus; -import com.uspray.uspray.service.ClubPrayService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; -import lombok.RequiredArgsConstructor; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.security.core.userdetails.User; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/clubpray") -@Tag(name = "ClubPray", description = "모임 기도제목 API") -@RequiredArgsConstructor -@SecurityRequirement(name = "JWT Auth") -public class ClubPrayController { - - private final ClubPrayService clubPrayService; - - @Operation(summary = "모임 기도제목 생성") - @PostMapping - public ApiResponseDto createClubPray(@RequestBody ClubPrayRequestDto clubPrayRequestDto, - @Parameter(hidden = true) @AuthenticationPrincipal User user) { - clubPrayService.createClubPray(clubPrayRequestDto, user.getUsername()); - return ApiResponseDto.success(SuccessStatus.CREATE_CLUB_PRAY_SUCCESS, - SuccessStatus.CREATE_CLUB_PRAY_SUCCESS.getMessage()); - } - - @Operation(summary = "모임 기도제목 수정") - @PostMapping("/update") - public ApiResponseDto updateClubPray(@RequestBody ClubPrayUpdateDto clubPrayUpdateDto) { - clubPrayService.updateClubPray(clubPrayUpdateDto); - return ApiResponseDto.success(SuccessStatus.UPDATE_CLUB_PRAY_SUCCESS, - SuccessStatus.UPDATE_CLUB_PRAY_SUCCESS.getMessage()); - } - - @Operation(summary = "모임 기도제목 조회") - @GetMapping("/{club-id}") - @ApiResponse( - responseCode = "200", - description = "모임 기도제목 목록 반환", - content = @Content(schema = @Schema(implementation = ClubPrayResponseDto.class))) - public ApiResponseDto> getClubPray( - @PathVariable(name = "club-id") Long clubId, - @Parameter(hidden = true) @AuthenticationPrincipal User user) { - return ApiResponseDto.success(SuccessStatus.GET_CLUB_PRAY_LIST_SUCCESS, - clubPrayService.getClubPray(clubId, user.getUsername())); - } - - @Operation(summary = "모임 기도제목 삭제") - @DeleteMapping("/{clubpray-id}") - public ApiResponseDto deleteClubPray(@PathVariable(name = "clubpray-id") Long id) { - clubPrayService.deleteClubPray(id); - return ApiResponseDto.success(SuccessStatus.DELETE_CLUB_PRAY_SUCCESS, - SuccessStatus.DELETE_CLUB_PRAY_SUCCESS.getMessage()); - } -} diff --git a/src/main/java/com/uspray/uspray/controller/GroupPrayController.java b/src/main/java/com/uspray/uspray/controller/GroupPrayController.java new file mode 100644 index 00000000..9e11120b --- /dev/null +++ b/src/main/java/com/uspray/uspray/controller/GroupPrayController.java @@ -0,0 +1,74 @@ +package com.uspray.uspray.controller; + +import com.uspray.uspray.DTO.ApiResponseDto; +import com.uspray.uspray.DTO.grouppray.GroupPrayRequestDto; +import com.uspray.uspray.DTO.grouppray.GroupPrayResponseDto; +import com.uspray.uspray.DTO.grouppray.GroupPrayUpdateDto; +import com.uspray.uspray.exception.SuccessStatus; +import com.uspray.uspray.service.GroupPrayService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.userdetails.User; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/grouppray") +@Tag(name = "GroupPray", description = "모임 기도제목 API") +@RequiredArgsConstructor +@SecurityRequirement(name = "JWT Auth") +public class GroupPrayController { + + private final GroupPrayService groupPrayService; + + @Operation(summary = "모임 기도제목 생성") + @PostMapping + public ApiResponseDto createGroupPray(@RequestBody GroupPrayRequestDto groupPrayRequestDto, + @Parameter(hidden = true) @AuthenticationPrincipal User user) { + groupPrayService.createGroupPray(groupPrayRequestDto, user.getUsername()); + return ApiResponseDto.success(SuccessStatus.CREATE_GROUP_PRAY_SUCCESS, + SuccessStatus.CREATE_GROUP_PRAY_SUCCESS.getMessage()); + } + + @Operation(summary = "모임 기도제목 수정") + @PostMapping("/update") + public ApiResponseDto updateGroupPray(@RequestBody GroupPrayUpdateDto groupPrayUpdateDto) { + groupPrayService.updateGroupPray(groupPrayUpdateDto); + return ApiResponseDto.success(SuccessStatus.UPDATE_GROUP_PRAY_SUCCESS, + SuccessStatus.UPDATE_GROUP_PRAY_SUCCESS.getMessage()); + } + + @Operation(summary = "모임 기도제목 조회") + @GetMapping("/{group-id}") + @ApiResponse( + responseCode = "200", + description = "모임 기도제목 목록 반환", + content = @Content(schema = @Schema(implementation = GroupPrayResponseDto.class))) + public ApiResponseDto> getGroupPray( + @PathVariable(name = "group-id") Long groupId, + @Parameter(hidden = true) @AuthenticationPrincipal User user) { + return ApiResponseDto.success(SuccessStatus.GET_GROUP_PRAY_LIST_SUCCESS, + groupPrayService.getGroupPray(groupId, user.getUsername())); + } + + @Operation(summary = "모임 기도제목 삭제") + @DeleteMapping("/{grouppray-id}") + public ApiResponseDto deleteGroupPray(@PathVariable(name = "grouppray-id") Long id) { + groupPrayService.deleteGroupPray(id); + return ApiResponseDto.success(SuccessStatus.DELETE_GROUP_PRAY_SUCCESS, + SuccessStatus.DELETE_GROUP_PRAY_SUCCESS.getMessage()); + } +} diff --git a/src/main/java/com/uspray/uspray/domain/Club.java b/src/main/java/com/uspray/uspray/domain/Group.java similarity index 76% rename from src/main/java/com/uspray/uspray/domain/Club.java rename to src/main/java/com/uspray/uspray/domain/Group.java index 350aa229..019ded77 100644 --- a/src/main/java/com/uspray/uspray/domain/Club.java +++ b/src/main/java/com/uspray/uspray/domain/Group.java @@ -15,14 +15,14 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Club extends AuditingTimeEntity { +public class Group extends AuditingTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "club_id") + @Column(name = "group_id") private Long id; - @OneToMany(mappedBy = "club", orphanRemoval = true) - private List clubPrayList; + @OneToMany(mappedBy = "group", orphanRemoval = true) + private List groupPrayList; } diff --git a/src/main/java/com/uspray/uspray/domain/ClubPray.java b/src/main/java/com/uspray/uspray/domain/GroupPray.java similarity index 72% rename from src/main/java/com/uspray/uspray/domain/ClubPray.java rename to src/main/java/com/uspray/uspray/domain/GroupPray.java index a6dde5a2..70e32403 100644 --- a/src/main/java/com/uspray/uspray/domain/ClubPray.java +++ b/src/main/java/com/uspray/uspray/domain/GroupPray.java @@ -17,38 +17,38 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ClubPray extends AuditingTimeEntity { +public class GroupPray extends AuditingTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "clubpray_id") + @Column(name = "grouppray_id") private Long id; private String content; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "club_id") - private Club club; + @JoinColumn(name = "group_id") + private Group group; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member author; @Builder - public ClubPray(String content, Club club, Member author) { + public GroupPray(String content, Group group, Member author) { this.content = content; - setClub(club); + setGroup(group); setAuthor(author); } - private void setClub(Club club) { - this.club = club; - club.getClubPrayList().add(this); + private void setGroup(Group group) { + this.group = group; + group.getGroupPrayList().add(this); } private void setAuthor(Member author) { this.author = author; - author.getClubPrayList().add(this); + author.getGroupPrayList().add(this); } public void changeContent(String content) { diff --git a/src/main/java/com/uspray/uspray/domain/Member.java b/src/main/java/com/uspray/uspray/domain/Member.java index 5179447a..e0889603 100644 --- a/src/main/java/com/uspray/uspray/domain/Member.java +++ b/src/main/java/com/uspray/uspray/domain/Member.java @@ -50,7 +50,7 @@ public class Member extends AuditingTimeEntity { private Authority authority; @OneToMany(mappedBy = "author") - private List clubPrayList; + private List groupPrayList; public void changeFirebaseToken(String firebaseToken) { diff --git a/src/main/java/com/uspray/uspray/domain/Pray.java b/src/main/java/com/uspray/uspray/domain/Pray.java index 2ca2fb56..69fff49a 100644 --- a/src/main/java/com/uspray/uspray/domain/Pray.java +++ b/src/main/java/com/uspray/uspray/domain/Pray.java @@ -54,8 +54,8 @@ public class Pray extends AuditingTimeEntity { private PrayType prayType; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) - @JoinColumn(name = "clubpray_id") - private ClubPray clubPray; + @JoinColumn(name = "grouppray_id") + private GroupPray groupPray; @Builder public Pray(Member member, String content, LocalDate deadline, Long originPrayId, PrayType prayType) { diff --git a/src/main/java/com/uspray/uspray/exception/ErrorStatus.java b/src/main/java/com/uspray/uspray/exception/ErrorStatus.java index f0e4e240..c69689f7 100644 --- a/src/main/java/com/uspray/uspray/exception/ErrorStatus.java +++ b/src/main/java/com/uspray/uspray/exception/ErrorStatus.java @@ -29,8 +29,8 @@ public enum ErrorStatus { * 404 NOT FOUND */ NOT_FOUND_USER_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 유저입니다"), - NOT_FOUND_CLUB_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 모임입니다"), - NOT_FOUND_CLUB_PRAY_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 모임 기도입니다"), + NOT_FOUND_GROUP_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 모임입니다"), + NOT_FOUND_GROUP_PRAY_EXCEPTION(HttpStatus.NOT_FOUND, "존재하지 않는 모임 기도입니다"), PRAY_NOT_FOUND_EXCEPTION(HttpStatus.NOT_FOUND, "해당 기도제목을 찾을 수 없습니다."), PRAY_ALREADY_DELETED_EXCEPTION(HttpStatus.NOT_FOUND, "원본 기도제목이 삭제되었습니다."), NOT_FOUND_SHARED_PRAY_EXCEPTION(HttpStatus.NOT_FOUND, "해당 공유기도제목을 찾을 수 없습니다."), diff --git a/src/main/java/com/uspray/uspray/exception/SuccessStatus.java b/src/main/java/com/uspray/uspray/exception/SuccessStatus.java index a53852cf..ecbd7571 100644 --- a/src/main/java/com/uspray/uspray/exception/SuccessStatus.java +++ b/src/main/java/com/uspray/uspray/exception/SuccessStatus.java @@ -14,7 +14,7 @@ public enum SuccessStatus { */ LOGIN_SUCCESS(HttpStatus.OK, "로그인에 성공했습니다."), GET_PRAY_LIST_SUCCESS(HttpStatus.OK, "기도제목 목록 조회에 성공했습니다."), - GET_CLUB_PRAY_LIST_SUCCESS(HttpStatus.OK, "기도제목 목록 조회에 성공했습니다."), + GET_GROUP_PRAY_LIST_SUCCESS(HttpStatus.OK, "기도제목 목록 조회에 성공했습니다."), GET_PRAY_SUCCESS(HttpStatus.OK, "기도제목 조회에 성공했습니다."), SEND_SMS_SUCCESS(HttpStatus.OK, "SMS를 성공적으로 전송했습니다."), CERTIFICATION_SUCCESS(HttpStatus.OK, "전화번호 인증에 성공했습니다."), @@ -23,7 +23,7 @@ public enum SuccessStatus { CHANGE_USER_PW_SUCCESS(HttpStatus.OK, "비밀번호를 성공적으로 변경했습니다."), CHECK_USER_ID_SUCCESS(HttpStatus.OK, "사용 가능한 아이디입니다."), UPDATE_PRAY_SUCCESS(HttpStatus.OK, "기도제목 수정에 성공했습니다."), - UPDATE_CLUB_PRAY_SUCCESS(HttpStatus.OK, "기도제목 수정에 성공했습니다."), + UPDATE_GROUP_PRAY_SUCCESS(HttpStatus.OK, "기도제목 수정에 성공했습니다."), REISSUE_SUCCESS(HttpStatus.OK, "토큰 재발급에 성공했습니다."), PUSH_SUCCESS(HttpStatus.OK, "푸쉬 알림을 성공적으로 전송했습니다."), CHANGE_PUSH_AGREE_SUCCESS(HttpStatus.OK, "푸쉬 알림 설정을 성공적으로 변경했습니다."), @@ -34,7 +34,7 @@ public enum SuccessStatus { */ SIGNUP_SUCCESS(HttpStatus.CREATED, "회원가입이 완료되었습니다."), CREATE_PRAY_SUCCESS(HttpStatus.CREATED, "기도제목 생성에 성공했습니다."), - CREATE_CLUB_PRAY_SUCCESS(HttpStatus.CREATED, "모임 기도제목 생성에 성공했습니다."), + CREATE_GROUP_PRAY_SUCCESS(HttpStatus.CREATED, "모임 기도제목 생성에 성공했습니다."), SHARE_PRAY_SUCCESS(HttpStatus.CREATED, "기도제목 공유에 성공했습니다."), SHARE_PRAY_AGREE_SUCCESS(HttpStatus.CREATED, "기도제목 공유 수락에 성공했습니다."), @@ -42,7 +42,7 @@ public enum SuccessStatus { * 204 deleted */ DELETE_PRAY_SUCCESS(HttpStatus.NO_CONTENT, "기도제목 삭제에 성공했습니다."), - DELETE_CLUB_PRAY_SUCCESS(HttpStatus.NO_CONTENT, "모임 기도제목 삭제에 성공했습니다."), + DELETE_GROUP_PRAY_SUCCESS(HttpStatus.NO_CONTENT, "모임 기도제목 삭제에 성공했습니다."), WITHDRAWAL_SUCCESS(HttpStatus.NO_CONTENT, "회원 탈퇴에 성공했습니다."), ; diff --git a/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java b/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java deleted file mode 100644 index 8d5c304c..00000000 --- a/src/main/java/com/uspray/uspray/infrastructure/ClubPrayRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.uspray.uspray.infrastructure; - -import com.uspray.uspray.domain.ClubPray; -import com.uspray.uspray.exception.ErrorStatus; -import com.uspray.uspray.exception.model.NotFoundException; -import com.uspray.uspray.infrastructure.querydsl.clubpray.ClubPrayRepositoryCustom; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ClubPrayRepository extends JpaRepository, - ClubPrayRepositoryCustom { - - default ClubPray getClubPrayById(Long id) { - return this.findById(id).orElseThrow( - () -> new NotFoundException(ErrorStatus.NOT_FOUND_CLUB_PRAY_EXCEPTION, - ErrorStatus.NOT_FOUND_CLUB_PRAY_EXCEPTION.getMessage())); - } - -} diff --git a/src/main/java/com/uspray/uspray/infrastructure/ClubRepository.java b/src/main/java/com/uspray/uspray/infrastructure/ClubRepository.java deleted file mode 100644 index 2279b1f2..00000000 --- a/src/main/java/com/uspray/uspray/infrastructure/ClubRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.uspray.uspray.infrastructure; - -import com.uspray.uspray.domain.Club; -import com.uspray.uspray.exception.ErrorStatus; -import com.uspray.uspray.exception.model.NotFoundException; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ClubRepository extends JpaRepository { - - default Club getClubById(Long id) { - return this.findById(id).orElseThrow( - () -> new NotFoundException(ErrorStatus.NOT_FOUND_CLUB_EXCEPTION, - ErrorStatus.NOT_FOUND_CLUB_EXCEPTION.getMessage())); - } - -} diff --git a/src/main/java/com/uspray/uspray/infrastructure/GroupPrayRepository.java b/src/main/java/com/uspray/uspray/infrastructure/GroupPrayRepository.java new file mode 100644 index 00000000..bb9ee9d9 --- /dev/null +++ b/src/main/java/com/uspray/uspray/infrastructure/GroupPrayRepository.java @@ -0,0 +1,18 @@ +package com.uspray.uspray.infrastructure; + +import com.uspray.uspray.domain.GroupPray; +import com.uspray.uspray.exception.ErrorStatus; +import com.uspray.uspray.exception.model.NotFoundException; +import com.uspray.uspray.infrastructure.querydsl.grouppray.GroupPrayRepositoryCustom; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface GroupPrayRepository extends JpaRepository, + GroupPrayRepositoryCustom { + + default GroupPray getGroupPrayById(Long id) { + return this.findById(id).orElseThrow( + () -> new NotFoundException(ErrorStatus.NOT_FOUND_GROUP_PRAY_EXCEPTION, + ErrorStatus.NOT_FOUND_GROUP_PRAY_EXCEPTION.getMessage())); + } + +} diff --git a/src/main/java/com/uspray/uspray/infrastructure/GroupRepository.java b/src/main/java/com/uspray/uspray/infrastructure/GroupRepository.java new file mode 100644 index 00000000..4c77372c --- /dev/null +++ b/src/main/java/com/uspray/uspray/infrastructure/GroupRepository.java @@ -0,0 +1,16 @@ +package com.uspray.uspray.infrastructure; + +import com.uspray.uspray.domain.Group; +import com.uspray.uspray.exception.ErrorStatus; +import com.uspray.uspray.exception.model.NotFoundException; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface GroupRepository extends JpaRepository { + + default Group getGroupById(Long id) { + return this.findById(id).orElseThrow( + () -> new NotFoundException(ErrorStatus.NOT_FOUND_GROUP_EXCEPTION, + ErrorStatus.NOT_FOUND_GROUP_EXCEPTION.getMessage())); + } + +} diff --git a/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryCustom.java b/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryCustom.java deleted file mode 100644 index f419a4d1..00000000 --- a/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryCustom.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.uspray.uspray.infrastructure.querydsl.clubpray; - -import com.uspray.uspray.DTO.clubpray.ClubPrayResponseDto; -import com.uspray.uspray.domain.Club; -import com.uspray.uspray.domain.Member; -import java.util.List; - -public interface ClubPrayRepositoryCustom { - - List getClubPrayList(Club club, Member member); - -} diff --git a/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryImpl.java b/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryImpl.java deleted file mode 100644 index 6cab6075..00000000 --- a/src/main/java/com/uspray/uspray/infrastructure/querydsl/clubpray/ClubPrayRepositoryImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.uspray.uspray.infrastructure.querydsl.clubpray; - -import static com.uspray.uspray.domain.QClubPray.*; -import static com.uspray.uspray.domain.QPray.*; - -import com.querydsl.jpa.impl.JPAQueryFactory; -import com.uspray.uspray.DTO.clubpray.ClubPrayResponseDto; -import com.uspray.uspray.DTO.clubpray.QClubPrayResponseDto; -import com.uspray.uspray.Enums.PrayType; -import com.uspray.uspray.domain.Club; -import com.uspray.uspray.domain.Member; -import java.util.List; -import javax.persistence.EntityManager; - -public class ClubPrayRepositoryImpl implements ClubPrayRepositoryCustom{ - - private final JPAQueryFactory queryFactory; - - public ClubPrayRepositoryImpl(EntityManager em) { - this.queryFactory = new JPAQueryFactory(em); - } - - //Club Id, memberId, Pray중 Shared만 - @Override - public List getClubPrayList(Club club, Member member) { - return queryFactory - .select(new QClubPrayResponseDto( - clubPray.id, - clubPray.content, - clubPray.author.id, - pray.count)) - .from(pray) - .rightJoin(pray.clubPray, clubPray) - .where(pray.member.eq(member), - pray.prayType.eq(PrayType.SHARED), - clubPray.club.eq(club)) - .fetch(); - } -} diff --git a/src/main/java/com/uspray/uspray/infrastructure/querydsl/grouppray/GroupPrayRepositoryCustom.java b/src/main/java/com/uspray/uspray/infrastructure/querydsl/grouppray/GroupPrayRepositoryCustom.java new file mode 100644 index 00000000..f4900592 --- /dev/null +++ b/src/main/java/com/uspray/uspray/infrastructure/querydsl/grouppray/GroupPrayRepositoryCustom.java @@ -0,0 +1,12 @@ +package com.uspray.uspray.infrastructure.querydsl.grouppray; + +import com.uspray.uspray.DTO.grouppray.GroupPrayResponseDto; +import com.uspray.uspray.domain.Group; +import com.uspray.uspray.domain.Member; +import java.util.List; + +public interface GroupPrayRepositoryCustom { + + List getGroupPrayList(Group group, Member member); + +} diff --git a/src/main/java/com/uspray/uspray/infrastructure/querydsl/grouppray/GroupPrayRepositoryImpl.java b/src/main/java/com/uspray/uspray/infrastructure/querydsl/grouppray/GroupPrayRepositoryImpl.java new file mode 100644 index 00000000..34118337 --- /dev/null +++ b/src/main/java/com/uspray/uspray/infrastructure/querydsl/grouppray/GroupPrayRepositoryImpl.java @@ -0,0 +1,39 @@ +package com.uspray.uspray.infrastructure.querydsl.grouppray; + +import static com.uspray.uspray.domain.QGroupPray.groupPray; +import static com.uspray.uspray.domain.QPray.pray; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.uspray.uspray.DTO.grouppray.GroupPrayResponseDto; +import com.uspray.uspray.DTO.grouppray.QGroupPrayResponseDto; +import com.uspray.uspray.Enums.PrayType; +import com.uspray.uspray.domain.Group; +import com.uspray.uspray.domain.Member; +import java.util.List; +import javax.persistence.EntityManager; + +public class GroupPrayRepositoryImpl implements GroupPrayRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + public GroupPrayRepositoryImpl(EntityManager em) { + this.queryFactory = new JPAQueryFactory(em); + } + + //Group Id, memberId, Pray중 Shared만 + @Override + public List getGroupPrayList(Group group, Member member) { + return queryFactory + .select(new QGroupPrayResponseDto( + groupPray.id, + groupPray.content, + groupPray.author.id, + pray.count)) + .from(pray) + .rightJoin(pray.groupPray, groupPray) + .where(pray.member.eq(member), + pray.prayType.eq(PrayType.SHARED), + groupPray.group.eq(group)) + .fetch(); + } +} diff --git a/src/main/java/com/uspray/uspray/service/ClubPrayService.java b/src/main/java/com/uspray/uspray/service/ClubPrayService.java deleted file mode 100644 index 142c7af0..00000000 --- a/src/main/java/com/uspray/uspray/service/ClubPrayService.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.uspray.uspray.service; - -import com.uspray.uspray.DTO.clubpray.ClubPrayRequestDto; -import com.uspray.uspray.DTO.clubpray.ClubPrayResponseDto; -import com.uspray.uspray.DTO.clubpray.ClubPrayUpdateDto; -import com.uspray.uspray.domain.Club; -import com.uspray.uspray.domain.ClubPray; -import com.uspray.uspray.domain.Member; -import com.uspray.uspray.infrastructure.ClubPrayRepository; -import com.uspray.uspray.infrastructure.ClubRepository; -import com.uspray.uspray.infrastructure.MemberRepository; -import java.util.List; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -public class ClubPrayService { - - private final MemberRepository memberRepository; - private final ClubRepository clubRepository; - private final ClubPrayRepository clubPrayRepository; - - @Transactional - public void createClubPray(ClubPrayRequestDto clubPrayRequestDto, String userId) { - Member author = memberRepository.getMemberByUserId(userId); - Club club = clubRepository.getClubById(clubPrayRequestDto.getClubId()); - ClubPray clubPray = ClubPray.builder() - .club(club) - .author(author) - .content(clubPrayRequestDto.getContent()) - .build(); - clubPrayRepository.save(clubPray); - } - - @Transactional - public void updateClubPray(ClubPrayUpdateDto clubPrayUpdateDto) { - ClubPray clubpray = clubPrayRepository.getClubPrayById( - clubPrayUpdateDto.getClubPrayId()); - clubpray.changeContent(clubPrayUpdateDto.getContent()); - } - - //clubId와 자신의 Id를 이용해 club pray들 반환 + 작성자인지 and 좋아요를 눌렀는지 확인 가능 - public List getClubPray(Long clubId, String userId) { - Member member = memberRepository.getMemberByUserId(userId); - Club club = clubRepository.getClubById(clubId); - - List clubPrayList = clubPrayRepository.getClubPrayList(club, member); - - for (ClubPrayResponseDto clubPrayResponseDto : clubPrayList) { - if (clubPrayResponseDto.getAuthorId().equals(member.getId())) { - clubPrayResponseDto.changeOwner(); - } - } - - return clubPrayList; - } - - @Transactional - public void deleteClubPray(Long clubPrayId) { - clubPrayRepository.delete(clubPrayRepository.getClubPrayById(clubPrayId)); - } - -} diff --git a/src/main/java/com/uspray/uspray/service/GroupPrayService.java b/src/main/java/com/uspray/uspray/service/GroupPrayService.java new file mode 100644 index 00000000..7492661a --- /dev/null +++ b/src/main/java/com/uspray/uspray/service/GroupPrayService.java @@ -0,0 +1,65 @@ +package com.uspray.uspray.service; + +import com.uspray.uspray.DTO.grouppray.GroupPrayRequestDto; +import com.uspray.uspray.DTO.grouppray.GroupPrayResponseDto; +import com.uspray.uspray.DTO.grouppray.GroupPrayUpdateDto; +import com.uspray.uspray.domain.Group; +import com.uspray.uspray.domain.GroupPray; +import com.uspray.uspray.domain.Member; +import com.uspray.uspray.infrastructure.GroupPrayRepository; +import com.uspray.uspray.infrastructure.GroupRepository; +import com.uspray.uspray.infrastructure.MemberRepository; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class GroupPrayService { + + private final MemberRepository memberRepository; + private final GroupRepository groupRepository; + private final GroupPrayRepository groupPrayRepository; + + @Transactional + public void createGroupPray(GroupPrayRequestDto groupPrayRequestDto, String userId) { + Member author = memberRepository.getMemberByUserId(userId); + Group group = groupRepository.getGroupById(groupPrayRequestDto.getGroupId()); + GroupPray groupPray = GroupPray.builder() + .group(group) + .author(author) + .content(groupPrayRequestDto.getContent()) + .build(); + groupPrayRepository.save(groupPray); + } + + @Transactional + public void updateGroupPray(GroupPrayUpdateDto groupPrayUpdateDto) { + GroupPray groupPray = groupPrayRepository.getGroupPrayById( + groupPrayUpdateDto.getGroupPrayId()); + groupPray.changeContent(groupPrayUpdateDto.getContent()); + } + + //groupId와 자신의 Id를 이용해 group pray들 반환 + 작성자인지 and 좋아요를 눌렀는지 확인 가능 + public List getGroupPray(Long groupId, String userId) { + Member member = memberRepository.getMemberByUserId(userId); + Group group = groupRepository.getGroupById(groupId); + + List groupPrayList = groupPrayRepository.getGroupPrayList(group, member); + + for (GroupPrayResponseDto groupPrayResponseDto : groupPrayList) { + if (groupPrayResponseDto.getAuthorId().equals(member.getId())) { + groupPrayResponseDto.changeOwner(); + } + } + + return groupPrayList; + } + + @Transactional + public void deleteGroupPray(Long groupPrayId) { + groupPrayRepository.delete(groupPrayRepository.getGroupPrayById(groupPrayId)); + } + +} From 2bc2cd679858f5df124e761c6e14eaf019e55d90 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Tue, 7 Nov 2023 19:08:59 +0900 Subject: [PATCH 11/11] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor:=20url=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20=EC=B9=B4=EB=A9=9C=20case=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20+=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=20mapping=20PutMapping=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uspray/uspray/controller/GroupPrayController.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/uspray/uspray/controller/GroupPrayController.java b/src/main/java/com/uspray/uspray/controller/GroupPrayController.java index 9e11120b..962af30f 100644 --- a/src/main/java/com/uspray/uspray/controller/GroupPrayController.java +++ b/src/main/java/com/uspray/uspray/controller/GroupPrayController.java @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -44,7 +45,7 @@ public ApiResponseDto createGroupPray(@RequestBody GroupPrayRequestDto groupP } @Operation(summary = "모임 기도제목 수정") - @PostMapping("/update") + @PutMapping public ApiResponseDto updateGroupPray(@RequestBody GroupPrayUpdateDto groupPrayUpdateDto) { groupPrayService.updateGroupPray(groupPrayUpdateDto); return ApiResponseDto.success(SuccessStatus.UPDATE_GROUP_PRAY_SUCCESS, @@ -52,21 +53,21 @@ public ApiResponseDto updateGroupPray(@RequestBody GroupPrayUpdateDto groupPr } @Operation(summary = "모임 기도제목 조회") - @GetMapping("/{group-id}") + @GetMapping("/{groupId}") @ApiResponse( responseCode = "200", description = "모임 기도제목 목록 반환", content = @Content(schema = @Schema(implementation = GroupPrayResponseDto.class))) public ApiResponseDto> getGroupPray( - @PathVariable(name = "group-id") Long groupId, + @PathVariable(name = "groupId") Long groupId, @Parameter(hidden = true) @AuthenticationPrincipal User user) { return ApiResponseDto.success(SuccessStatus.GET_GROUP_PRAY_LIST_SUCCESS, groupPrayService.getGroupPray(groupId, user.getUsername())); } @Operation(summary = "모임 기도제목 삭제") - @DeleteMapping("/{grouppray-id}") - public ApiResponseDto deleteGroupPray(@PathVariable(name = "grouppray-id") Long id) { + @DeleteMapping("/{groupPrayId}") + public ApiResponseDto deleteGroupPray(@PathVariable(name = "groupPrayId") Long id) { groupPrayService.deleteGroupPray(id); return ApiResponseDto.success(SuccessStatus.DELETE_GROUP_PRAY_SUCCESS, SuccessStatus.DELETE_GROUP_PRAY_SUCCESS.getMessage());