[Toy] 감정일기 CRUD 구현 과정

서연·2023년 8월 30일
0

toy-project-1

목록 보기
2/5
post-thumbnail
  1. 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;
    }
}

  1. 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;

}
  1. 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);
    }

}
profile
삽질 기록장/ 📍다른 삽질 기록장 https://sqlimblife.tistory.com/

0개의 댓글