Skip to content

Commit

Permalink
[Feat]: 챌린지그룹 이미지 등록
Browse files Browse the repository at this point in the history
  • Loading branch information
bayy1216 committed Sep 30, 2024
1 parent f4378e7 commit 63a7899
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.haedal.zzansuni.challengegroup.domain.application.ChallengeGroupService;
import org.haedal.zzansuni.common.controller.PagingRequest;
import org.haedal.zzansuni.common.controller.PagingResponse;
import org.haedal.zzansuni.common.domain.ImageUploader;
import org.haedal.zzansuni.core.api.ApiResponse;
import org.haedal.zzansuni.user.domain.UserModel;
import org.haedal.zzansuni.user.domain.UserService;
Expand All @@ -18,6 +19,7 @@
import org.haedal.zzansuni.userchallenge.domain.application.ChallengeVerificationService;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

Expand All @@ -30,6 +32,7 @@ public class AdminController {
private final ChallengeGroupService challengeGroupService;
private final UserService userService;
private final ChallengeVerificationService challengeVerificationService;
private final ImageUploader imageUploader;

@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "매니저 등록", description = "매니저를 등록한다.")
Expand Down Expand Up @@ -91,4 +94,16 @@ public ApiResponse<Void> approveChallengeVerification(@PathVariable Long challen
return ApiResponse.success(null, "챌린지 인증 승인/거절 성공");
}

@ResponseStatus(HttpStatus.OK)
@Operation(summary = "챌린지 그룹 이미지 등록", description = "챌린지 그룹 이미지를 등록 UPSERT")
@PostMapping("/api/admin/challengeGroups/{challengeGroupId}/image")
public ApiResponse<Void> createChallengeGroupImage(@PathVariable Long challengeGroupId,
List<MultipartFile> images) {
List<String> imageUrls = images.stream()
.map(imageUploader::upload)
.toList();
challengeGroupService.updateChallengeGroupImages(challengeGroupId, imageUrls);
return ApiResponse.success(null, "챌린지 그룹 이미지 등록 성공");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,10 @@ public class ChallengeGroupImage extends BaseTimeEntity {
@JoinColumn(name = "challenge_group_id", nullable = false)
private ChallengeGroup challengeGroup;

public static ChallengeGroupImage create(ChallengeGroup challengeGroup, String imageUrl) {
return ChallengeGroupImage.builder()
.challengeGroup(challengeGroup)
.imageUrl(imageUrl)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,22 @@
import lombok.RequiredArgsConstructor;
import org.haedal.zzansuni.challengegroup.domain.ChallengeGroup;
import org.haedal.zzansuni.challengegroup.domain.ChallengeGroupCommand;
import org.haedal.zzansuni.challengegroup.domain.ChallengeGroupImage;
import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupImageStore;
import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupReader;
import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupStore;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


@Service
@RequiredArgsConstructor
public class ChallengeGroupService {
private final ChallengeGroupStore challengeGroupStore;
private final ChallengeGroupReader challengeGroupReader;
private final ChallengeGroupImageStore challengeGroupImageStore;

@Transactional
public void createChallengeGroup(ChallengeGroupCommand.Create command) {
Expand All @@ -33,4 +38,19 @@ public void updateChallengeGroup(ChallengeGroupCommand.Update command) {
ChallengeGroup challengeGroup = challengeGroupReader.getById(command.getId());
challengeGroup.update(command);
}

/**
* 1. 기존 이미지 삭제
* 2. 새로운 이미지 저장
*/
@Transactional
public void updateChallengeGroupImages(Long challengeGroupId, List<String> imageUrls) {
ChallengeGroup challengeGroup = challengeGroupReader.getById(challengeGroupId);

challengeGroupImageStore.deleteAllByChallengeGroupId(challengeGroupId);
List<ChallengeGroupImage> challengeGroupImages = imageUrls.stream()
.map(imageUrl -> ChallengeGroupImage.create(challengeGroup, imageUrl))
.toList();
challengeGroupImageStore.saveAll(challengeGroupImages);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.haedal.zzansuni.challengegroup.domain.port;

import org.haedal.zzansuni.challengegroup.domain.ChallengeGroupImage;

import java.util.List;

public interface ChallengeGroupImageStore {
void saveAll(List<ChallengeGroupImage> challengeGroupImages);
void deleteAllByChallengeGroupId(Long challengeGroupId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@

public interface ChallengeGroupImageRepository extends JpaRepository<ChallengeGroupImage, Long> {
List<ChallengeGroupImage> findByChallengeGroupId(Long challengeGroupId);
void deleteAllByChallengeGroupId(Long challengeGroupId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,28 @@
import lombok.RequiredArgsConstructor;
import org.haedal.zzansuni.challengegroup.domain.ChallengeGroupImage;
import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupImageReader;
import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupImageStore;
import org.haedal.zzansuni.challengegroup.infrastructure.ChallengeGroupImageRepository;
import org.springframework.stereotype.Component;

import java.util.List;

@RequiredArgsConstructor
@Component
public class ChallengeGroupImageReaderImpl implements ChallengeGroupImageReader {
public class ChallengeGroupImageReaderStoreImpl implements ChallengeGroupImageReader, ChallengeGroupImageStore {
private final ChallengeGroupImageRepository challengeGroupImageRepository;
@Override
public List<ChallengeGroupImage> getByChallengeGroupId(Long challengeGroupId) {
return challengeGroupImageRepository.findByChallengeGroupId(challengeGroupId);
}

@Override
public void saveAll(List<ChallengeGroupImage> challengeGroupImages) {
challengeGroupImageRepository.saveAll(challengeGroupImages);
}

@Override
public void deleteAllByChallengeGroupId(Long challengeGroupId) {
challengeGroupImageRepository.deleteAllByChallengeGroupId(challengeGroupId);
}
}

0 comments on commit 63a7899

Please sign in to comment.