package me.jcala.blog.controller;
import me.jcala.blog.domain.BlogView;
import me.jcala.blog.domain.Info;
import me.jcala.blog.service.inter.BlogSer;
import me.jcala.blog.service.inter.FileUploadSer;
import me.jcala.blog.service.inter.InfoSer;
import me.jcala.blog.service.inter.ProjectSer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* 前端页面显示的控制器
* 共包括archives,login,projects,tags,about,post,login这几个页面
*/
@Controller
public class FontEndCtrl {
private BlogSer blogSer;
private ProjectSer projectSer;
private InfoSer infoSer;
private FileUploadSer fileUploadSer;
@Autowired
public FontEndCtrl(BlogSer blogSer, ProjectSer projectSer, InfoSer infoSer, FileUploadSer fileUploadSer) {
this.blogSer = blogSer;
this.projectSer = projectSer;
this.infoSer = infoSer;
this.fileUploadSer = fileUploadSer;
}
@GetMapping("/archives/{page}")
public String archives(@PathVariable int page,Model model){
model.addAttribute("info",infoSer.getInfo());
model.addAttribute("archives",blogSer.getArchive(page));
model.addAttribute("pageNum",blogSer.getArchiveNum());
model.addAttribute("current",page);
return "archives";
}
@GetMapping("/projects")
public String projects(Model model) {
model.addAttribute("info",infoSer.getInfo());
return "projects";
}
@GetMapping("/projects/{page}")
public String projectPage(@PathVariable int page,Model model) {
model.addAttribute("info",infoSer.getInfo());
model.addAttribute("projects",projectSer.getPros(page));
model.addAttribute("pageNum",projectSer.getPageNum());
model.addAttribute("current",page);
return "projects";
}
@GetMapping("/tags")
public String tags(Model model) {
model.addAttribute("info",infoSer.getInfo());
model.addAttribute("tags",blogSer.getTagList());
return "tags";
}
@GetMapping("/tags/{tagName}")
public String tagName(@PathVariable String tagName,Model model) {
model.addAttribute("info",infoSer.getInfo());
List<BlogView> views=blogSer.getBlogByTag(tagName);
model.addAttribute("views",views);
model.addAttribute("tagName",tagName);
return "tagView";
}
@GetMapping("/about")
public String about(Model model) {
model.addAttribute("info",infoSer.getInfo());
model.addAttribute("resume",infoSer.getResumeView());
return "about";
}
@GetMapping("/post/{id}")
public String post(@PathVariable int id,Model model) {
model.addAttribute("info",infoSer.getInfo());
BlogView blogView=blogSer.getBlog(id);
BlogView prev=blogSer.getPrevBlog(id);
BlogView next=blogSer.getNextBlog(id);
model.addAttribute("prev",prev);
model.addAttribute("next",next);
model.addAttribute("article",blogView.getArticle());
return "post";
}
@GetMapping("/")
public String welcome(Model model) {
model.addAttribute("info",infoSer.getInfo());
return "index";
}
@GetMapping("/login")
public String login(HttpServletRequest request, Model model) {
model.addAttribute("avatar",infoSer.getInfo().getAvatar());
String result = request.getParameter("result");
if (result != null && result.equals("fail")) {
model.addAttribute("success", 0);
}
return "login";
}
@PostMapping("/login.action")
public String doLogin(Info user, HttpServletRequest request) {
boolean result = infoSer.login(user);
if (result) {
infoSer.addSession(request, user);
return "redirect:/admin";
} else {
return "redirect:/login?result=fail";
}
}
@GetMapping("/logout")
public String logout(HttpServletRequest request) {
infoSer.destroySession(request);
return "redirect:/login";
}
@GetMapping(value = "/pic/{dir}/{picName:.+}")
public ResponseEntity<byte[]> gainUserAvatar(@PathVariable String dir, @PathVariable String picName)
throws RuntimeException {
return fileUploadSer.gainPic(dir,picName);
}
}