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
Expand Up @@ -10,18 +10,31 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
@Primary
@RequiredArgsConstructor
public class FAQServiceImpl implements FAQService {

private final FAQRepository faqRepository;
private final UserRepository userRepository;

@Override
public User getAdminUserFromSession(HttpServletRequest request) {
HttpSession session = request.getSession();
Long id = (Long) session.getAttribute("id");
User user = userRepository.findByUserId(id);
if (user == null || user.getRole() != 1) {
throw new RuntimeException("이 기능은 관리자만 접근 가능합니다.");
}
return user;
}

@Override
public void createFAQ(Long userId, FAQRequestDto request) {
User user = userRepository.findById(userId)
Expand Down Expand Up @@ -54,16 +67,6 @@ public void deleteFAQ(Long faqId) {
faqRepository.delete(faq);
}

public User getAdminUserFromSession(HttpServletRequest request) {
HttpSession session = request.getSession();
Long id = (Long) session.getAttribute("id");
User user = userRepository.findByUserId(id);
if (user == null || user.getRole() != 1) {
throw new RuntimeException("이 기능은 관리자만 접근 가능합니다.");
}
return user;
}

@Override
public List<FAQResponseDto> getAllFAQs() {
List<FAQ> faqs = faqRepository.findAll();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public class NoticeServiceImpl implements NoticeService {
private final NoticeRepository noticeRepository;
private final UserRepository userRepository;

@Override
public User getAdminUserFromSession(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session == null) {
Expand Down Expand Up @@ -115,4 +116,68 @@ public Notice getNotice(Long noticeId) {

return noticeRepository.save(notice);
}

@Service
@RequiredArgsConstructor
public static class FAQServiceImpl implements FAQService {

private final FAQRepository faqRepository;
private final UserRepository userRepository;

@Override
public void createFAQ(Long userId, FAQRequestDto request) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));
FAQ faq = new FAQ();
faq.setUser(user);
faq.setCategory(request.getCategory());
faq.setQuestion(request.getQuestion());
faq.setAnswer(request.getAnswer());

faqRepository.save(faq);
}

@Override
public void updateFAQ(Long faqId, FAQRequestDto request) {
FAQ faq = faqRepository.findById(faqId)
.orElseThrow(() -> new RuntimeException("FAQ를 찾을 수 없습니다."));

faq.setCategory(request.getCategory());
faq.setQuestion(request.getQuestion());
faq.setAnswer(request.getAnswer());

faqRepository.save(faq);
}

@Override
public void deleteFAQ(Long faqId) {
FAQ faq = faqRepository.findById(faqId)
.orElseThrow(() -> new RuntimeException("FAQ를 찾을 수 없습니다."));
faqRepository.delete(faq);
}

public User getAdminUserFromSession(HttpServletRequest request) {
HttpSession session = request.getSession();
Long id = (Long) session.getAttribute("id");
User user = userRepository.findByUserId(id);
if (user == null || user.getRole() != 1) {
throw new RuntimeException("이 기능은 관리자만 접근 가능합니다.");
}
return user;
}

@Override
public List<FAQResponseDto> getAllFAQs() {
List<FAQ> faqs = faqRepository.findAll();
return faqs.stream().map(FAQResponseDto::new).collect(Collectors.toList());
}

@Override
public FAQResponseDto getFAQById(Long faqId) {
FAQ faq = faqRepository.findById(faqId)
.orElseThrow(() -> new RuntimeException("FAQ를 찾을 수 없습니다."));
return new FAQResponseDto(faq);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@

import com.capstone.favicon.admin.dto.FAQRequestDto;
import com.capstone.favicon.admin.dto.FAQResponseDto;
import com.capstone.favicon.user.domain.User;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;

public interface FAQService {
User getAdminUserFromSession(HttpServletRequest request);

void createFAQ(Long userId, FAQRequestDto request);
void updateFAQ(Long faqId, FAQRequestDto request);
void deleteFAQ(Long faqId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@
import com.capstone.favicon.admin.domain.Notice;
import com.capstone.favicon.admin.dto.NoticeRequestDto;
import com.capstone.favicon.admin.dto.NoticeResponseDto;
import com.capstone.favicon.user.domain.User;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;

public interface NoticeService {
User getAdminUserFromSession(HttpServletRequest request);

void createNotice(Long userId, NoticeRequestDto request);
void updateNotice(Long noticeId, NoticeRequestDto request);
void deleteNotice(Long noticeId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.capstone.favicon.admin.application.service;

import com.capstone.favicon.admin.dto.MonthlyCountDto;
import com.capstone.favicon.user.domain.User;

import java.util.List;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.capstone.favicon.admin.controller;

import com.capstone.favicon.admin.application.FAQServiceImpl;
import com.capstone.favicon.admin.application.NoticeServiceImpl;
import com.capstone.favicon.admin.application.service.FAQService;
import com.capstone.favicon.admin.dto.FAQRequestDto;
import com.capstone.favicon.admin.dto.FAQResponseDto;
import com.capstone.favicon.config.APIResponse;
import com.capstone.favicon.user.domain.User;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
Expand All @@ -18,42 +17,59 @@
@RequiredArgsConstructor
public class FAQController {

private final FAQServiceImpl faqService;
private final FAQService faqService;

@PostMapping("/create")
public ResponseEntity<?> createFAQ(@RequestBody FAQRequestDto request, HttpServletRequest httpRequest) {
User admin = faqService.getAdminUserFromSession(httpRequest);
System.out.println("관리자 : " + admin.getUserId() + " 가 FAQ를 생성했습니다.");
faqService.createFAQ(admin.getUserId(), request);
return ResponseEntity.ok("자주묻는질문이 생성되었습니다.");
public ResponseEntity<APIResponse<?>> createFAQ(@RequestBody FAQRequestDto request, HttpServletRequest httpRequest) {
try {
User admin = faqService.getAdminUserFromSession(httpRequest);
faqService.createFAQ(admin.getUserId(), request);
return ResponseEntity.ok().body(APIResponse.successAPI("관리자 "+admin.getUserId()+"가 FAQ를 생성하였습니다.", null));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@PutMapping("/{faqId}")
public ResponseEntity<?> updateFAQ(@PathVariable Long faqId, @RequestBody FAQRequestDto request, HttpServletRequest httpRequest) {
User admin = faqService.getAdminUserFromSession(httpRequest);
System.out.println("관리자 : " + admin.getUserId() + " 가 FAQ를 수정했습니다.");
faqService.updateFAQ(faqId, request);
return ResponseEntity.ok("자주묻는질문이 수정되었습니다.");
public ResponseEntity<APIResponse<?>> updateFAQ(@PathVariable Long faqId, @RequestBody FAQRequestDto request, HttpServletRequest httpRequest) {
try {
User admin = faqService.getAdminUserFromSession(httpRequest);
faqService.updateFAQ(faqId, request);
return ResponseEntity.ok().body(APIResponse.successAPI("관리자 : " + admin.getUserId() + " 가 FAQ를 수정했습니다.", null));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@DeleteMapping("/{faqId}")
public ResponseEntity<?> deleteFAQ(@PathVariable Long faqId, HttpServletRequest httpRequest) {
User admin = faqService.getAdminUserFromSession(httpRequest);
System.out.println("관리자 : " + admin.getUserId() + " 가 FAQ를 삭제했습니다.");
faqService.deleteFAQ(faqId);
return ResponseEntity.ok("자주묻는질문이 삭제되었습니다.");
public ResponseEntity<APIResponse<?>> deleteFAQ(@PathVariable Long faqId, HttpServletRequest httpRequest) {
try {
User admin = faqService.getAdminUserFromSession(httpRequest);
faqService.deleteFAQ(faqId);
return ResponseEntity.ok().body(APIResponse.successAPI("관리자 : " + admin.getUserId() + " 가 FAQ를 삭제했습니다.", null));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@GetMapping("/list")
public ResponseEntity<List<FAQResponseDto>> getAllFAQs() {
List<FAQResponseDto> faqs = faqService.getAllFAQs();
return ResponseEntity.ok(faqs);
public ResponseEntity<APIResponse<?>> getAllFAQs() {
try {
List<FAQResponseDto> faqs = faqService.getAllFAQs();
return ResponseEntity.ok().body(APIResponse.successAPI("success", faqs));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@GetMapping("/{faqId}")
public ResponseEntity<FAQResponseDto> getFAQById(@PathVariable Long faqId) {
FAQResponseDto faq = faqService.getFAQById(faqId);
return ResponseEntity.ok(faq);
public ResponseEntity<APIResponse<?>> getFAQById(@PathVariable Long faqId) {
try {
FAQResponseDto faq = faqService.getFAQById(faqId);
return ResponseEntity.ok().body(APIResponse.successAPI("success", faq));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

}
Original file line number Diff line number Diff line change
@@ -1,55 +1,84 @@
package com.capstone.favicon.admin.controller;

import com.capstone.favicon.admin.application.service.NoticeService;
import com.capstone.favicon.admin.domain.Notice;
import com.capstone.favicon.admin.dto.NoticeRequestDto;
import com.capstone.favicon.admin.application.NoticeServiceImpl;
import com.capstone.favicon.admin.dto.NoticeResponseDto;
import com.capstone.favicon.config.APIResponse;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@RequestMapping("/notice")
@RequiredArgsConstructor
public class NoticeController {

private final NoticeServiceImpl noticeService;
private final NoticeService noticeService;

@PostMapping("/create")
public ResponseEntity<?> createNotice(@RequestBody NoticeRequestDto request, HttpServletRequest httpRequest) {
noticeService.createNotice(noticeService.getAdminUserFromSession(httpRequest).getUserId(), request);
return ResponseEntity.ok("공지사항이 등록되었습니다.");
public ResponseEntity<APIResponse<?>> createNotice(@RequestBody NoticeRequestDto request, HttpServletRequest httpRequest) {
try {
noticeService.createNotice(noticeService.getAdminUserFromSession(httpRequest).getUserId(), request);
return ResponseEntity.ok().body(APIResponse.successAPI("공지사항이 등록되었습니다.", null));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@PutMapping("/{noticeId}")
public ResponseEntity<?> updateNotice(@PathVariable Long noticeId, @RequestBody NoticeRequestDto request, HttpServletRequest httpRequest) {
noticeService.getAdminUserFromSession(httpRequest);
noticeService.updateNotice(noticeId, request);
return ResponseEntity.ok("공지사항이 수정되었습니다.");
public ResponseEntity<APIResponse<?>> updateNotice(@PathVariable Long noticeId, @RequestBody NoticeRequestDto request, HttpServletRequest httpRequest) {
try {
noticeService.getAdminUserFromSession(httpRequest);
noticeService.updateNotice(noticeId, request);
return ResponseEntity.ok().body(APIResponse.successAPI("공지사항이 수정되었습니다.", null));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@DeleteMapping("/{noticeId}")
public ResponseEntity<?> deleteNotice(@PathVariable Long noticeId, HttpServletRequest httpRequest) {
noticeService.getAdminUserFromSession(httpRequest);
noticeService.deleteNotice(noticeId);
return ResponseEntity.ok("공지사항이 삭제되었습니다.");
public ResponseEntity<APIResponse<?>> deleteNotice(@PathVariable Long noticeId, HttpServletRequest httpRequest) {
try {
noticeService.getAdminUserFromSession(httpRequest);
noticeService.deleteNotice(noticeId);
return ResponseEntity.ok().body(APIResponse.successAPI("공지사항이 삭제되었습니다.", null));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@GetMapping("/list")
public ResponseEntity<List<NoticeResponseDto>> getAllNotices() {
return ResponseEntity.ok(noticeService.getAllNotices());
public ResponseEntity<APIResponse<?>> getAllNotices() {
try {
List<NoticeResponseDto> notices = noticeService.getAllNotices();
return ResponseEntity.ok().body(APIResponse.successAPI("success", notices));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@GetMapping("/{noticeId}")
public ResponseEntity<NoticeResponseDto> getNoticeById(@PathVariable Long noticeId) {
return ResponseEntity.ok(noticeService.getNoticeById(noticeId));
public ResponseEntity<APIResponse<?>> getNoticeById(@PathVariable Long noticeId) {
try {
NoticeResponseDto notice = noticeService.getNoticeById(noticeId);
return ResponseEntity.ok().body(APIResponse.successAPI("success", notice));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}

@GetMapping("/view/{noticeId}")
public ResponseEntity<Notice> getNotice(@PathVariable Long noticeId) {
return ResponseEntity.ok(noticeService.getNotice(noticeId));
public ResponseEntity<APIResponse<?>> getNotice(@PathVariable Long noticeId) {
try {
Notice notice = noticeService.getNotice(noticeId);
return ResponseEntity.ok().body(APIResponse.successAPI("success", notice));
} catch (Exception e) {
return ResponseEntity.badRequest().body(APIResponse.errorAPI(e.getMessage()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.capstone.favicon.admin.application.service.StatisticsService;
import com.capstone.favicon.admin.dto.MonthlyCountDto;
import com.capstone.favicon.config.APIResponse;
import com.capstone.favicon.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
Expand Down
Loading
Loading