[Spring] 24시간 뒤 사라지는 메모

박연주·2022년 5월 28일
0

Spring

목록 보기
2/24

🐳 API 설계

src
main
ㄴ resources 
		ㄴ static
        	ㄴ images
            ㄴ index.html
		ㄴ templates
        ㄴ application.properties
ㄴ java 
	ㄴ com.sparta.week03
                ㄴ controller
                        ㄴ MemoController
                ㄴ domain 
                        ㄴ Memo
                        ㄴ MemoRepository (i)
                        ㄴ MemoRequestDto
                        ㄴ Timestamped
                ㄴ sevice
                        ㄴ MemoService
                ㄴ Week03Application

1. Controller : 가장 바깥, 요청/응답 처리
2. Service : 중간, 실제 중요한 작동이 많이 일어나는 부분
3. Repo : 가장 안쪽, DB와 맞닿아 있음.(repo, entity)

CRUD

타임라인 API

기능MethodURLReturn
메모 생성POST/api/memos/Memo
메모 조회GET/api/memosList<Memo>
메모 변경PUT/api/memos/{id}Long
메모 삭제DELETE/api/memos/{id}Long
Service - @Transactional DB에 반영이 꼭 되게
Controller - @RequiredArgsConstructor
		   - @RestController - new MemoController 이런걸 자동으로 생성
		   - @PathVairable 주소에 있는 걸 사용
		   - @RequestBody 요청할 때 body에 있는 걸 받아서 넣어줘

Week03Appliacation - @EnableJpaAuditing JPA 사용가능


🐳 Repository

domain 
   ㄴ Memo
   ㄴ MemoRepository (i)
   ㄴ MemoRequestDto
   ㄴ Timestamped

1. domain 패키지 안에 Memo.java 만들기

2. Timestamped.java 만들기

# Timestamped.java
@Getter
@MappedSuperclass // Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트
public abstract class Timestamped {

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedAt;
}

3. MemoRepository 인터페이스 만들기

public interface MemoRepository extends JpaRepository<Memo, Long> {
	List<Memo> findAllByOrderByModifiedAtDesc();
}

4. MemoRequestDto 클래스 만들기

@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}


🐳 Service

service
	ㄴ MemoService

1. MemoService.java 만들기

@RequiredArgsConstructor
@Service
public class MemoService {

    private final MemoRepository memoRepository;

    @Transactional
    public Long update(Long id, MemoRequestDto requestDto) {
        Memo memo = memoRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
        );
        memo.update(requestDto);
        return memo.getId();
    }
}

2. update 기능 만들기

# Memo.java 에 메소드추가
public void update(MemoRequestDto requestDto) {
    this.username = requestDto.getUsername();
    this.contents = requestDto.getContents();
}



🐳 Controller

Controllter
	ㄴ MemoController

1. Memocontroller.java 만들기

@RequiredArgsConstructor
@RestController
public class MemoController {

    private final MemoRepository memoRepository;
    private final MemoService memoService;
    
    @PostMapping("/api/memos")
    public Memo creatMemo(@RequestBody MemoRequestDto requestDto) {
        Memo memo = new Memo(requestDto);
       return memoRepository.save(memo);
    }
    
    @GetMapping
    
    @PutMapping
    
    @DeleteMappint
}




🐳 Memo 생성

writePost()
1. 사용자가 입력한 메모 내용 확인
2. POST API 사용해서 메모 신규 생성
3. 화면 새로고침하여 업데이트된 메모 목록 확인

🐳 Memo 조회

getMessages()
1. 기존 메모 제거(html)
2. GET API  사용해서 메모 목록 불러오기 
3. 메모마다 html 만들고 붙이는 함수 만들기

24시간 이내 포스팅만 가져오기

# MemoRepository.java
public interface MemoRepository extends JpaRepository<Memo, Long> {
    List<Memo> findAllByModifiedAtBetweenOrderByModifiedAtDesc(LocalDateTime start, LocalDateTime end);
}

# MemoController.java
@GetMapping("/api/memos")
    public List<Memo> getMemos() {
        LocalDateTime start = LocalDateTime.now().minusDays(1);
        LocalDateTime end = LocalDateTime.now();
        return memoRepository.findAllByModifiedAtBetweenOrderByModifiedAtDesc(start, end);
    }

🐳 Memo 수정

submitEdit()
1. 작성 대상의 메모 username과 contents를 확인
2. 작성한 메모가 올바른지 확인
3. 전달할 data를 json으로 바꾸기
4. PUT /api/memos/{id}에 data를 전달
<div class="contents">
  <div id="${id}-contents" class="text">  // 수정 안할 때
    ${contents}
  </div>
  <div id="${id}-editarea" class="edit">  // 수정할 때
    <textarea id="${id}-textarea" class="te-edit" name="" id="" cols="30" rows="5"></textarea>
  </div>
</div>

# 수정할 때 edit div에서 가져옴 
let contents = $(`#${id}-textarea`).val().trim();

🐳 Memo 삭제

deleteOne()
1. DELETE API 사용해서 메모 삭제

profile
하루에 한 개념씩

0개의 댓글