0

WebApp: поиск фильмов по базе

This commit is contained in:
2017-05-25 15:12:20 +03:00
parent ef1d31c3b6
commit a5c383360d
6 changed files with 86 additions and 3 deletions

View File

@@ -4,6 +4,9 @@
*/
package kinosearch.kinosearch3.spider;
import java.util.List;
public interface BaseRepository {
List<CinemaDocument> findByTitle(String title);
void save(CinemaDocument cinemaDocument);
}

View File

@@ -4,15 +4,32 @@
*/
package kinosearch.kinosearch3.spider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List;
import java.util.regex.Pattern;
public class MongoDBRepository implements BaseRepository {
private final Logger logger = LoggerFactory.getLogger(MongoDBRepository.class);
private final MongoOperations mongoOperations;
public MongoDBRepository(MongoOperations mongoOperations) {
this.mongoOperations = mongoOperations;
}
@Override
public List<CinemaDocument> findByTitle(String title) {
Query query = new Query();
final String regex = String.format(".*%s.*", Pattern.quote(title));
query.addCriteria(Criteria.where("title").regex(regex));
logger.debug("query: {}", query.toString());
return mongoOperations.find(query, CinemaDocument.class);
}
@Override
public void save(CinemaDocument cinemaDocument) {
mongoOperations.save(cinemaDocument);

View File

@@ -4,14 +4,22 @@
*/
package kinosearch.kinosearch3.webpp;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import kinosearch.kinosearch3.spider.BaseRepository;
import kinosearch.kinosearch3.spider.MongoDBRepository;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
import java.net.UnknownHostException;
@Configuration
@PropertySource("classpath:/application.properties")
public class SpringConfig {
@@ -35,4 +43,19 @@ public class SpringConfig {
freeMarkerConfigurer.setTemplateLoaderPath("classpath:/kinosearch/kinosearch3/webpp/");
return freeMarkerConfigurer;
}
@Bean
public BaseRepository baseRepository(MongoOperations mongoOperations) {
return new MongoDBRepository(mongoOperations);
}
@Bean
public MongoOperations mongoOperations(Mongo mongo, @Value("${mongo.db}") String databaseName) {
return new MongoTemplate(mongo, databaseName);
}
@Bean
public Mongo mongo(@Value("${mongo.host}") String host, @Value("${mongo.port}") int port) throws UnknownHostException {
return new MongoClient(host, port);
}
}

View File

@@ -4,24 +4,47 @@
*/
package kinosearch.kinosearch3.webpp;
import kinosearch.kinosearch3.spider.BaseRepository;
import kinosearch.kinosearch3.spider.CinemaDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@Controller
public class WebAppController {
private final Logger logger = LoggerFactory.getLogger(WebAppController.class);
private final BaseRepository baseRepository;
@Autowired
public WebAppController(BaseRepository baseRepository) {
this.baseRepository = baseRepository;
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "index";
}
@RequestMapping(value = "/", method = RequestMethod.GET, params = {"search"})
public String search(@RequestParam("search") String searchText, Model model) {
if (searchText.trim().isEmpty()) {
return "redirect:/";
}
List<CinemaDocument> cinemaDocuments = baseRepository.findByTitle(searchText.trim());
model.addAttribute("cindocs", cinemaDocuments);
model.addAttribute("searchText", searchText);
return "searchResult";
}
@RequestMapping(value = "/blog.html", method = RequestMethod.GET)
public String blog() {
return "blog";

View File

@@ -3,7 +3,7 @@
<form method="get" action="/">
<div class="input-group">
<span class="input-group-addon">Найти:</span>
<input class="form-control" type="text" placeholder="Что ищем?" name="search"/>
<input class="form-control" type="text" placeholder="Что ищем?" name="search" value="${(searchText)!""}"/>
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">Ищи!</button>
</span>

View File

@@ -0,0 +1,17 @@
[#ftl]
[#include "header.inc.ftl"]
[#include "search.comp.ftl"]
<hr>
<div class="searchResult">
[#if cindocs?has_content]
<ol>
[#list cindocs as cinema]
<li><a href="${cinema.url}" target="_blank">[${cinema.typeWarez}] ${cinema.title}</a></li>
[/#list]
</ol>
[#else]
<p>Ничего не найдено.</p>
[/#if]
</div>
[#include "fother.inc.ftl"]