Skip to content

Commit 0a2d78b

Browse files
committed
feat: 이벤트 배너 온오프로 수정
1 parent 070e93f commit 0a2d78b

3 files changed

Lines changed: 43 additions & 45 deletions

File tree

src/main/java/com/waitit/capstone/domain/admin/AdminController.java

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.waitit.capstone.domain.admin;
22

3-
import com.waitit.capstone.domain.admin.dto.AllHostRequest;
4-
import com.waitit.capstone.domain.admin.dto.AllUserRequest;
5-
import com.waitit.capstone.domain.admin.dto.HostSummaryDto;
6-
import com.waitit.capstone.domain.admin.dto.UpdatedRequest;
3+
import com.waitit.capstone.domain.admin.dto.*; // DTO 임포트
74
import com.waitit.capstone.domain.image.AllImageResponse;
85
import com.waitit.capstone.domain.image.ImageService;
96
import com.waitit.capstone.domain.queue.dto.QueueDto;
@@ -21,15 +18,7 @@
2118
import org.springframework.http.MediaType;
2219
import org.springframework.http.ResponseEntity;
2320
import org.springframework.security.access.prepost.PreAuthorize;
24-
import org.springframework.web.bind.annotation.DeleteMapping;
25-
import org.springframework.web.bind.annotation.GetMapping;
26-
import org.springframework.web.bind.annotation.PatchMapping;
27-
import org.springframework.web.bind.annotation.PathVariable;
28-
import org.springframework.web.bind.annotation.PostMapping;
29-
import org.springframework.web.bind.annotation.RequestBody;
30-
import org.springframework.web.bind.annotation.RequestMapping;
31-
import org.springframework.web.bind.annotation.RequestParam;
32-
import org.springframework.web.bind.annotation.RestController;
21+
import org.springframework.web.bind.annotation.*;
3322
import org.springframework.web.multipart.MultipartFile;
3423

3524

