-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
20 changed files
with
470 additions
and
187 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
97 changes: 97 additions & 0 deletions
97
...cation/src/main/java/com/devtoon/jtoon/webtoon/application/WebtoonApplicationService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
package com.devtoon.jtoon.webtoon.application; | ||
|
||
import static com.devtoon.jtoon.common.ImageType.*; | ||
|
||
import java.util.List; | ||
import java.util.Map; | ||
|
||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
import org.springframework.web.multipart.MultipartFile; | ||
|
||
import com.devtoon.jtoon.application.S3Service; | ||
import com.devtoon.jtoon.common.FileName; | ||
import com.devtoon.jtoon.global.util.CustomPageRequest; | ||
import com.devtoon.jtoon.member.entity.Member; | ||
import com.devtoon.jtoon.request.UploadImageReq; | ||
import com.devtoon.jtoon.webtoon.entity.Webtoon; | ||
import com.devtoon.jtoon.webtoon.entity.enums.DayOfWeek; | ||
import com.devtoon.jtoon.webtoon.request.CreateEpisodeReq; | ||
import com.devtoon.jtoon.webtoon.request.CreateWebtoonReq; | ||
import com.devtoon.jtoon.webtoon.request.GetWebtoonsReq; | ||
import com.devtoon.jtoon.webtoon.response.EpisodeRes; | ||
import com.devtoon.jtoon.webtoon.response.EpisodesRes; | ||
import com.devtoon.jtoon.webtoon.response.WebtoonInfoRes; | ||
import com.devtoon.jtoon.webtoon.response.WebtoonItemRes; | ||
import com.devtoon.jtoon.webtoon.service.WebtoonDomainService; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class WebtoonApplicationService { | ||
|
||
private final WebtoonDomainService webtoonDomainService; | ||
private final S3Service s3Service; | ||
|
||
@Transactional | ||
public void createWebtoon(Member member, MultipartFile thumbnailImage, CreateWebtoonReq request) { | ||
webtoonDomainService.validateDuplicateTitle(request.title()); | ||
String thumbnailUrl = s3Service.upload(UploadImageReq.builder() | ||
.imageType(WEBTOON_THUMBNAIL) | ||
.webtoonTitle(request.title()) | ||
.fileName(FileName.forWebtoon()) | ||
.image(thumbnailImage) | ||
.build() | ||
); | ||
webtoonDomainService.createWebtoon(member, thumbnailUrl, request); | ||
} | ||
|
||
@Transactional | ||
public void createEpisode( | ||
Member member, | ||
Long webtoonId, | ||
MultipartFile mainImage, | ||
MultipartFile thumbnailImage, | ||
CreateEpisodeReq request | ||
) { | ||
Webtoon webtoon = webtoonDomainService.getWebtoonById(webtoonId); | ||
webtoon.validateAuthor(member.getId()); | ||
String mainUrl = s3Service.upload(UploadImageReq.builder() | ||
.imageType(EPISODE_MAIN) | ||
.webtoonTitle(webtoon.getTitle()) | ||
.fileName(FileName.forEpisode(request.no())) | ||
.image(mainImage) | ||
.build() | ||
); | ||
String thumbnailUrl = s3Service.upload(UploadImageReq.builder() | ||
.imageType(EPISODE_THUMBNAIL) | ||
.webtoonTitle(webtoon.getTitle()) | ||
.fileName(FileName.forEpisode(request.no())) | ||
.image(thumbnailImage) | ||
.build() | ||
); | ||
webtoonDomainService.createEpisode(webtoon, mainUrl, thumbnailUrl, request); | ||
} | ||
|
||
public Map<DayOfWeek, List<WebtoonItemRes>> getWebtoons(GetWebtoonsReq request) { | ||
return webtoonDomainService.getWebtoons(request); | ||
} | ||
|
||
public WebtoonInfoRes getWebtoon(Long webtoonId) { | ||
return webtoonDomainService.getWebtoon(webtoonId); | ||
} | ||
|
||
public List<EpisodesRes> getEpisodes(Long webtoonId, CustomPageRequest request) { | ||
return webtoonDomainService.getEpisodes(webtoonId, request); | ||
} | ||
|
||
public EpisodeRes getEpisode(Long episodeId) { | ||
return webtoonDomainService.getEpisode(episodeId); | ||
} | ||
|
||
@Transactional | ||
public void purchaseEpisode(Member member, Long episodeId) { | ||
webtoonDomainService.purchaseEpisode(member, episodeId); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
module-domain-s3/src/main/java/com/devtoon/jtoon/request/UploadImageReq.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package com.devtoon.jtoon.request; | ||
|
||
import org.springframework.web.multipart.MultipartFile; | ||
|
||
import com.devtoon.jtoon.common.FileName; | ||
import com.devtoon.jtoon.common.ImageType; | ||
|
||
import lombok.Builder; | ||
|
||
@Builder | ||
public record UploadImageReq( | ||
ImageType imageType, | ||
String webtoonTitle, | ||
FileName fileName, | ||
MultipartFile image | ||
) { | ||
|
||
public String toKey() { | ||
return imageType.getPath(webtoonTitle, fileName.getValue()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 58 additions & 0 deletions
58
module-domain/src/main/java/com/devtoon/jtoon/member/entity/MemberCookie.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package com.devtoon.jtoon.member.entity; | ||
|
||
import static com.devtoon.jtoon.error.model.ErrorStatus.*; | ||
import static java.util.Objects.*; | ||
|
||
import com.devtoon.jtoon.error.exception.InvalidRequestException; | ||
import com.devtoon.jtoon.global.common.BaseTimeEntity; | ||
|
||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.FetchType; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.GenerationType; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.JoinColumn; | ||
import jakarta.persistence.ManyToOne; | ||
import jakarta.persistence.Table; | ||
import lombok.AccessLevel; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Entity | ||
@Getter | ||
@Table(name = "member_cookies") | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class MemberCookie extends BaseTimeEntity { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
@Column(name = "member_cookie_id") | ||
private Long id; | ||
|
||
@Column(name = "cookie_count", nullable = false) | ||
private int cookieCount; | ||
|
||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "member_id", nullable = false) | ||
private Member member; | ||
|
||
@Builder | ||
private MemberCookie(int cookieCount, Member member) { | ||
if (cookieCount < 0) { | ||
throw new InvalidRequestException(COOKIE_COUNT_NOT_NEGATIVE); | ||
} | ||
|
||
this.cookieCount = cookieCount; | ||
this.member = requireNonNull(member, MEMBER_IS_NULL.getMessage()); | ||
} | ||
|
||
public void decreaseCookieCount(int cookieCount) { | ||
if (this.cookieCount < cookieCount) { | ||
throw new InvalidRequestException(EPISODE_NOT_ENOUGH_COOKIES); | ||
} | ||
|
||
this.cookieCount -= cookieCount; | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
module-domain/src/main/java/com/devtoon/jtoon/member/repository/MemberCookieRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.devtoon.jtoon.member.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
import com.devtoon.jtoon.member.entity.MemberCookie; | ||
|
||
public interface MemberCookieRepository extends JpaRepository<MemberCookie, Long> { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.