Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions src/main/java/com/example/team4backend/domain/Event.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.example.team4backend.domain;

import com.example.team4backend.common.domain.BaseTimeEntity;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDate;

@Entity
@Table(name = "events")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Event extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "target_person_id", nullable = false)
private TargetPerson targetPerson;

@Column(nullable = false)
private LocalDate date;

@Column(nullable = false, columnDefinition = "TEXT")
private String description;

@Builder
public Event(TargetPerson targetPerson, LocalDate date, String description) {
this.targetPerson = targetPerson;
this.date = date;
this.description = description;
}

public void update(LocalDate date, String description) {
this.date = date;
this.description = description;
}
}
32 changes: 14 additions & 18 deletions src/main/java/com/example/team4backend/domain/TargetPerson.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

import java.time.Instant;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "target_people")
Expand All @@ -30,16 +32,12 @@ public class TargetPerson extends BaseTimeEntity {
private String phoneNumber;

private LocalDate birthday;
private String job;

@Column(columnDefinition = "TEXT")
private String interests;

@Column(columnDefinition = "TEXT")
private String events;

@Column(columnDefinition = "TEXT")
private String memo;
@OneToMany(mappedBy = "targetPerson", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Event> events = new ArrayList<>();

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "relationship_id", nullable = false)
Expand All @@ -52,43 +50,41 @@ public class TargetPerson extends BaseTimeEntity {
private Instant deletedAt;

@Builder
public TargetPerson(User user, String name, Relationship relationship, ChatStyle chatStyle, Integer age, String phoneNumber, LocalDate birthday, String job, String interests,
String events, String memo) {
public TargetPerson(User user, String name, Relationship relationship, ChatStyle chatStyle, Integer age, String phoneNumber, LocalDate birthday, String interests) {
this.user = user;
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
this.birthday = birthday;
this.job = job;
this.interests = interests;
this.events = events;
this.memo = memo;
this.relationship = relationship;
this.chatStyle = chatStyle;
this.deletedAt = null;
}

public void addEvent(Event event) {
this.events.add(event);
}

public void clearEvents() {
this.events.clear();
}

public void update(
String name,
Relationship relationship,
ChatStyle chatStyle,
Integer age,
String phoneNumber,
LocalDate birthday,
String job,
String interests,
String events,
String memo
String interests
) {
this.name = name;
this.relationship = relationship;
this.chatStyle = chatStyle;
this.age = age;
this.phoneNumber = phoneNumber;
this.birthday = birthday;
this.job = job;
this.interests = interests;
this.events = events;
this.memo = memo;
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/example/team4backend/dto/EventRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example.team4backend.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

import java.time.LocalDate;

@Schema(description = "이벤트 정보 요청")
public record EventRequest(
@Schema(description = "이벤트 날짜", example = "2025-01-10")
@NotNull(message = "이벤트 날짜는 필수입니다.")
LocalDate date,

@Schema(description = "이벤트 설명", example = "결혼기념일")
@NotBlank(message = "이벤트 설명은 필수입니다.")
String description
) {
}
26 changes: 26 additions & 0 deletions src/main/java/com/example/team4backend/dto/EventResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.example.team4backend.dto;

import com.example.team4backend.domain.Event;
import io.swagger.v3.oas.annotations.media.Schema;

import java.time.LocalDate;

@Schema(description = "이벤트 정보 응답")
public record EventResponse(
@Schema(description = "이벤트 ID", example = "1")
Long id,

@Schema(description = "이벤트 날짜", example = "2025-01-10")
LocalDate date,

@Schema(description = "이벤트 설명", example = "결혼기념일")
String description
) {
public static EventResponse from(Event event) {
return new EventResponse(
event.getId(),
event.getDate(),
event.getDescription()
);
}
}
21 changes: 9 additions & 12 deletions src/main/java/com/example/team4backend/dto/TargetRequest.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package com.example.team4backend.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate;
import java.util.List;

@Schema(description = "상대방 정보 등록 요청")
public record TargetRequest(
@Schema(description = "이름", example = "홍길동")
@NotBlank(message = "이름은 필수입니다.")
String name,

@Schema(description = "관계", example = "1")
@NotNull
@Schema(description = "관계 ID", example = "1")
@NotNull(message = "관계는 필수입니다.")
Long relationshipId,

@Schema(description = "채팅 스타일", example = "1")
@NotNull
@Schema(description = "채팅 스타일 ID", example = "1")
@NotNull(message = "채팅 스타일은 필수입니다.")
Long chatStyleId,

@Schema(description = "나이", example = "25")
Expand All @@ -28,16 +30,11 @@ public record TargetRequest(
@Schema(description = "생일", example = "1999-12-17")
LocalDate birthday,

@Schema(description = "직업", example = "개발자")
String job,

@Schema(description = "관심사 및 취미", example = "축구, 영화 감상, 맛집 탐방")
String interests,

@Schema(description = "최근 이벤트", example = "최근에 새로운 프로젝트를 시작함")
String events,

@Schema(description = "기타 메모", example = "말투가 다정하고 리액션이 좋음")
String memo
@Schema(description = "이벤트 목록")
@Valid
List<EventRequest> events
) {
}
17 changes: 6 additions & 11 deletions src/main/java/com/example/team4backend/dto/TargetResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.swagger.v3.oas.annotations.media.Schema;

import java.time.LocalDate;
import java.util.List;

public record TargetResponse(
@Schema(description = "이름", example = "홍길동")
Expand All @@ -24,17 +25,11 @@ public record TargetResponse(
@Schema(description = "생일", example = "1999-12-17")
LocalDate birthday,

@Schema(description = "직업", example = "개발자")
String job,

@Schema(description = "관심사 및 취미", example = "축구, 영화 감상, 맛집 탐방")
String interests,

@Schema(description = "최근 이벤트", example = "최근에 새로운 프로젝트를 시작함")
String events,

@Schema(description = "기타 메모", example = "말투가 다정하고 리액션이 좋음")
String memo
@Schema(description = "이벤트 목록")
List<EventResponse> events
){
public static TargetResponse from(TargetPerson target) {
return new TargetResponse(
Expand All @@ -44,10 +39,10 @@ public static TargetResponse from(TargetPerson target) {
target.getAge(),
target.getPhoneNumber(),
target.getBirthday(),
target.getJob(),
target.getInterests(),
target.getEvents(),
target.getMemo()
target.getEvents().stream()
.map(EventResponse::from)
.toList()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.team4backend.repository;

import com.example.team4backend.domain.Event;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface EventRepository extends JpaRepository<Event, Long> {
List<Event> findByTargetPersonId(Long targetPersonId);
void deleteByTargetPersonId(Long targetPersonId);
}
42 changes: 33 additions & 9 deletions src/main/java/com/example/team4backend/service/TargetService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.example.team4backend.common.error.ErrorCode;
import com.example.team4backend.domain.ChatStyle;
import com.example.team4backend.domain.Event;
import com.example.team4backend.domain.Relationship;
import com.example.team4backend.domain.TargetPerson;
import com.example.team4backend.domain.User;
Expand All @@ -10,6 +11,7 @@
import com.example.team4backend.dto.TargetResponse;
import com.example.team4backend.exception.BusinessException;
import com.example.team4backend.repository.ChatStyleRepository;
import com.example.team4backend.repository.EventRepository;
import com.example.team4backend.repository.RelationshipRepository;
import com.example.team4backend.repository.TargetPersonRepository;
import com.example.team4backend.repository.UserRepository;
Expand All @@ -27,6 +29,7 @@ public class TargetService {
private final UserRepository userRepository;
private final RelationshipRepository relationshipRepository;
private final ChatStyleRepository chatStyleRepository;
private final EventRepository eventRepository;

@Transactional
public Long addTarget(Long userId, TargetRequest dto) {
Expand All @@ -47,17 +50,28 @@ public Long addTarget(Long userId, TargetRequest dto) {
.age(dto.age())
.phoneNumber(dto.phoneNumber())
.birthday(dto.birthday())
.job(dto.job())
.interests(dto.interests())
.events(dto.events())
.memo(dto.memo())
.build();

TargetPerson savedTarget = targetPersonRepository.save(target);

// 이벤트 저장
if (dto.events() != null && !dto.events().isEmpty()) {
dto.events().forEach(eventDto -> {
Event event = Event.builder()
.targetPerson(savedTarget)
.date(eventDto.date())
.description(eventDto.description())
.build();
savedTarget.addEvent(event);
});
}

if (!user.isOnboarded()) {
user.completeOnboarding();
}

return targetPersonRepository.save(target).getId();
return savedTarget.getId();
}

@Transactional(readOnly = true)
Expand Down Expand Up @@ -108,11 +122,21 @@ public void updateTarget(Long userId, Long targetId, TargetRequest dto) {
dto.age(),
dto.phoneNumber(),
dto.birthday(),
dto.job(),
dto.interests(),
dto.events(),
dto.memo()
);
dto.interests()
);

// 기존 이벤트 삭제 후 새로 추가
target.clearEvents();
if (dto.events() != null && !dto.events().isEmpty()) {
dto.events().forEach(eventDto -> {
Event event = Event.builder()
.targetPerson(target)
.date(eventDto.date())
.description(eventDto.description())
.build();
target.addEvent(event);
});
}
}

@Transactional
Expand Down
Loading