@@ -42,6 +31,7 @@ public class AdminController {
4231
private final AdminService adminService;
4332
private final ImageService imageService;
4433

34+
// ... (기존 회원 관련 API 생략)
4535
@Operation(summary = "모든 회원 조회", description = "관리자가 모든 회원을 페이지별로 조회합니다.")
4636
@GetMapping("/users")
4737
@PreAuthorize("hasRole('ADMIN')")
@@ -56,10 +46,8 @@ public ResponseEntity<PageResponse<AllUserRequest>> getAll(@RequestParam(default
5646
@PreAuthorize("hasRole('ADMIN')")
5747
public ResponseEntity<?> updateUser(@RequestBody UpdatedRequest request){
5848
adminService.updateMember(request);
59-
6049
Map<String,String> map = new HashMap<>();
6150
map.put("message","회원정보가 수정되었습니다.");
62-
6351
return ResponseEntity.ok(map);
6452
}
6553

@@ -68,13 +56,12 @@ public ResponseEntity<?> updateUser(@RequestBody UpdatedRequest request){
6856
@PreAuthorize("hasRole('ADMIN')")
6957
public ResponseEntity<?> deleteUser(@PathVariable Long id){
7058
adminService.deleteMember(id);
71-
7259
Map<String,String> map = new HashMap<>();
7360
map.put("message","회원이 삭제되었습니다.");
74-
7561
return ResponseEntity.ok(map);
7662
}
7763

64+
7865
@Operation(summary = "이벤트 배너 등록", description = "관리자가 이벤트 배너 이미지를 업로드합니다.")
7966
@PostMapping(value = "/event/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
8067
@PreAuthorize("hasRole('ADMIN')")
@@ -92,21 +79,23 @@ public ResponseEntity<PageResponse<AllImageResponse>> getAllImages(
9279
PageResponse<AllImageResponse> images = imageService.getAllImage(pageable);
9380
return ResponseEntity.ok(images);
9481
}
82+
9583
@Operation(summary = "이벤트 배너 삭제", description = "관리자가 특정 이벤트 배너를 삭제합니다.")
9684
@DeleteMapping("/event/{id}")
9785
public ResponseEntity<?> deleteEvent(@PathVariable Long id){
9886
adminService.deleteImage(id);
9987
return ResponseEntity.status(HttpStatus.OK).body("이미지 삭제 완료");
10088
}
10189

102-
@Operation(summary = "메인 이벤트 배너 선택", description = "관리자가 메인 화면에 표시할 이벤트 배너를 선택합니다.")
90+
@Operation(summary = "메인 배너 상태 변경 (ON/OFF)", description = "관리자가 메인 화면에 표시할 배너를 활성화(ON) 또는 비활성화(OFF)합니다.")
10391
@PreAuthorize("hasRole('ADMIN')")
104-
@PostMapping("/event/select")
105-
public ResponseEntity<?> selectEventBanner(@RequestParam Long imgId,@RequestParam int number){
106-
adminService.selectBanner(imgId,number);
107-
return ResponseEntity.status(HttpStatus.OK).body("이미지 이벤트 등록 완료");
92+
@PostMapping("/banners/status")
93+
public ResponseEntity<Void> updateBannerStatus(@RequestBody UpdateBannerStatusRequest request) {
94+
adminService.updateBannerStatus(request);
95+
return ResponseEntity.ok().build();
10896
}
10997

98+
// ... (기존 대기열 및 호스트 관련 API 생략)
11099
@Operation(summary = "활성 대기열 현황 조회", description = "관리자가 현재 활성화된 모든 대기열의 요약 정보를 조회합니다.")
111100
@PreAuthorize("hasRole('ADMIN')")
112101
@GetMapping("/active")

src/main/java/com/waitit/capstone/domain/admin/AdminService.java

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package com.waitit.capstone.domain.admin;
22

3-
import com.waitit.capstone.domain.admin.dto.AllHostRequest;
4-
import com.waitit.capstone.domain.admin.dto.AllUserRequest;
5-
import com.waitit.capstone.domain.admin.dto.HostSummaryDto;
6-
import com.waitit.capstone.domain.admin.dto.UpdatedRequest;
7-
3+
import com.waitit.capstone.domain.admin.dto.*; // DTO 임포트
84
import com.waitit.capstone.domain.image.ImageService;
95
import com.waitit.capstone.domain.image.repository.EventImageRepository;
106
import com.waitit.capstone.domain.manager.Host;
@@ -40,26 +36,22 @@ public class AdminService {
4036
private final EventImageRepository eventImageRepository;
4137
private final RedissonClient redissonClient;
4238
private static final String ACTIVE_HOSTS_KEY = "active:hosts";
39+
private static final String MAIN_BANNERS_KEY = "main_banners"; // Redis 키 이름 변경
4340

44-
45-
//모든 유저를 조회후 페이징
41+
// ... (getAllUser, updateMember, deleteMember 생략)
4642
public PageResponse<AllUserRequest> getAllUser(Pageable pageable) {
4743
Page<Member> members = memberRepository.findAll(pageable);
4844
Page<AllUserRequest> allUserRequests = members.map(adminMapper::toAllUserRequest);
49-
5045
return new PageResponse<>(allUserRequests);
5146
}
5247

53-
//유저 리퀘스트 바디를 받아서 멤버 수정후 저장
5448
public void updateMember(UpdatedRequest request) {
5549
Long memberId = Long.parseLong(request.getId());
5650
Member member = memberRepository.findMemberById(memberId);
57-
5851
member.updateProfile(request.getName(), request.getName(), request.getPassword());
5952
memberRepository.save(member);
6053
}
6154

62-
//아이디로 멤버삭제
6355
public void deleteMember(Long id) {
6456
memberRepository.deleteById(id);
6557
}
@@ -69,27 +61,33 @@ public void uploadEventImage(List<MultipartFile> images) {
6961
imageService.uploadEvent(images);
7062
}
7163

72-
//이벤트 배너 메인 등록
73-
public void selectBanner(Long imgId, int number) {
74-
//레디스에 imgId 받은걸 db 패스를 찾음
75-
String img = imageService.getImgPath(imgId);
76-
String redisKey = "main_banner";
77-
// 레디스 리스트의 number 인덱스에 등록
78-
redisTemplate.opsForList().set(redisKey, number, img);
64+
/**
65+
* 메인 배너의 상태(ON/OFF)를 변경합니다.
66+
* @param request 배너 ID와 활성화 상태(active)를 담은 요청
67+
*/
68+
public void updateBannerStatus(UpdateBannerStatusRequest request) {
69+
// 1. imgId로 DB에서 이미지 경로를 조회합니다.
70+
String imgPath = imageService.getImgPath(request.getImgId());
71+
72+
// 2. 요청의 active 상태에 따라 Redis SET에 추가 또는 삭제합니다.
73+
if (request.isActive()) {
74+
// ON: SET에 이미지 경로를 추가합니다.
75+
redisTemplate.opsForSet().add(MAIN_BANNERS_KEY, imgPath);
76+
} else {
77+
// OFF: SET에서 이미지 경로를 제거합니다.
78+
redisTemplate.opsForSet().remove(MAIN_BANNERS_KEY, imgPath);
79+
}
7980
}
8081

81-
//모든 대기열 내역 조회
82+
// ... (기존 getAllHost, getActiveHostSummaries 등 생략)
8283
public PageResponse<AllHostRequest> getAllHost(Pageable pageable) {
8384
Page<Host> hosts = hostRepository.findAll(pageable);
8485
Page<AllHostRequest> allHostRequests = hosts.map(adminMapper::toAllHostRequest);
85-
8686
return new PageResponse<>(allHostRequests);
8787
}
8888

89-
//현재 대기열 목록 조회
9089
public List<HostSummaryDto> getActiveHostSummaries() {
9190
Set<String> ids = redisTemplate.opsForSet().members("active:hosts");
92-
9391
return ids.stream()
9492
.map(Long::parseLong)
9593
.map(hostRepository::findById)
@@ -104,7 +102,7 @@ public List<HostSummaryDto> getActiveHostSummaries() {
104102
})
105103
.toList();
106104
}
107-
//각 대기열 세부 목록 조회
105+
108106
public List<QueueDto> getQueueDtoByHostId(String hostId) {
109107
RList<QueueDto> queue = redissonClient.getList("waitList:" + hostId);
110108
return queue.readAll();
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.waitit.capstone.domain.admin.dto;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
6+
@Getter
7+
@Setter
8+
public class UpdateBannerStatusRequest {
9+
private Long imgId;
10+
private boolean active; // true: ON, false: OFF
11+
}

0 commit comments

Comments
 (0)