Skip to content

Commit 1907600

Browse files
committed
feat: 내 폰트 삭제 기능
1 parent 17f3114 commit 1907600

File tree

6 files changed

+54
-0
lines changed

6 files changed

+54
-0
lines changed

src/main/java/org/fontory/fontorybe/font/controller/FontController.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import lombok.RequiredArgsConstructor;
88
import org.fontory.fontorybe.font.controller.dto.FontCreateDTO;
99
import org.fontory.fontorybe.font.controller.dto.FontCreateResponse;
10+
import org.fontory.fontorybe.font.controller.dto.FontDeleteResponse;
1011
import org.fontory.fontorybe.font.controller.dto.FontDetailResponse;
1112
import org.fontory.fontorybe.font.controller.dto.FontProgressResponse;
1213
import org.fontory.fontorybe.font.controller.dto.FontResponse;
@@ -18,6 +19,7 @@
1819
import org.springframework.data.domain.Pageable;
1920
import org.springframework.http.HttpStatus;
2021
import org.springframework.http.ResponseEntity;
22+
import org.springframework.web.bind.annotation.DeleteMapping;
2123
import org.springframework.web.bind.annotation.GetMapping;
2224
import org.springframework.web.bind.annotation.PathVariable;
2325
import org.springframework.web.bind.annotation.PostMapping;
@@ -101,4 +103,17 @@ public ResponseEntity<?> getFont(@PathVariable Long fontId) {
101103
.status(HttpStatus.OK)
102104
.body(font);
103105
}
106+
107+
@Operation(summary = "내가 제작한 폰트 삭제")
108+
@Parameter(name = "fontId", description = "삭제 할 폰트 ID")
109+
@DeleteMapping("/members/{fontId}")
110+
public ResponseEntity<?> deleteFont(@PathVariable Long fontId) {
111+
Long memberId = 1L;
112+
113+
FontDeleteResponse deletedFont = fontService.delete(memberId, fontId);
114+
115+
return ResponseEntity
116+
.status(HttpStatus.OK)
117+
.body(deletedFont);
118+
}
104119
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.fontory.fontorybe.font.controller.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
import org.fontory.fontorybe.font.domain.Font;
6+
7+
@Getter
8+
@Builder
9+
public class FontDeleteResponse {
10+
private Long id;
11+
12+
public static FontDeleteResponse from(Long fontId) {
13+
return FontDeleteResponse.builder()
14+
.id(fontId)
15+
.build();
16+
}
17+
}

src/main/java/org/fontory/fontorybe/font/controller/port/FontService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44
import org.fontory.fontorybe.font.controller.dto.FontCreateDTO;
5+
import org.fontory.fontorybe.font.controller.dto.FontDeleteResponse;
56
import org.fontory.fontorybe.font.controller.dto.FontDetailResponse;
67
import org.fontory.fontorybe.font.controller.dto.FontProgressResponse;
78
import org.fontory.fontorybe.font.controller.dto.FontResponse;
@@ -16,4 +17,5 @@ public interface FontService {
1617
Font getOrThrowById(Long id);
1718
Page<FontResponse> getFonts(Long memberId, int page, int size);
1819
FontDetailResponse getFont(Long memberId, Long fondId);
20+
FontDeleteResponse delete(Long memberId, Long fontId);
1921
}

src/main/java/org/fontory/fontorybe/font/infrastructure/FontRepositoryImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,9 @@ public Page<Font> findAllByMemberId(Long memberId, PageRequest pageRequest) {
4848

4949
return fontEntityPage.map(FontEntity::toModel);
5050
}
51+
52+
@Override
53+
public void deleteById(Long id) {
54+
fontJpaRepository.deleteById(id);
55+
}
5156
}

src/main/java/org/fontory/fontorybe/font/service/FontServiceImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.stream.Collectors;
55
import lombok.RequiredArgsConstructor;
66
import org.fontory.fontorybe.font.controller.dto.FontCreateDTO;
7+
import org.fontory.fontorybe.font.controller.dto.FontDeleteResponse;
78
import org.fontory.fontorybe.font.controller.dto.FontDetailResponse;
89
import org.fontory.fontorybe.font.controller.dto.FontProgressResponse;
910
import org.fontory.fontorybe.font.controller.dto.FontResponse;
@@ -86,6 +87,19 @@ public FontDetailResponse getFont(Long memberId, Long fontId) {
8687
return FontDetailResponse.from(targetFont);
8788
}
8889

90+
@Override
91+
@Transactional
92+
public FontDeleteResponse delete(Long memberId, Long fontId) {
93+
Member member = memberService.getOrThrowById(memberId);
94+
Font targetFont = getOrThrowById(fontId);
95+
96+
checkFontOwnership(member.getId(), targetFont.getMemberId());
97+
98+
fontRepository.deleteById(targetFont.getId());
99+
100+
return FontDeleteResponse.from(fontId);
101+
}
102+
89103
private void checkFontOwnership(Long requestMemberId, Long targetMemberId) {
90104
if (!requestMemberId.equals(targetMemberId)) {
91105
throw new FontOwnerMismatchException();

src/main/java/org/fontory/fontorybe/font/service/port/FontRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ public interface FontRepository {
1212
List<Font> findTop5ByMemberIdOrderByCreatedAtDesc(Long memberId);
1313
Optional<Font> findById(Long id);
1414
Page<Font> findAllByMemberId(Long memberId, PageRequest pageRequest);
15+
void deleteById(Long id);
1516
}

0 commit comments

Comments
 (0)