Skip to content

Commit 0335384

Browse files
Save checks for all status codes, including incomplete responses_4
1 parent a2c8c52 commit 0335384

File tree

7 files changed

+53
-29
lines changed

7 files changed

+53
-29
lines changed

app/readme-resources/img_1.png

22.8 KB
Loading

app/readme-resources/img_2.png

48.9 KB
Loading

app/readme-resources/img_3.png

39.1 KB
Loading

app/readme-resources/img_4.png

33.6 KB
Loading

app/src/main/java/hexlet/code/controller/UrlChecksController.java

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@
88
import io.javalin.http.NotFoundResponse;
99
import kong.unirest.Unirest;
1010
import org.jsoup.Jsoup;
11-
import org.jsoup.nodes.Document;
1211

1312
import java.sql.SQLException;
14-
import java.time.LocalDateTime;
13+
1514

1615
public class UrlChecksController {
1716
public static void check(Context ctx) throws SQLException {
@@ -23,33 +22,43 @@ public static void check(Context ctx) throws SQLException {
2322

2423

2524
try {
26-
var response = Unirest.get(name).asString();
25+
var response = Unirest.get(name)
26+
.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
27+
.asString();
28+
2729
int statusCode = response.getStatus();
30+
String h1 = "";
31+
String title = "";
32+
String description = "";
2833

2934
if (statusCode == 200) {
30-
Document responseBody = Jsoup.parse(response.getBody());
31-
32-
String h1 = responseBody.selectFirst("h1") != null
33-
? responseBody.selectFirst("h1").text() : "";
35+
var doc = Jsoup.parse(response.getBody());
36+
var h1El = doc.selectFirst("h1");
37+
var descEl = doc.selectFirst("meta[name~=(?i)description]");
3438

35-
String title = responseBody.title();
36-
37-
String description = !responseBody.select("meta[name=description]").isEmpty()
38-
? responseBody.select("meta[name=description]").get(0).attr("content") : "";
39+
h1 = h1El != null ? h1El.text() : "";
40+
title = doc.title();
41+
description = descEl != null ? descEl.attr("content") : "";
42+
}
3943

40-
var createdAt = LocalDateTime.now();
44+
var check = new UrlCheck(statusCode, h1, title, description);
45+
check.setUrlId(urlId);
46+
UrlCheckRepository.save(check);
4147

42-
var urlCheck = new UrlCheck(statusCode, h1, title, description);
43-
urlCheck.setUrlId(urlId);
44-
UrlCheckRepository.save(urlCheck);
45-
System.out.println("[DEBUG] Сохранили новую проверку для urlId=" + urlId);
48+
boolean incomplete = statusCode != 200 || title.isEmpty() || h1.isEmpty() || description.isEmpty();
49+
if (incomplete) {
50+
ctx.sessionAttribute("message", "Проверка выполнена, но не удалось получить все данные "
51+
+ "(код " + statusCode + ")");
52+
} else {
53+
ctx.sessionAttribute("message", "Проверка выполнена успешно (код " + statusCode + ")");
4654
}
47-
ctx.redirect(NamedRoutes.urlPath(urlId));
55+
4856
} catch (Exception e) {
49-
ctx.sessionAttribute("message", "Проверка не пройдена");
50-
ctx.redirect(NamedRoutes.urlPath(urlId));
57+
System.out.println("[ERROR] Проверка не выполнена: " + e.getMessage());
58+
ctx.sessionAttribute("message", "Проверка не пройдена: " + e.getMessage());
5159
}
5260

61+
ctx.redirect(NamedRoutes.urlPath(urlId));
5362
}
5463
}
5564

app/src/main/java/hexlet/code/repository/UrlCheckRepository.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ public static void save(UrlCheck urlCheck) throws SQLException {
3838
preparedStatement.setTimestamp(6, Timestamp.valueOf(urlCheck.getCreatedAt()));
3939
preparedStatement.executeUpdate();
4040

41-
int updated = preparedStatement.executeUpdate();
42-
System.out.println("[DEBUG] executeUpdate вернул: " + updated);
43-
4441
var generatedKeys = preparedStatement.getGeneratedKeys();
4542
if (generatedKeys.next()) {
4643
urlCheck.setId(generatedKeys.getLong(1));

app/src/main/resources/templates/urls/show.jte

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,32 @@ content = @`
1111
<path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
1212
</symbol>
1313
</svg>
14-
@if(page.getMessage() != null && page.getMessage().contains("Проверка не пройдена"))
15-
<div class="alert alert-danger d-flex align-items-center alert-dismissible fade show m-0" role="alert">
16-
<svg class="bi flex-shrink-0 me-2" role="img" aria-label="Danger:"><use xlink:href="#exclamation-triangle-fill"/></svg>
17-
<div>
18-
${page.getMessage()}
14+
@if(page.getMessage() != null)
15+
@if(page.getMessage().contains("не удалось получить все данные"))
16+
<div class="alert alert-warning d-flex align-items-center alert-dismissible fade show m-0" role="alert">
17+
<svg class="bi flex-shrink-0 me-2" role="img" aria-label="Warning:">
18+
<use xlink:href="#exclamation-triangle-fill" />
19+
</svg>
20+
<div>${page.getMessage()}</div>
21+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
1922
</div>
20-
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
21-
</div>
23+
@elseif(page.getMessage().contains("успешно"))
24+
<div class="alert alert-success d-flex align-items-center alert-dismissible fade show m-0" role="alert">
25+
<svg class="bi flex-shrink-0 me-2" role="img" aria-label="Success:">
26+
<use xlink:href="#exclamation-triangle-fill" />
27+
</svg>
28+
<div>${page.getMessage()}</div>
29+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
30+
</div>
31+
@else
32+
<div class="alert alert-danger d-flex align-items-center alert-dismissible fade show m-0" role="alert">
33+
<svg class="bi flex-shrink-0 me-2" role="img" aria-label="Danger:">
34+
<use xlink:href="#exclamation-triangle-fill" />
35+
</svg>
36+
<div>${page.getMessage()}</div>
37+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
38+
</div>
39+
@endif
2240
@endif
2341
<div class="mx-4 mt-4 mb-0">
2442
<div class="flex-row fs-6">

0 commit comments

Comments
 (0)