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,6 +1,7 @@
package com.cake.pop.domain.letter.controller;

import com.cake.pop.domain.letter.dto.request.CreateLetterRequest;
import com.cake.pop.domain.letter.dto.request.CreateStorageRequest;
import com.cake.pop.domain.letter.dto.response.GetLetterResponse;
import com.cake.pop.domain.letter.dto.response.GetLettersResponse;
import com.cake.pop.domain.letter.service.LetterService;
Expand All @@ -24,7 +25,7 @@ public class LetterController {

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

Expand All @@ -39,4 +40,13 @@ public ResponseEntity<GetLetterResponse> getLetter(@PathVariable("letterId") Lon
GetLetterResponse response = letterService.getLetter(letterId);
return ResponseEntity.ok(response);
}

@PostMapping("/storage")
public ResponseEntity<Void> createStorage(@RequestBody @Valid CreateStorageRequest request){
Long userId = 1L;
letterService.createStorage(userId, request);
return ResponseEntity.ok().build();
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.cake.pop.domain.letter.dto.request;

public record CreateStorageRequest(
Long letterId
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
public record GetLetterResponse(
Long letterId,
String content,
String imageUrl
String imageUrl,
String region
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,26 @@
import com.cake.pop.entity.Mailbox;
import com.cake.pop.global.exception.RestApiException;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

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

List<Letter> findByMailbox(Mailbox mailbox);

@Query("SELECT l FROM Letter l JOIN FETCH l.mailbox WHERE l.id = :id")
Optional<Letter> findByIdWithMailbox(@Param("id") Long id);

default Letter getById(Long id) {
return findById(id).orElseThrow(() -> new RestApiException(LetterErrorCode.LETTER_NOT_FOUND));
}

default Letter getByIdWithMailbox(Long id) {
return findByIdWithMailbox(id)
.orElseThrow(() -> new RestApiException(LetterErrorCode.LETTER_NOT_FOUND));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.cake.pop.domain.letter.repository;

import com.cake.pop.entity.Storage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface StorageRepository extends JpaRepository<Storage, Long> {
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package com.cake.pop.domain.letter.service;

import com.cake.pop.domain.letter.dto.request.CreateLetterRequest;
import com.cake.pop.domain.letter.dto.request.CreateStorageRequest;
import com.cake.pop.domain.letter.dto.response.GetLetterResponse;
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.domain.letter.repository.StorageRepository;
import com.cake.pop.domain.user.repository.UserRepository;
import com.cake.pop.entity.Letter;
import com.cake.pop.entity.Mailbox;
import com.cake.pop.entity.Storage;
import com.cake.pop.entity.User;
import com.cake.pop.entity.enums.Region;
import java.util.List;
import lombok.RequiredArgsConstructor;
Expand All @@ -19,11 +24,16 @@ public class LetterService {

private final LetterRepository letterRepository;
private final MailboxRepository mailboxRepository;
private final StorageRepository storageRepository;
private final UserRepository userRepository;

public void create(CreateLetterRequest request) {
public void createLetter(CreateLetterRequest request) {
Mailbox findMailbox = mailboxRepository.getFirstByRegion(request.region());
findMailbox.increaseLetterCount();

Letter letter = Letter.of(request.content(), findMailbox, request.imageUrl());
letterRepository.save(letter);
mailboxRepository.save(findMailbox);
}

public GetLettersResponse getLetters(String region){
Expand All @@ -43,12 +53,21 @@ public GetLettersResponse getLetters(String region){
}

public GetLetterResponse getLetter(Long letterId){
Letter findLetter = letterRepository.getById(letterId);
Letter findLetter = letterRepository.getByIdWithMailbox(letterId);

return new GetLetterResponse(
findLetter.getId(),
findLetter.getContent(),
findLetter.getImageUrl()
findLetter.getImageUrl(),
findLetter.getMailbox().getRegion().getName()
);
}

public void createStorage(Long userId, CreateStorageRequest request){
User findUser = userRepository.getById(userId);
Letter findLetter = letterRepository.getById(request.letterId());
Storage storage = Storage.of(findUser, findLetter);

storageRepository.save(storage);
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/cake/pop/entity/Mailbox.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,8 @@ public static Mailbox of(Region region) {
.region(region)
.build();
}

public void increaseLetterCount() {
this.letterCount = this.letterCount + 1;
}
}