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
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.cake.pop.domain.letter.controller;

import com.cake.pop.domain.letter.dto.request.CreateLetterRequest;
import com.cake.pop.domain.letter.dto.response.GetLettersResponse;
import com.cake.pop.domain.letter.service.LetterService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
Expand All @@ -18,9 +21,14 @@ public class LetterController {
private final LetterService letterService;

@PostMapping
public ResponseEntity<Void> createLetter(@RequestBody @Valid CreateLetterRequest request){
public ResponseEntity<Void> createLetter(@RequestBody @Valid CreateLetterRequest request) {
letterService.create(request);

return ResponseEntity.ok().build();
}

@GetMapping
public ResponseEntity<GetLettersResponse> getLetters(@RequestParam("region") String region) {
GetLettersResponse response = letterService.getLetters(region);
return ResponseEntity.ok(response);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
package com.cake.pop.domain.letter.dto.response;

public record GetLettersResponse() {
import java.util.List;

public record GetLettersResponse(
String region,
List<SimpleLetterDto> letters
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.cake.pop.domain.letter.dto.response;

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDate;

public record SimpleLetterDto(
Long letterId,
String content,
@JsonFormat(pattern = "yy.MM.dd")
LocalDate createdAt
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@

import com.cake.pop.domain.letter.exception.LetterErrorCode;
import com.cake.pop.entity.Letter;
import com.cake.pop.entity.Mailbox;
import com.cake.pop.global.exception.RestApiException;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface LetterRepository extends JpaRepository<Letter, Long> {

List<Letter> findByMailbox(Mailbox mailbox);

default Letter getById(Long id) {
return findById(id).orElseThrow(() -> new RestApiException(LetterErrorCode.LETTER_NOT_FOUND));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package com.cake.pop.domain.letter.service;

import com.cake.pop.domain.letter.dto.request.CreateLetterRequest;
import com.cake.pop.domain.letter.dto.response.GetLettersResponse;
import com.cake.pop.domain.letter.dto.response.SimpleLetterDto;
import com.cake.pop.domain.letter.repository.LetterRepository;
import com.cake.pop.domain.letter.repository.MailboxRepository;
import com.cake.pop.entity.Letter;
import com.cake.pop.entity.Mailbox;
import com.cake.pop.entity.enums.Region;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand All @@ -20,4 +24,20 @@ public void create(CreateLetterRequest request) {
Letter letter = Letter.of(request.content(), findMailbox, request.imageUrl());
letterRepository.save(letter);
}

public GetLettersResponse getLetters(String region){
Mailbox findMailbox = mailboxRepository.getFirstByRegion(Region.fromKoreanName(region));

List<Letter> letters = letterRepository.findByMailbox(findMailbox);

List<SimpleLetterDto> letterDtos = letters.stream()
.map(letter -> new SimpleLetterDto(
letter.getId(),
letter.getContent(),
letter.getCreatedAt().toLocalDate()
))
.toList();

return new GetLettersResponse(region, letterDtos);
}
}