package com.example.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpSession;
import com.example.entity.Book;
import com.example.service.BookDB;
import com.example.service.SequenceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping(value = "/admin")
public class AdminController {
@Autowired
BookDB bookDB;
@Autowired
private SequenceService sequenceService;
@Autowired
HttpSession httpSession;
@PostMapping(value = "/action")
public String actionPOST(
@RequestParam(name = "btn") String btn,
@RequestParam(name = "chk") List<Long> code) {
// Long[] == List<Long>
// 전달되는 chk값 출력하기
for(Long tmp: code) {
System.out.println(tmp);
}
if (btn.equals("일괄삭제")) {
bookDB.deleteBatchBook(code);
} else if (btn.equals("일괄수정")) {
httpSession.setAttribute("CHK", code);
return "redirect:/admin/updatebatch";
}
return "redirect:/admin/selectlist";
}
@GetMapping(value = "/updatebatch")
public String updateGET(Model model) {
// 형변환을 하면 데이터가 안전하지 않음을 경고
// 세션에 추가할 때와 가지고 올 때의 타입을 정확하게 매칭
@SuppressWarnings({ "unchecked" })
List<Long> code = (List<Long>)httpSession.getAttribute("CHK");
List<Book> list = bookDB.selectListWhereIn(code);
model.addAttribute("list", list);
return "admin/updatebatch";
}
@PostMapping(value = "/updatebatch")
public String updatePOST(
Model model,
@RequestParam(name = "code") long[] code,
@RequestParam(name = "title") String[] title,
@RequestParam(name = "price") long[] price,
@RequestParam(name = "writer") String[] writer,
@RequestParam(name = "category") String[] category) {
List<Book> list = new ArrayList<>();
for (int i = 0; i < code.length; i++) {
Book book = new Book();
book.setCode(code[i]);
book.setTitle(title[i]);
book.setPrice(price[i]);
book.setWriter(writer[i]);
book.setCategory(category[i]);
book.setRegdate(new Date());
list.add(book);
}
long ret = bookDB.updateBatchBook(list);
if(ret == 1){
model.addAttribute("msg", "일괄수정 완료");
model.addAttribute("url", "/admin/selectlist");
return "alert";
}
// jsp를 만들어서 알림 띄우고 redirect 수행
model.addAttribute("msg", "일괄수정 실패");
model.addAttribute("url", "/admin/selectlist");
return "alert";
}
@GetMapping(value = "/insertbatch")
public String insertGET() {
return "admin/insertbatch";
}
@PostMapping(value = "/insertbatch")
public String insertPOST(
@RequestParam(name = "title") String[] title,
@RequestParam(name = "price") long[] price,
@RequestParam(name = "writer") String[] writer,
@RequestParam(name = "category") String[] category) {
List<Book> list = new ArrayList<>();
for (int i = 0; i < title.length; i++) {
Book book = new Book();
book.setCode(sequenceService.generatorSequence("SEQ_BOOK4_CODE"));
book.setTitle(title[i]);
book.setPrice(price[i]);
book.setWriter(writer[i]);
book.setCategory(category[i]);
book.setRegdate(new Date());
list.add(book);
}
bookDB.insertBatchBook(list);
return "redirect:/admin/selectlist";
}
@GetMapping(value = "/selectlist")
public String selectlistGET(Model model,
@RequestParam(name = "page", defaultValue = "1") int page,
@RequestParam(name = "text", defaultValue = "") String text) {
if (page == 0) {
return "redirect:/admin/selectlist?page=1";
}
List<Book> list = bookDB.selectListPageSearchBook(page, text);
// 2. 페이지네이션 개수
long pages = bookDB.CountSearchBook(text);
model.addAttribute("list", list);
model.addAttribute("pages", (pages - 1) / 10 + 1);
return "/admin/selectlist";
}
}