From 69d7c99b99df905fbe4aafb0bb3a8741039d7e01 Mon Sep 17 00:00:00 2001 From: ggamD00 Date: Mon, 25 Mar 2024 01:52:53 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[#45]=20meme`s=20Entity=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit meme 과 meme`s를 1:n 관계로 수정 --- backend/memetory/build.gradle | 2 +- backend/memetory/docker-compose.yml | 2 +- .../memetory/domain/memes/entity/Memes.java | 44 +++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/entity/Memes.java diff --git a/backend/memetory/build.gradle b/backend/memetory/build.gradle index fba61df4..708da79b 100644 --- a/backend/memetory/build.gradle +++ b/backend/memetory/build.gradle @@ -54,7 +54,7 @@ jib { } } to { - image = 'junrain/memetory-server:latest' + image = 'memetory/demo:latest' } container { jvmFlags = ['-Dspring.profiles.active=dev'] diff --git a/backend/memetory/docker-compose.yml b/backend/memetory/docker-compose.yml index 8918092b..81521859 100644 --- a/backend/memetory/docker-compose.yml +++ b/backend/memetory/docker-compose.yml @@ -9,7 +9,7 @@ services: - app-tier memetory-server: - image: "junrain/memetory-server" + image: "memetory/demo" ports: - "80:8080" depends_on: diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/entity/Memes.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/entity/Memes.java new file mode 100644 index 00000000..663a89a0 --- /dev/null +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/entity/Memes.java @@ -0,0 +1,44 @@ +package com.example.memetory.domain.memes.entity; + +import com.example.memetory.domain.member.entity.Member; +import com.example.memetory.domain.meme.entity.Meme; +import com.example.memetory.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Memes extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "memes_id") + private Long Id; + + private String title; + + private int likeCount; + + private int commentCount; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meme_id") + private Meme meme; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + @Builder + public Memes(String title, int likeCount, int commentCount, Meme meme, Member member) { + this.title = title; + this.likeCount = likeCount; + this.commentCount = commentCount; + this.meme = meme; + this.member = member; + } +} From 5f3cd8aea3444da4e2453ef02dd72db9661bcdd9 Mon Sep 17 00:00:00 2001 From: ggamD00 Date: Mon, 25 Mar 2024 01:54:20 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[#45]=20meme`s=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=97=90=20=ED=95=84=EC=9A=94=ED=95=9C=20DTO=EC=99=80=20Mapper?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/memes/dto/MemesServiceDto.java | 30 +++++++++++++++++++ .../domain/memes/dto/mapper/MemesMapper.java | 14 +++++++++ .../dto/request/GenerateMemesRequest.java | 22 ++++++++++++++ .../dto/response/GenerateMemesResponse.java | 10 +++++++ 4 files changed, 76 insertions(+) create mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/MemesServiceDto.java create mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/mapper/MemesMapper.java create mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/request/GenerateMemesRequest.java create mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/response/GenerateMemesResponse.java diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/MemesServiceDto.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/MemesServiceDto.java new file mode 100644 index 00000000..4da115fb --- /dev/null +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/MemesServiceDto.java @@ -0,0 +1,30 @@ +package com.example.memetory.domain.memes.dto; + +import com.example.memetory.domain.member.entity.Member; +import com.example.memetory.domain.meme.entity.Meme; +import com.example.memetory.domain.memes.entity.Memes; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +@AllArgsConstructor +public class MemesServiceDto { + private Long memberId; + private Long memeId; + private String email; + private String title; + private int likeCount; + private int commentCount; + + public Memes toEntity(Member member, Meme meme) { + return Memes.builder() + .member(member) + .meme(meme) + .title(this.title) + .likeCount(0) + .commentCount(0) + .build(); + } +} diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/mapper/MemesMapper.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/mapper/MemesMapper.java new file mode 100644 index 00000000..8ebd6e9f --- /dev/null +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/mapper/MemesMapper.java @@ -0,0 +1,14 @@ +package com.example.memetory.domain.memes.dto.mapper; + +import com.example.memetory.domain.memes.dto.response.GenerateMemesResponse; +import com.example.memetory.domain.memes.entity.Memes; +import org.springframework.stereotype.Component; + +@Component +public class MemesMapper { + public GenerateMemesResponse EntityToGenerateMemesResponse(Memes memes) { + return GenerateMemesResponse.builder() + .memesId(memes.getId()) + .build(); + } +} diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/request/GenerateMemesRequest.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/request/GenerateMemesRequest.java new file mode 100644 index 00000000..235d48f1 --- /dev/null +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/request/GenerateMemesRequest.java @@ -0,0 +1,22 @@ +package com.example.memetory.domain.memes.dto.request; + +import com.example.memetory.domain.memes.dto.MemesServiceDto; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class GenerateMemesRequest { + + private Long memeId; + private String title; + + public MemesServiceDto toServiceDto(String email) { + return MemesServiceDto.builder() + .email(email) + .memeId(memeId) + .title(title) + .build(); + } +} diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/response/GenerateMemesResponse.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/response/GenerateMemesResponse.java new file mode 100644 index 00000000..722c759e --- /dev/null +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/response/GenerateMemesResponse.java @@ -0,0 +1,10 @@ +package com.example.memetory.domain.memes.dto.response; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class GenerateMemesResponse { + private Long memesId; +} From c41a48d06e38b1a0081bb27cd77db3e4fb9a6afa Mon Sep 17 00:00:00 2001 From: ggamD00 Date: Mon, 25 Mar 2024 01:54:55 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[#45]=20meme`s=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../memes/controller/MemesController.java | 33 +++++++++++++++++++ .../memes/repository/MemesRepository.java | 7 ++++ .../domain/memes/service/MemesService.java | 33 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/controller/MemesController.java create mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/repository/MemesRepository.java create mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/service/MemesService.java diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/controller/MemesController.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/controller/MemesController.java new file mode 100644 index 00000000..192888dc --- /dev/null +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/controller/MemesController.java @@ -0,0 +1,33 @@ +package com.example.memetory.domain.memes.controller; + +import com.example.memetory.domain.memes.dto.MemesServiceDto; +import com.example.memetory.domain.memes.dto.request.GenerateMemesRequest; +import com.example.memetory.domain.memes.dto.response.GenerateMemesResponse; +import com.example.memetory.domain.memes.service.MemesService; +import com.example.memetory.global.annotation.LoginMemberEmail; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +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 +@RequiredArgsConstructor +@RequestMapping("/memes") +public class MemesController { + private final MemesService memesService; + + @PostMapping + public ResponseEntity register(@LoginMemberEmail String email, @RequestBody GenerateMemesRequest generateMemesRequest) { + MemesServiceDto memesServiceDto = generateMemesRequest.toServiceDto(email); + GenerateMemesResponse generateMemesResponse = memesService.register(memesServiceDto); + return ResponseEntity + .status(HttpStatus.CREATED) + .body(generateMemesResponse); + } + + +} diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/repository/MemesRepository.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/repository/MemesRepository.java new file mode 100644 index 00000000..609fd3c4 --- /dev/null +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/repository/MemesRepository.java @@ -0,0 +1,7 @@ +package com.example.memetory.domain.memes.repository; + +import com.example.memetory.domain.memes.entity.Memes; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MemesRepository extends JpaRepository { +} diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/service/MemesService.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/service/MemesService.java new file mode 100644 index 00000000..809c9eaf --- /dev/null +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/service/MemesService.java @@ -0,0 +1,33 @@ +package com.example.memetory.domain.memes.service; + +import com.example.memetory.domain.member.entity.Member; +import com.example.memetory.domain.member.service.MemberService; +import com.example.memetory.domain.meme.entity.Meme; +import com.example.memetory.domain.meme.service.MemeService; +import com.example.memetory.domain.memes.dto.MemesServiceDto; +import com.example.memetory.domain.memes.dto.mapper.MemesMapper; +import com.example.memetory.domain.memes.dto.response.GenerateMemesResponse; +import com.example.memetory.domain.memes.entity.Memes; +import com.example.memetory.domain.memes.repository.MemesRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class MemesService { + private final MemberService memberService; + private final MemeService memeService; + private final MemesMapper memesMapper; + private final MemesRepository memesRepository; + + @Transactional + public GenerateMemesResponse register(MemesServiceDto memesServiceDto) { + Member foundMember = memberService.findByEmail(memesServiceDto.getEmail()); + Meme foundMeme = memeService.getMemeBetweenService(memesServiceDto.getMemeId()); + + Memes newMemes = memesServiceDto.toEntity(foundMember, foundMeme); + Memes savedMemes = memesRepository.save(newMemes); + return memesMapper.EntityToGenerateMemesResponse(savedMemes); + } +} From f272ac90335df3267116f7911c5c6855bff48aaf Mon Sep 17 00:00:00 2001 From: ggamD00 Date: Mon, 25 Mar 2024 01:55:47 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[#45]=20service=20=EA=B3=84=EC=B8=B5?= =?UTF-8?q?=EC=97=90=EC=84=9C=EB=A7=8C=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EC=9C=84=ED=95=9C=20meme=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/meme/service/MemeService.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/meme/service/MemeService.java b/backend/memetory/src/main/java/com/example/memetory/domain/meme/service/MemeService.java index 2c96c3bd..14a086a8 100644 --- a/backend/memetory/src/main/java/com/example/memetory/domain/meme/service/MemeService.java +++ b/backend/memetory/src/main/java/com/example/memetory/domain/meme/service/MemeService.java @@ -39,9 +39,9 @@ public String getAIServerSendJson(MemeServiceDto memeServiceDto) { Member member = memberService.findByEmail(memeServiceDto.getEmail()); AIServerSendDto aiServerSendDto = AIServerSendDto.builder() - .memberId(member.getId()) - .scene(memeServiceDto.getScene()) - .build(); + .memberId(member.getId()) + .scene(memeServiceDto.getScene()) + .build(); return gson.toJson(aiServerSendDto); } @@ -66,12 +66,19 @@ public MemeListResponse getAllMeme(MemeServiceDto memeServiceDto) { Member member = memberService.findByEmail(memeServiceDto.getEmail()); List memeList = memeRepository.findAllByMember(member) - .stream() - .map(MemeResponse::of) - .toList(); + .stream() + .map(MemeResponse::of) + .toList(); return MemeListResponse.builder() .memeList(memeList) .build(); } + + // Service 계층 끼리의 밈 조회 + @Transactional(readOnly = true) + public Meme getMemeBetweenService(Long memeId) { + Meme foundMeme = memeRepository.findById(memeId).orElseThrow(NotFoundMemeException::new); + return foundMeme; + } } From ef606773cafd1370b7737a0e1c811aa06ea50866 Mon Sep 17 00:00:00 2001 From: ggamD00 Date: Mon, 25 Mar 2024 10:19:18 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[#45]=20=EB=B0=B0=ED=8F=AC=EC=9A=A9=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/memetory/build.gradle | 2 +- backend/memetory/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/memetory/build.gradle b/backend/memetory/build.gradle index 708da79b..fba61df4 100644 --- a/backend/memetory/build.gradle +++ b/backend/memetory/build.gradle @@ -54,7 +54,7 @@ jib { } } to { - image = 'memetory/demo:latest' + image = 'junrain/memetory-server:latest' } container { jvmFlags = ['-Dspring.profiles.active=dev'] diff --git a/backend/memetory/docker-compose.yml b/backend/memetory/docker-compose.yml index 81521859..8918092b 100644 --- a/backend/memetory/docker-compose.yml +++ b/backend/memetory/docker-compose.yml @@ -9,7 +9,7 @@ services: - app-tier memetory-server: - image: "memetory/demo" + image: "junrain/memetory-server" ports: - "80:8080" depends_on: From 259d374100b150e44cd8706329dcc47d90745906 Mon Sep 17 00:00:00 2001 From: ggamD00 Date: Mon, 25 Mar 2024 10:40:57 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[#45]=20meme`s=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=ED=9B=84=20=EB=A6=AC=ED=84=B4=20=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit memesID -> http 코드 201 --- .../domain/memes/controller/MemesController.java | 9 +++------ .../memetory/domain/memes/dto/mapper/MemesMapper.java | 7 ------- .../memes/dto/response/GenerateMemesResponse.java | 10 ---------- .../memetory/domain/memes/service/MemesService.java | 6 ++---- 4 files changed, 5 insertions(+), 27 deletions(-) delete mode 100644 backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/response/GenerateMemesResponse.java diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/controller/MemesController.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/controller/MemesController.java index 192888dc..855f5d00 100644 --- a/backend/memetory/src/main/java/com/example/memetory/domain/memes/controller/MemesController.java +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/controller/MemesController.java @@ -2,7 +2,6 @@ import com.example.memetory.domain.memes.dto.MemesServiceDto; import com.example.memetory.domain.memes.dto.request.GenerateMemesRequest; -import com.example.memetory.domain.memes.dto.response.GenerateMemesResponse; import com.example.memetory.domain.memes.service.MemesService; import com.example.memetory.global.annotation.LoginMemberEmail; import lombok.RequiredArgsConstructor; @@ -21,12 +20,10 @@ public class MemesController { private final MemesService memesService; @PostMapping - public ResponseEntity register(@LoginMemberEmail String email, @RequestBody GenerateMemesRequest generateMemesRequest) { + public ResponseEntity register(@LoginMemberEmail String email, @RequestBody GenerateMemesRequest generateMemesRequest) { MemesServiceDto memesServiceDto = generateMemesRequest.toServiceDto(email); - GenerateMemesResponse generateMemesResponse = memesService.register(memesServiceDto); - return ResponseEntity - .status(HttpStatus.CREATED) - .body(generateMemesResponse); + memesService.register(memesServiceDto); + return ResponseEntity.status(HttpStatus.CREATED).build(); } diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/mapper/MemesMapper.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/mapper/MemesMapper.java index 8ebd6e9f..b644e413 100644 --- a/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/mapper/MemesMapper.java +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/mapper/MemesMapper.java @@ -1,14 +1,7 @@ package com.example.memetory.domain.memes.dto.mapper; -import com.example.memetory.domain.memes.dto.response.GenerateMemesResponse; -import com.example.memetory.domain.memes.entity.Memes; import org.springframework.stereotype.Component; @Component public class MemesMapper { - public GenerateMemesResponse EntityToGenerateMemesResponse(Memes memes) { - return GenerateMemesResponse.builder() - .memesId(memes.getId()) - .build(); - } } diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/response/GenerateMemesResponse.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/response/GenerateMemesResponse.java deleted file mode 100644 index 722c759e..00000000 --- a/backend/memetory/src/main/java/com/example/memetory/domain/memes/dto/response/GenerateMemesResponse.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.memetory.domain.memes.dto.response; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class GenerateMemesResponse { - private Long memesId; -} diff --git a/backend/memetory/src/main/java/com/example/memetory/domain/memes/service/MemesService.java b/backend/memetory/src/main/java/com/example/memetory/domain/memes/service/MemesService.java index 809c9eaf..d78d2441 100644 --- a/backend/memetory/src/main/java/com/example/memetory/domain/memes/service/MemesService.java +++ b/backend/memetory/src/main/java/com/example/memetory/domain/memes/service/MemesService.java @@ -6,7 +6,6 @@ import com.example.memetory.domain.meme.service.MemeService; import com.example.memetory.domain.memes.dto.MemesServiceDto; import com.example.memetory.domain.memes.dto.mapper.MemesMapper; -import com.example.memetory.domain.memes.dto.response.GenerateMemesResponse; import com.example.memetory.domain.memes.entity.Memes; import com.example.memetory.domain.memes.repository.MemesRepository; import lombok.RequiredArgsConstructor; @@ -22,12 +21,11 @@ public class MemesService { private final MemesRepository memesRepository; @Transactional - public GenerateMemesResponse register(MemesServiceDto memesServiceDto) { + public void register(MemesServiceDto memesServiceDto) { Member foundMember = memberService.findByEmail(memesServiceDto.getEmail()); Meme foundMeme = memeService.getMemeBetweenService(memesServiceDto.getMemeId()); Memes newMemes = memesServiceDto.toEntity(foundMember, foundMeme); - Memes savedMemes = memesRepository.save(newMemes); - return memesMapper.EntityToGenerateMemesResponse(savedMemes); + memesRepository.save(newMemes); } }