Skip to content

Commit 1bfa606

Browse files
authored
Merge pull request #69 from PARADOX-BSSM/dev-0.3
Dev 0.3
2 parents 9f4d931 + e2f9017 commit 1bfa606

19 files changed

Lines changed: 365 additions & 11 deletions

src/main/java/windeath44/server/memorial/domain/anime/model/collection/AnimeTitleSet.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ public void addTitleAnimes(LaftelResultResponse animes) {
2323
});
2424
}
2525

26-
private String normalizeTitle(String name) {
27-
Matcher matcher = pattern.matcher(name);
28-
String normalizeTitle = matcher.replaceAll("").trim();
29-
return normalizeTitle;
26+
private String normalizeTitle(String title) {
27+
if (title == null) return "";
28+
title = title.replaceAll("[\\s\\u200B-\\u200D\\uFEFF\\u00A0]+", "");
29+
title = pattern.matcher(title).replaceAll(""); // 패턴에 맞는 부분 제거
30+
return title.trim(); // 앞뒤 공백 제거
3031
}
3132

3233
public LaftelResultResponse filter(LaftelResultResponse animes) {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package windeath44.server.memorial.domain.character.controller;
2+
3+
import jakarta.validation.Valid;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.http.ResponseEntity;
6+
import org.springframework.web.bind.annotation.*;
7+
import windeath44.server.memorial.domain.character.dto.request.CharacterChangeRequestDto;
8+
import windeath44.server.memorial.domain.character.dto.response.CharacterChangeRequestResponse;
9+
import windeath44.server.memorial.domain.character.service.CharacterChangeRequestCommandService;
10+
import windeath44.server.memorial.global.dto.ResponseDto;
11+
import windeath44.server.memorial.global.util.HttpUtil;
12+
13+
@RestController
14+
@RequiredArgsConstructor
15+
@RequestMapping("/animes/characters/change-requests")
16+
public class CharacterChangeRequestController {
17+
private final CharacterChangeRequestCommandService characterChangeRequestCommandService;
18+
19+
@PostMapping
20+
public ResponseEntity<ResponseDto<CharacterChangeRequestResponse>> create(
21+
@RequestBody @Valid CharacterChangeRequestDto request
22+
) {
23+
CharacterChangeRequestResponse response = characterChangeRequestCommandService.create(request);
24+
ResponseDto<CharacterChangeRequestResponse> responseDto = HttpUtil.success("create character change request", response);
25+
return ResponseEntity.ok(responseDto);
26+
}
27+
28+
@GetMapping("/memorial-commit/{memorial-commit-id}")
29+
public ResponseEntity<ResponseDto<CharacterChangeRequestResponse>> getByMemorialCommitId(
30+
@PathVariable("memorial-commit-id") Long memorialCommitId
31+
) {
32+
CharacterChangeRequestResponse response = characterChangeRequestCommandService.findByMemorialCommitId(memorialCommitId);
33+
ResponseDto<CharacterChangeRequestResponse> responseDto = HttpUtil.success("get character change request by memorial commit id", response);
34+
return ResponseEntity.ok(responseDto);
35+
}
36+
}
37+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package windeath44.server.memorial.domain.character.dto.request;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
5+
import java.time.LocalDateTime;
6+
7+
public record CharacterChangeRequestDto(
8+
@NotNull(message = "characterId is null")
9+
Long characterId,
10+
@NotNull(message = "animeId is null")
11+
Long animeId,
12+
@NotNull(message = "memorialCommitId is null")
13+
Long memorialCommitId,
14+
@NotNull(message = "name is null")
15+
String name,
16+
@NotNull(message = "age is null")
17+
Integer age,
18+
String imageUrl,
19+
String deathOfDay,
20+
String deathReason,
21+
String causeOfDeathDetails,
22+
String saying
23+
) {
24+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package windeath44.server.memorial.domain.character.dto.response;
2+
3+
import java.time.LocalDateTime;
4+
5+
public record CharacterChangeRequestResponse(
6+
Long characterApplicationId,
7+
Long characterId,
8+
Long animeId,
9+
Long memorialCommitId,
10+
String name,
11+
Integer age,
12+
String imageUrl,
13+
String deathOfDay,
14+
String deathReason,
15+
String causeOfDeathDetails,
16+
String saying
17+
) {
18+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package windeath44.server.memorial.domain.character.exception;
2+
3+
import windeath44.server.memorial.global.error.exception.ErrorCode;
4+
import windeath44.server.memorial.global.error.exception.GlobalException;
5+
6+
public class NotFoundCharacterChangeRequestException extends GlobalException {
7+
8+
public NotFoundCharacterChangeRequestException() {
9+
super(ErrorCode.CHARACTER_CHANGE_REQUEST_NOT_FOUND);
10+
}
11+
12+
private static class Holder {
13+
private static final NotFoundCharacterChangeRequestException INSTANCE = new NotFoundCharacterChangeRequestException();
14+
}
15+
16+
public static NotFoundCharacterChangeRequestException getInstance() {
17+
return Holder.INSTANCE;
18+
}
19+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package windeath44.server.memorial.domain.character.mapper;
2+
3+
import org.springframework.stereotype.Component;
4+
import windeath44.server.memorial.domain.anime.model.Anime;
5+
import windeath44.server.memorial.domain.character.dto.request.CharacterChangeRequestDto;
6+
import windeath44.server.memorial.domain.character.dto.response.CharacterChangeRequestResponse;
7+
import windeath44.server.memorial.domain.character.model.Character;
8+
import windeath44.server.memorial.domain.character.model.CharacterChangeRequest;
9+
import windeath44.server.memorial.domain.character.model.type.CauseOfDeath;
10+
import windeath44.server.memorial.domain.character.model.type.CharacterState;
11+
import windeath44.server.memorial.domain.memorial.model.MemorialCommit;
12+
13+
@Component
14+
public class CharacterChangeRequestMapper {
15+
16+
public CharacterChangeRequest toCharacterChangeRequest(
17+
CharacterChangeRequestDto dto,
18+
Character character,
19+
Anime anime,
20+
MemorialCommit memorialCommit
21+
) {
22+
return CharacterChangeRequest.builder()
23+
.character(character)
24+
.anime(anime)
25+
.memorialCommit(memorialCommit)
26+
.name(dto.name())
27+
.age(dto.age())
28+
.imageUrl(dto.imageUrl())
29+
.deathOfDay(dto.deathOfDay())
30+
.deathReason(CauseOfDeath.valueOfDeathReason(dto.deathReason()))
31+
.causeOfDeathDetails(dto.causeOfDeathDetails())
32+
.saying(dto.saying())
33+
.build();
34+
}
35+
36+
public CharacterChangeRequestResponse toCharacterChangeRequestResponse(CharacterChangeRequest request) {
37+
return new CharacterChangeRequestResponse(
38+
request.getCharacterApplicationId(),
39+
request.getCharacter().getCharacterId(),
40+
request.getAnime().getAnimeId(),
41+
request.getMemorialCommit().getMemorialCommitId(),
42+
request.getName(),
43+
request.getAge(),
44+
request.getImageUrl(),
45+
request.getDeathOfDay(),
46+
request.getDeathReason() != null ? request.getDeathReason().getDeathReason() : null,
47+
request.getCauseOfDeathDetails(),
48+
request.getSaying()
49+
);
50+
}
51+
}

src/main/java/windeath44/server/memorial/domain/character/model/Character.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,24 @@ public void update(CharacterRequest characterUpdateRequest) {
7171
this.imageUrl = imageUrl;
7272
}
7373

74+
public void update(CharacterChangeRequest characterChangeRequest) {
75+
String name = characterChangeRequest.getName();
76+
CauseOfDeath deathReason = characterChangeRequest.getDeathReason();
77+
Integer age = characterChangeRequest.getAge();
78+
String deathOfDay = characterChangeRequest.getDeathOfDay();
79+
String saying = characterChangeRequest.getSaying();
80+
String causeOfDeathDetails = characterChangeRequest.getCauseOfDeathDetails();
81+
String imageUrl = characterChangeRequest.getImageUrl();
82+
83+
this.name = name;
84+
this.age = age;
85+
this.deathReason = deathReason;
86+
this.deathOfDay = deathOfDay;
87+
this.saying = saying;
88+
this.causeOfDeathDetails = causeOfDeathDetails;
89+
this.imageUrl = imageUrl;
90+
}
91+
7492
public void updateImage(String imageUrl) {
7593
this.imageUrl = imageUrl;
7694
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package windeath44.server.memorial.domain.character.model;
2+
3+
import jakarta.persistence.*;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import windeath44.server.memorial.domain.anime.model.Anime;
9+
import windeath44.server.memorial.domain.character.model.type.CauseOfDeath;
10+
import windeath44.server.memorial.domain.character.model.type.CharacterState;
11+
import windeath44.server.memorial.domain.memorial.model.MemorialCommit;
12+
13+
import java.time.LocalDateTime;
14+
15+
@Entity
16+
@NoArgsConstructor
17+
@AllArgsConstructor
18+
@Builder
19+
@Getter
20+
@Table(name = "character_change_request")
21+
public class CharacterChangeRequest {
22+
@Id
23+
@GeneratedValue(strategy = GenerationType.IDENTITY)
24+
private Long characterApplicationId;
25+
26+
@ManyToOne
27+
@JoinColumn(name = "character_id")
28+
private Character character;
29+
30+
@ManyToOne
31+
@JoinColumn(name = "anime_id")
32+
private Anime anime;
33+
34+
@OneToOne
35+
@JoinColumn(name = "memorial_commit_id")
36+
private MemorialCommit memorialCommit;
37+
38+
private String name;
39+
private Integer age;
40+
private String imageUrl;
41+
private String deathOfDay;
42+
@Enumerated(EnumType.STRING)
43+
private CauseOfDeath deathReason;
44+
private String causeOfDeathDetails;
45+
private String saying;
46+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package windeath44.server.memorial.domain.character.repository;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.springframework.stereotype.Repository;
5+
import windeath44.server.memorial.domain.character.model.CharacterChangeRequest;
6+
7+
import java.util.Optional;
8+
9+
@Repository
10+
public interface CharacterChangeRequestRepository extends JpaRepository<CharacterChangeRequest, Long> {
11+
Optional<CharacterChangeRequest> findByMemorialCommitMemorialCommitId(Long memorialCommitId);
12+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package windeath44.server.memorial.domain.character.service;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.stereotype.Service;
5+
import org.springframework.transaction.annotation.Transactional;
6+
import windeath44.server.memorial.domain.anime.model.Anime;
7+
import windeath44.server.memorial.domain.anime.service.AnimeService;
8+
import windeath44.server.memorial.domain.character.exception.NotFoundCharacterChangeRequestException;
9+
import windeath44.server.memorial.domain.character.dto.request.CharacterChangeRequestDto;
10+
import windeath44.server.memorial.domain.character.dto.response.CharacterChangeRequestResponse;
11+
import windeath44.server.memorial.domain.character.mapper.CharacterChangeRequestMapper;
12+
import windeath44.server.memorial.domain.character.model.Character;
13+
import windeath44.server.memorial.domain.character.model.CharacterChangeRequest;
14+
import windeath44.server.memorial.domain.character.repository.CharacterChangeRequestRepository;
15+
import windeath44.server.memorial.domain.memorial.model.MemorialCommit;
16+
import windeath44.server.memorial.domain.memorial.service.MemorialCommitService;
17+
18+
@Service
19+
@RequiredArgsConstructor
20+
@Transactional
21+
public class CharacterChangeRequestCommandService {
22+
private final CharacterChangeRequestRepository characterChangeRequestRepository;
23+
private final CharacterChangeRequestMapper characterChangeRequestMapper;
24+
private final CharacterCommandService characterCommandService;
25+
private final AnimeService animeService;
26+
private final MemorialCommitService memorialCommitService;
27+
28+
public CharacterChangeRequestResponse create(CharacterChangeRequestDto dto) {
29+
Character character = characterCommandService.findById(dto.characterId());
30+
Anime anime = animeService.getAnime(dto.animeId());
31+
MemorialCommit memorialCommit = memorialCommitService.findById(dto.memorialCommitId());
32+
33+
CharacterChangeRequest characterChangeRequest = characterChangeRequestMapper.toCharacterChangeRequest(
34+
dto, character, anime, memorialCommit
35+
);
36+
37+
CharacterChangeRequest saved = characterChangeRequestRepository.save(characterChangeRequest);
38+
return characterChangeRequestMapper.toCharacterChangeRequestResponse(saved);
39+
}
40+
41+
@Transactional(readOnly = true)
42+
public CharacterChangeRequestResponse findByMemorialCommitId(Long memorialCommitId) {
43+
CharacterChangeRequest request = characterChangeRequestRepository
44+
.findByMemorialCommitMemorialCommitId(memorialCommitId)
45+
.orElseThrow(NotFoundCharacterChangeRequestException::getInstance);
46+
47+
return characterChangeRequestMapper.toCharacterChangeRequestResponse(request);
48+
}
49+
}
50+

0 commit comments

Comments
 (0)