- Diary Entity
package Toy_Project.diary.Entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
@Entity
@Table(name = "diary")
@Getter
@Setter
@ToString
public class Diary{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "nickname", referencedColumnName = "nickname")
private User user;
@Id
@Column(name = "diary_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long diaryId;
@Column(name = "diary_name", unique = true)
private String diaryName;
@Column(name = "diary_detail")
private String diaryDetail;
@Column(name = "emotion")
private String emotion;
@Column(name = "add_time", unique = true)
private LocalDate addDate;
public static Diary createDiary(User user){
Diary diary = new Diary();
diary.setUser(user);
diary.setDiaryName(diary.getDiaryName());
diary.setDiaryDetail(diary.getDiaryDetail());
diary.setEmotion(diary.getEmotion());
diary.setAddDate(diary.getAddDate());
return diary;
}
}
- DiaryDto
- 일기 작성 시 유저가 입력할 값
- 생각한 구조 : 일기 작성에 필요한 값 입력 -> 감정 판단 api 따로 호출 -> 감정 setting 까지 끝나면 일기 저장
- 초기에 감정은 유저가 설정 불가. 인공지능이 자동으로 감정을 판단하고 -> 이후 결과가 마음에 안들 경우 수정하도록 구현 (논의 필요)
package Toy_Project.diary.dto;
import jakarta.persistence.Column;
import jakarta.validation.constraints.NotBlank;
import lombok.*;
import java.time.LocalDate;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DiaryDto {
// 필수로 값이 오도록 지정
@NotBlank
private String diaryName;
@NotBlank
private String diaryDetail;
@Column(name = "add_time", unique = true)
private LocalDate addDate;
}
- DiaryService
- 일기 저장을 누름으로써 감정을 response
- 객체 찾아서 일기 저장
- 감정판단 모델에 대한 FastAPI가 제작되면 감정 호출이 되는 로직까지 구현 예정
package Toy_Project.diary.service;
import Toy_Project.diary.Entity.Diary;
import Toy_Project.diary.Entity.User;
import Toy_Project.diary.Repository.DiaryRepository;
import Toy_Project.diary.Repository.UserRepository;
import Toy_Project.diary.dto.DiaryDto;
import Toy_Project.diary.dto.ResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.Optional;
@Service
@Transactional
@RequiredArgsConstructor
public class DiaryService {
@Autowired DiaryRepository diaryRepository;
@Autowired UserRepository userRepository;
public ResponseDto<?> createDiary(DiaryDto dto, String userEmail) {
String userDiaryDetail = dto.getDiaryDetail();
LocalDate userAddDate = dto.getAddDate();
User user = userRepository.findByEmail(userEmail);
try {
if (user == null) {
return ResponseDto.setFailed("user not existed");
}
} catch (Exception error) {
return ResponseDto.setFailed("Data Base Error");
}
// email + 생상 날짜로 이뤄진 일기 이름 생성
String userDiaryName = user.getEmail() + ' ' + userAddDate;
// 감정 판단 과정 - userDiaryDetail을 이용하여 요청을 생성하고 특정 API에 보내서 감정 값을 받아옴
String userEmotion = "기쁨";
// DiaryEntity 생성
Diary userDiary = new Diary();
userDiary.setUser(user);
userDiary.setDiaryName(userDiaryName);
userDiary.setDiaryDetail(userDiaryDetail);
userDiary.setAddDate(userAddDate);
userDiary.setEmotion(userEmotion);
try {
// userDiary를 이용해서 데이터베이스에 Entity 저장
diaryRepository.save(userDiary);
} catch (Exception error) {
return ResponseDto.setFailed("Data Base Error");
}
// 성공시 success response 반환
return ResponseDto.setSuccess("Complete Create Diary", userEmotion);
}
}