package com.syzton.sunread.controller.exam; import java.util.ArrayList; import java.util.List; import javassist.NotFoundException; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.syzton.sunread.dto.exam.ArticleMapDTO; import com.syzton.sunread.dto.exam.SpeedDTO; import com.syzton.sunread.exception.exam.QuestionNotFoundExcepiton; import com.syzton.sunread.model.exam.Article; import com.syzton.sunread.model.exam.SpeedQuestion; import com.syzton.sunread.service.exam.ArticleService; import com.syzton.sunread.service.exam.ExamService; @Controller @RequestMapping(value = "/api") public class ArticleController { private static final Logger LOGGER = LoggerFactory .getLogger(ArticleController.class); private ArticleService service; private ExamService examService; @Autowired public ArticleController(ArticleService articleService,ExamService examService) { this.service = articleService; this.examService = examService; } @RequestMapping(value = "/article/{id}", method = RequestMethod.GET) @ResponseBody public Article getArticleById(@PathVariable("id") Long id) throws NotFoundException { Article article = service.getArticle(id); return article; } @RequestMapping(value = "/article/test/question", method = RequestMethod.GET) @ResponseBody public SpeedDTO getRandomTestArticleWithQuestion() throws NotFoundException { Article article = service.getRandomTestArticle(); SpeedDTO dto = new SpeedDTO(); if(article!=null){ List<SpeedQuestion> questions = examService.takeSpeedTest(article.getId()); dto.setArticle(article); dto.setQuestions(questions); } return dto; } @RequestMapping(value = "/article/test", method = RequestMethod.GET) @ResponseBody public Article getRandomTestArticle() throws NotFoundException { Article article = service.getRandomTestArticle(); return article; } @RequestMapping(value = "/article/train", method = RequestMethod.GET) @ResponseBody public List<ArticleMapDTO> getTrainArticleList() throws NotFoundException { List<Article> articles = service.getAllTrainArticle(); List<ArticleMapDTO> dtos = new ArrayList<ArticleMapDTO>(); for (int i = 0; i < articles.size(); i++) { ArticleMapDTO dto = new ArticleMapDTO(); Article article = articles.get(i); dto.setId(article.getId()); dto.setTopic(article.getTopic()); dtos.add(dto); } return dtos; } @RequestMapping(value = "/article/train/{level}", method = RequestMethod.GET) @ResponseBody public List<ArticleMapDTO> getTrainArticleList( @PathVariable("level") int level) throws NotFoundException { List<Article> articles = service.getTrainArticleByLevel(level); List<ArticleMapDTO> dtos = new ArrayList<ArticleMapDTO>(); for (int i = 0; i < articles.size(); i++) { ArticleMapDTO dto = new ArticleMapDTO(); Article article = articles.get(i); dto.setId(article.getId()); dto.setTopic(article.getTopic()); dtos.add(dto); } return dtos; } @RequestMapping(value = "/article", method = RequestMethod.POST) @ResponseBody public Article add(@Valid @RequestBody Article article) { Article added = service.addArticle(article); return added; } @RequestMapping(value = "/article/{id}", method = RequestMethod.DELETE) @ResponseBody public void deleteById(@PathVariable("id") Long id) throws QuestionNotFoundExcepiton { service.deleteArticle(id); } @RequestMapping(value = "/article", method = RequestMethod.PUT) @ResponseBody public Article update(@Valid @RequestBody Article article) throws QuestionNotFoundExcepiton { Article updated = service.updateArticle(article); return updated; } }