Spring/[P] 눈치우기 봉사활동 매칭 플랫폼

게시글 작성하기

alsruds 2024. 2. 15. 22:34

 

클라이언트 서버에서 전송한 게시글 데이터를 데이터베이스에 저장

 

☃️ Controller

@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/volunteers")
public class VolunteerController {
    private final VolunteerService volunteerService;

    // 봉사활동 구인글 작성
    @PostMapping("/new")
    public ResponseEntity<Map<String, Long>> addVolunteer(@Valid VolunteerSaveRequest request) throws IOException {
        Long volunteerId = volunteerService.addVolunteer(request);
        Map<String, Long> response = new HashMap<>();
        response.put("volunteerId", volunteerId);
        return ResponseEntity.ok(response);
    }
}

 

· 게시글 저장 후 해당 게시글 id 반환하기

 

☃️ Service

@Service
@RequiredArgsConstructor
@Slf4j
@Transactional
public class VolunteerService {
    private final VolunteerRepository volunteerRepository;
    private final ImageService imageService;
    private final UserRepository userRepository;

    // 봉사활동 구인글 작성
    public Long addVolunteer(VolunteerSaveRequest request) throws IOException {
        User user = getUserOrThrow(request.getUserId());
        String imageUUID = null;
        if (!request.getImage().isEmpty()) {
            imageUUID = imageService.uploadImage(request.getImage());
        }
        Volunteer volunteer = Volunteer.createVolunteer(request, user, imageUUID);
        volunteerRepository.save(volunteer);
        return volunteer.getId();
    }

    // 예외 처리 - 존재하는 User 인가
    private User getUserOrThrow(Long userId) {
        return userRepository.findById(userId)
                .orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
    }
}

 

· S3 에 이미지 업로드 후 생긴 url 로 이미지 경로 저장하기

 

☃️ Repository

public interface VolunteerRepository extends JpaRepository<Volunteer, Long> {}
public interface UserRepository extends JpaRepository<User, Long> {}

 

☃️Dto

· 프론트 서버에서부터 들어오는 요청 데이터

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class VolunteerSaveRequest {
    private String title;
    private String content;
    @NotNull
    private String place;
    @NotNull
    private Long userId;
    private MultipartFile image;
}