-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
276278a
commit 4a3adfa
Showing
18 changed files
with
398 additions
and
78 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
56 changes: 56 additions & 0 deletions
56
app/src/main/java/hexlet/code/controller/UrlChecksController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
package hexlet.code.controller; | ||
|
||
import hexlet.code.model.UrlCheck; | ||
import hexlet.code.repository.UrlCheckRepository; | ||
import hexlet.code.repository.UrlRepository; | ||
import hexlet.code.util.NamedRoutes; | ||
import io.javalin.http.Context; | ||
import io.javalin.http.NotFoundResponse; | ||
import kong.unirest.HttpResponse; | ||
import kong.unirest.Unirest; | ||
|
||
import java.sql.SQLException; | ||
import java.sql.Timestamp; | ||
import java.util.regex.Matcher; | ||
import java.util.regex.Pattern; | ||
|
||
public class UrlChecksController { | ||
public static void check(Context ctx) throws SQLException { | ||
var urlId = ctx.pathParamAsClass("id", Long.class).get(); | ||
|
||
var url = UrlRepository.find(urlId) | ||
.orElseThrow(() -> new NotFoundResponse("Запись с таким ID не найдена")); | ||
var name = url.getName(); | ||
|
||
try { | ||
HttpResponse<String> response = Unirest.get(name).asString(); | ||
String responseBody = response.getBody(); | ||
|
||
int statusCode = response.getStatus(); | ||
|
||
Pattern patternH1 = Pattern.compile("<h1>([^<]*)</h1>", Pattern.CASE_INSENSITIVE); | ||
Matcher matcherH1 = patternH1.matcher(responseBody); | ||
String h1 = matcherH1.find() ? matcherH1.group(1) : ""; | ||
|
||
Pattern patternTitle = Pattern.compile("<title>([^<]*)</title>", Pattern.CASE_INSENSITIVE); | ||
Matcher matcherTitle = patternTitle.matcher(responseBody); | ||
String title = matcherTitle.find() ? matcherTitle.group(1) : ""; | ||
|
||
Pattern patternDescription = Pattern.compile("<meta name=\"description\" content=\"([^<]*)\">", | ||
Pattern.CASE_INSENSITIVE); | ||
Matcher matcherDescription = patternDescription.matcher(responseBody); | ||
String description = matcherDescription.find() ? matcherDescription.group(1) : ""; | ||
|
||
var createdAt = new Timestamp(System.currentTimeMillis()); | ||
|
||
var urlCheck = new UrlCheck(statusCode, h1, title, description, createdAt); | ||
urlCheck.setUrlId(urlId); | ||
UrlCheckRepository.save(urlCheck); | ||
|
||
} catch (Exception e) { | ||
throw new RuntimeException(e); | ||
} | ||
|
||
ctx.redirect(NamedRoutes.urlPath(urlId)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,15 @@ | ||
package hexlet.code.dto.urls; | ||
|
||
import hexlet.code.model.Url; | ||
import hexlet.code.model.UrlCheck; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
|
||
import java.util.List; | ||
|
||
@AllArgsConstructor | ||
@Getter | ||
public class UrlPage { | ||
private Url url; | ||
private List<UrlCheck> checks; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package hexlet.code.model; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import lombok.Setter; | ||
|
||
import java.sql.Timestamp; | ||
|
||
@AllArgsConstructor | ||
@NoArgsConstructor | ||
@Getter | ||
@Setter | ||
public class UrlCheck { | ||
private Long id; | ||
private Long urlId; | ||
private int statusCode; | ||
private String h1; | ||
private String title; | ||
private String description; | ||
private Timestamp createdAt; | ||
|
||
public UrlCheck(int statusCode, String h1, String title, String description, Timestamp createdAt) { | ||
this.statusCode = statusCode; | ||
this.h1 = h1; | ||
this.title = title; | ||
this.description = description; | ||
this.createdAt = createdAt; | ||
} | ||
} |
97 changes: 97 additions & 0 deletions
97
app/src/main/java/hexlet/code/repository/UrlCheckRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
package hexlet.code.repository; | ||
|
||
import hexlet.code.model.UrlCheck; | ||
|
||
import java.sql.SQLException; | ||
import java.sql.Statement; | ||
import java.util.ArrayList; | ||
import java.util.Comparator; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
public class UrlCheckRepository extends BaseRepository { | ||
|
||
public static void save(UrlCheck urlCheck) throws SQLException { | ||
var sql = "INSERT INTO url_checks (url_id, status_code, h1, title, description, created_at) " | ||
+ "VALUES (?, ?, ?, ?, ?, ?)"; | ||
try (var conn = dataSource.getConnection(); | ||
var preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { | ||
|
||
preparedStatement.setLong(1, urlCheck.getUrlId()); | ||
preparedStatement.setInt(2, urlCheck.getStatusCode()); | ||
preparedStatement.setString(3, urlCheck.getH1()); | ||
preparedStatement.setString(4, urlCheck.getTitle()); | ||
preparedStatement.setString(5, urlCheck.getDescription()); | ||
preparedStatement.setTimestamp(6, urlCheck.getCreatedAt()); | ||
preparedStatement.executeUpdate(); | ||
|
||
var generatedKeys = preparedStatement.getGeneratedKeys(); | ||
if (generatedKeys.next()) { | ||
urlCheck.setId(generatedKeys.getLong(1)); | ||
} else { | ||
throw new SQLException("Не сформирован ID"); | ||
} | ||
} | ||
} | ||
|
||
public static Optional<List<UrlCheck>> find(Long urlId) throws SQLException { | ||
var sql = "SELECT * FROM url_checks WHERE url_id = ?"; | ||
try (var conn = dataSource.getConnection(); | ||
var stmt = conn.prepareStatement(sql)) { | ||
|
||
stmt.setLong(1, urlId); | ||
var resultSet = stmt.executeQuery(); | ||
|
||
var results = new ArrayList<UrlCheck>(); | ||
var currentListId = 1L; | ||
|
||
while (resultSet.next()) { | ||
var statusCode = resultSet.getInt("status_code"); | ||
var h1 = resultSet.getString("h1"); | ||
var title = resultSet.getString("title"); | ||
var description = resultSet.getString("description"); | ||
var createdAt = resultSet.getTimestamp("created_at"); | ||
var urlCheck = new UrlCheck(statusCode, h1, title, description, createdAt); | ||
urlCheck.setUrlId(urlId); | ||
urlCheck.setId(currentListId); | ||
|
||
currentListId++; | ||
|
||
results.add(urlCheck); | ||
} | ||
|
||
if (!results.isEmpty()) { | ||
return Optional.of(results); | ||
} else { | ||
return Optional.empty(); | ||
} | ||
} | ||
} | ||
|
||
public static List<UrlCheck> getEntities() throws SQLException { | ||
var sql = "SELECT * FROM url_checks"; | ||
try (var conn = dataSource.getConnection(); | ||
var stmt = conn.prepareStatement(sql)) { | ||
|
||
var resultSet = stmt.executeQuery(); | ||
var result = new ArrayList<UrlCheck>(); | ||
|
||
while (resultSet.next()) { | ||
var id = resultSet.getLong("id"); | ||
var urlId = resultSet.getLong("url_id"); | ||
var statusCode = resultSet.getInt("status_code"); | ||
var h1 = resultSet.getString("h1"); | ||
var title = resultSet.getString("title"); | ||
var description = resultSet.getString("description"); | ||
var createdAt = resultSet.getTimestamp("created_at"); | ||
var urlCheck = new UrlCheck(statusCode, h1, title, description, createdAt); | ||
urlCheck.setId(id); | ||
urlCheck.setUrlId(urlId); | ||
result.add(urlCheck); | ||
} | ||
result.sort(Comparator.comparing(UrlCheck::getId)); | ||
|
||
return result; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.