WebApp: поиск фильмов по базе
This commit is contained in:
@@ -4,6 +4,9 @@
|
||||
*/
|
||||
package kinosearch.kinosearch3.spider;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BaseRepository {
|
||||
List<CinemaDocument> findByTitle(String title);
|
||||
void save(CinemaDocument cinemaDocument);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
<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>
|
||||
<button class="btn btn-primary" type="submit">Ищи!</button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
<div class="minimenu"><a href="/blog.html">мини-блог</a> | <a href="/about.html">о сервисе</a></div>
|
||||
@@ -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"]
|
||||
Reference in New Issue
Block a user