Skip to content

Commit 7a417b0

Browse files
authored
Merge pull request #4 from CAPS-DGU/revert-3-feat/#2-wiki
Revert "[feat] 위키 수정 기록 로직 수정"
2 parents b3e3f87 + c8073ce commit 7a417b0

10 files changed

Lines changed: 39 additions & 146 deletions

File tree

src/main/java/kr/dgucaps/caps/domain/member/entity/Member.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import jakarta.persistence.*;
44
import kr.dgucaps.caps.domain.common.entity.BaseTimeEntity;
55
import kr.dgucaps.caps.domain.wiki.entity.Wiki;
6-
import kr.dgucaps.caps.domain.wiki.entity.WikiHistory;
76
import lombok.AccessLevel;
87
import lombok.Builder;
98
import lombok.Getter;
@@ -85,12 +84,9 @@ public Member(String kakaoId, String name, String email, String phoneNumber, Str
8584
this.isDeleted = false;
8685
}
8786

88-
@OneToMany(mappedBy = "member")
87+
@OneToMany(mappedBy = "editor")
8988
List<Wiki> wikis = new ArrayList<>();
9089

91-
@OneToMany(mappedBy = "member")
92-
List<WikiHistory> wikiHistories = new ArrayList<>();
93-
9490
public void completeRegistration(String studentNumber, float grade) {
9591
this.studentNumber = studentNumber;
9692
this.grade = grade;

src/main/java/kr/dgucaps/caps/domain/wiki/controller/WikiApi.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,17 @@
2121
public interface WikiApi {
2222

2323
@Operation(
24-
summary = "위키 작성",
25-
description = "위키를 작성합니다."
24+
summary = "위키 작성 & 수정",
25+
description = "위키를 작성하거나 수정합니다. \n" +
26+
"title이 존재하지 않으면 새로 작성하고, 존재하면 수정합니다."
2627
)
27-
@ApiResponse(responseCode = "200", description = "위키 작성 성공",
28+
@ApiResponse(responseCode = "200", description = "위키 작성/수정 성공",
2829
content = @Content(mediaType = "application/json",
2930
schema = @Schema(implementation = WikiResponse.class))
3031
)
3132
ResponseEntity<SuccessResponse<?>> createWiki(@AuthenticationPrincipal Long memberId,
3233
@Valid @RequestBody CreateOrModifyWikiRequest request);
3334

34-
@Operation(
35-
summary = "위키 수정",
36-
description = "위키를 수정합니다."
37-
)
38-
@ApiResponse(responseCode = "200", description = "위키 수정 성공",
39-
content = @Content(mediaType = "application/json",
40-
schema = @Schema(implementation = WikiResponse.class))
41-
)
42-
ResponseEntity<SuccessResponse<?>> modifyWiki(@AuthenticationPrincipal Long memberId,
43-
@Valid @RequestBody CreateOrModifyWikiRequest request);
44-
4535
@Operation(
4636
summary = "위키 조회",
4737
description = "title에 해당하는 위키를 조회합니다."

src/main/java/kr/dgucaps/caps/domain/wiki/controller/WikiController.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,7 @@ public class WikiController implements WikiApi {
2121
@PostMapping
2222
public ResponseEntity<SuccessResponse<?>> createWiki(@AuthenticationPrincipal Long memberId,
2323
@Valid @RequestBody CreateOrModifyWikiRequest request) {
24-
return SuccessResponse.ok(wikiService.createWiki(memberId, request));
25-
}
26-
27-
@PreAuthorize("hasAnyRole('MEMBER', 'GRADUATE', 'COUNCIL', 'PRESIDENT', 'ADMIN')")
28-
@PatchMapping
29-
public ResponseEntity<SuccessResponse<?>> modifyWiki(@AuthenticationPrincipal Long memberId,
30-
@Valid @RequestBody CreateOrModifyWikiRequest request) {
31-
return SuccessResponse.ok(wikiService.modifyWiki(memberId, request));
24+
return SuccessResponse.ok(wikiService.createOrModifyWiki(memberId, request));
3225
}
3326

3427
@GetMapping("/{title}")

src/main/java/kr/dgucaps/caps/domain/wiki/dto/request/CreateOrModifyWikiRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public record CreateOrModifyWikiRequest(
1010
) {
1111
public Wiki toEntity(Member member) {
1212
return Wiki.builder()
13-
.member(member)
13+
.editor(member)
1414
.title(title)
1515
.content(content)
1616
.build();

src/main/java/kr/dgucaps/caps/domain/wiki/dto/response/WikiResponse.java

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

33
import kr.dgucaps.caps.domain.dto.MemberSummary;
44
import kr.dgucaps.caps.domain.wiki.entity.Wiki;
5-
import kr.dgucaps.caps.domain.wiki.entity.WikiHistory;
65
import lombok.Builder;
76

87
import java.time.LocalDateTime;
@@ -11,27 +10,15 @@
1110
public record WikiResponse(
1211
String title,
1312
String content,
14-
MemberSummary member,
15-
LocalDateTime createdAt,
16-
LocalDateTime updatedAt
13+
MemberSummary editor,
14+
LocalDateTime createdAt
1715
) {
1816
public static WikiResponse from(Wiki wiki) {
1917
return WikiResponse.builder()
2018
.title(wiki.getTitle())
2119
.content(wiki.getContent())
22-
.member(MemberSummary.from(wiki.getMember()))
20+
.editor(MemberSummary.from(wiki.getEditor()))
2321
.createdAt(wiki.getCreatedAt())
24-
.updatedAt(wiki.getUpdatedAt())
25-
.build();
26-
}
27-
28-
public static WikiResponse from(WikiHistory wikiHistory) {
29-
return WikiResponse.builder()
30-
.title(wikiHistory.getTitle())
31-
.content(wikiHistory.getContent())
32-
.member(MemberSummary.from(wikiHistory.getMember()))
33-
.createdAt(wikiHistory.getCreatedAt())
34-
.updatedAt(wikiHistory.getUpdatedAt())
3522
.build();
3623
}
3724
}

src/main/java/kr/dgucaps/caps/domain/wiki/entity/Wiki.java

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,39 @@
77
import lombok.Builder;
88
import lombok.Getter;
99
import lombok.NoArgsConstructor;
10-
11-
import java.util.ArrayList;
12-
import java.util.List;
10+
import org.hibernate.annotations.ColumnDefault;
11+
import org.hibernate.annotations.SQLDelete;
1312

1413
@Entity
1514
@Getter
1615
@Table(name = "wiki")
1716
@NoArgsConstructor(access = AccessLevel.PROTECTED)
17+
@SQLDelete(sql = "UPDATE wiki SET is_deleted = true WHERE id = ?")
1818
public class Wiki extends BaseTimeEntity {
1919

2020
@Id
2121
@GeneratedValue(strategy = GenerationType.IDENTITY)
2222
private Long id;
2323

2424
@ManyToOne(fetch = FetchType.LAZY)
25-
@JoinColumn(name = "member_id", nullable = false)
26-
private Member member;
25+
@JoinColumn(name = "editor_id", nullable = false)
26+
private Member editor;
2727

2828
@Column(nullable = false)
2929
private String title;
3030

3131
@Column(nullable = false, columnDefinition = "TEXT")
3232
private String content;
3333

34-
@Builder
35-
public Wiki(Member member, String title, String content) {
36-
this.member = member;
37-
this.title = title;
38-
this.content = content;
39-
}
40-
41-
@OneToMany(mappedBy = "wiki")
42-
private List<WikiHistory> wikiHistories = new ArrayList<>();
34+
@Column(nullable = false)
35+
@ColumnDefault("false")
36+
private boolean isDeleted;
4337

44-
public void updateWiki(Member member, String title, String content) {
45-
this.member = member;
38+
@Builder
39+
public Wiki(Member editor, String title, String content) {
40+
this.editor = editor;
4641
this.title = title;
4742
this.content = content;
43+
this.isDeleted = false;
4844
}
4945
}

src/main/java/kr/dgucaps/caps/domain/wiki/entity/WikiHistory.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/main/java/kr/dgucaps/caps/domain/wiki/repository/WikiHistoryRepository.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/main/java/kr/dgucaps/caps/domain/wiki/repository/WikiRepository.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package kr.dgucaps.caps.domain.wiki.repository;
22

33
import kr.dgucaps.caps.domain.wiki.entity.Wiki;
4-
import org.springframework.data.jpa.repository.EntityGraph;
54
import org.springframework.data.jpa.repository.JpaRepository;
65
import org.springframework.data.jpa.repository.Query;
76
import org.springframework.stereotype.Repository;
@@ -12,13 +11,18 @@
1211
@Repository
1312
public interface WikiRepository extends JpaRepository<Wiki, Long> {
1413

15-
@EntityGraph(attributePaths = {"member"})
16-
Optional<Wiki> findByTitle(String title);
14+
boolean existsByTitleAndIsDeletedFalse(String title);
1715

18-
@Query("SELECT w FROM Wiki w ORDER BY RAND() LIMIT 1")
16+
void deleteByTitleAndIsDeletedFalse(String title);
17+
18+
Optional<Wiki> findByTitleAndIsDeletedFalse(String title);
19+
20+
List<Wiki> findByTitleOrderByCreatedAtDesc(String title);
21+
22+
@Query("SELECT w FROM Wiki w WHERE w.isDeleted = false ORDER BY RAND() LIMIT 1")
1923
Optional<Wiki> findRandomWiki();
2024

21-
List<Wiki> findFirst10ByOrderByUpdatedAtDesc();
25+
List<Wiki> findFirst10ByIsDeletedFalseOrderByCreatedAtDesc();
2226

2327
@Query("SELECT w.title FROM Wiki w WHERE w.isDeleted = false")
2428
List<String> findAllTitle();

src/main/java/kr/dgucaps/caps/domain/wiki/service/WikiService.java

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
import kr.dgucaps.caps.domain.wiki.dto.response.WikiResponse;
99
import kr.dgucaps.caps.domain.wiki.dto.response.WikiTitleResponse;
1010
import kr.dgucaps.caps.domain.wiki.entity.Wiki;
11-
import kr.dgucaps.caps.domain.wiki.entity.WikiHistory;
12-
import kr.dgucaps.caps.domain.wiki.repository.WikiHistoryRepository;
1311
import kr.dgucaps.caps.domain.wiki.repository.WikiRepository;
1412
import kr.dgucaps.caps.global.error.ErrorCode;
1513
import kr.dgucaps.caps.global.error.exception.EntityNotFoundException;
@@ -31,43 +29,27 @@ public class WikiService {
3129
private final WikiRepository wikiRepository;
3230
private final MemberRepository memberRepository;
3331
private final AutocompleteService autocompleteService;
34-
private final WikiHistoryRepository wikiHistoryRepository;
3532

3633
@Transactional
37-
public WikiResponse createWiki(Long memberId, CreateOrModifyWikiRequest request) {
34+
public WikiResponse createOrModifyWiki(Long memberId, CreateOrModifyWikiRequest request) {
35+
if (wikiRepository.existsByTitleAndIsDeletedFalse(request.title())) {
36+
wikiRepository.deleteByTitleAndIsDeletedFalse(request.title());
37+
}
3838
Member member = memberRepository.findById(memberId)
3939
.orElseThrow(() -> new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND));
4040
Wiki savedWiki = wikiRepository.save(request.toEntity(member));
4141
return WikiResponse.from(savedWiki);
4242
}
4343

44-
@Transactional
45-
public WikiResponse modifyWiki(Long memberId, CreateOrModifyWikiRequest request) {
46-
Member member = memberRepository.findById(memberId)
47-
.orElseThrow(() -> new EntityNotFoundException(ErrorCode.MEMBER_NOT_FOUND));
48-
Wiki wiki = wikiRepository.findByTitle(request.title())
49-
.orElseThrow(() -> new EntityNotFoundException(ErrorCode.WIKI_NOT_FOUND));
50-
WikiHistory wikiHistory = WikiHistory.builder()
51-
.wiki(wiki)
52-
.member(wiki.getMember())
53-
.title(wiki.getTitle())
54-
.content(wiki.getContent())
55-
.build();
56-
wikiHistoryRepository.save(wikiHistory);
57-
wiki.updateWiki(member, request.title(), request.content());
58-
Wiki updatedWiki = wikiRepository.save(wiki);
59-
return WikiResponse.from(updatedWiki);
60-
}
61-
6244
public WikiResponse getWiki(String title) {
63-
Wiki wiki = wikiRepository.findByTitle(title)
45+
Wiki wiki = wikiRepository.findByTitleAndIsDeletedFalse(title)
6446
.orElseThrow(() -> new EntityNotFoundException(ErrorCode.WIKI_NOT_FOUND));
6547
return WikiResponse.from(wiki);
6648
}
6749

6850
public List<WikiResponse> getWikiHistory(String title) {
69-
List<WikiHistory> wikiHistories = wikiHistoryRepository.findByTitleOrderByCreatedAtDesc(title);
70-
return wikiHistories.stream()
51+
List<Wiki> wikiHistory = wikiRepository.findByTitleOrderByCreatedAtDesc(title);
52+
return wikiHistory.stream()
7153
.map(WikiResponse::from)
7254
.collect(Collectors.toList());
7355
}
@@ -79,7 +61,7 @@ public WikiResponse getRandomWiki() {
7961
}
8062

8163
public List<WikiTitleResponse> getRecentWiki() {
82-
List<Wiki> recentWikis = wikiRepository.findFirst10ByOrderByUpdatedAtDesc();
64+
List<Wiki> recentWikis = wikiRepository.findFirst10ByIsDeletedFalseOrderByCreatedAtDesc();
8365
return recentWikis.stream()
8466
.map(WikiTitleResponse::from)
8567
.collect(Collectors.toList());

0 commit comments

Comments
 (0)