From 95218294d25451c65f7cfb439e4ec1e7327929de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Sat, 25 Mar 2023 19:26:15 +0500
Subject: [PATCH 01/10] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?=
=?UTF-8?q?=D1=81=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0=20=D0=B2=20?=
=?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=83=D1=8E=20=D0=B2=D0=B5=D1=82=D0=BA=D1=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../edu/java/linkparser/LinkParserDemo.java | 22 +++++++++++++++++++
.../linkparser/absracts/AbstractParser.java | 21 ++++++++++++++++++
.../java/linkparser/absracts/GitParser.java | 18 +++++++++++++++
.../java/linkparser/absracts/OtherParser.java | 9 ++++++++
.../java/linkparser/absracts/StackParser.java | 18 +++++++++++++++
5 files changed, 88 insertions(+)
create mode 100644 FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
create mode 100644 FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
create mode 100644 FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
create mode 100644 FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
create mode 100644 FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
new file mode 100644
index 0000000..b6d44bb
--- /dev/null
+++ b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
@@ -0,0 +1,22 @@
+package ru.tinkoff.edu.java.linkparser;
+
+import ru.tinkoff.edu.java.linkparser.absracts.*;
+
+public class LinkParserDemo {
+
+ public static void main (String [] args) {
+
+ String link = "https://github.com/sanyarnd/tinkoff-java-course-2022/";
+ String link2 = "https://stackoverflow.com/questions/1642028/what-is-the-operator-in-c";
+ String link3 = "https://stackoverflow.com/search?q=unsupported%20link";
+
+ AbstractParser gitParser = new GitParser();
+ AbstractParser stackParser = new StackParser();
+ AbstractParser otherParser = new OtherParser();
+
+ gitParser.setNextParser(stackParser);
+ stackParser.setNextParser(otherParser);
+
+ System.out.println(gitParser.logParser(link3));
+ }
+}
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
new file mode 100644
index 0000000..89c15f3
--- /dev/null
+++ b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
@@ -0,0 +1,21 @@
+package ru.tinkoff.edu.java.linkparser.absracts;
+
+public abstract class AbstractParser {
+
+ private AbstractParser nextParser;
+
+ public void setNextParser(AbstractParser nextParser) {
+ this.nextParser = nextParser;
+ }
+
+ public String logParser (String link) {
+ if(nextParser != null) {
+ if(this.parsAbstract(link) == null) return nextParser.logParser(link);
+ return this.parsAbstract(link);
+ }
+ return null;
+ }
+
+ abstract protected String parsAbstract(String link);
+
+}
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
new file mode 100644
index 0000000..8df5abd
--- /dev/null
+++ b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
@@ -0,0 +1,18 @@
+package ru.tinkoff.edu.java.linkparser.absracts;
+
+import java.util.Objects;
+
+public class GitParser extends AbstractParser {
+
+ @Override
+ protected String parsAbstract(String link) {
+
+ String[] parsed = link.split("/");
+
+ if(!Objects.equals(parsed[2], "github.com")) return null;
+
+ if (parsed.length > 4) return parsed[3] + " " + parsed[4];
+
+ return null;
+ }
+}
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
new file mode 100644
index 0000000..09c62e5
--- /dev/null
+++ b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
@@ -0,0 +1,9 @@
+package ru.tinkoff.edu.java.linkparser.absracts;
+
+public class OtherParser extends AbstractParser {
+
+ @Override
+ protected String parsAbstract(String link) {
+ return "Ссылка не поддерживается";
+ }
+}
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
new file mode 100644
index 0000000..cd68e2a
--- /dev/null
+++ b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
@@ -0,0 +1,18 @@
+package ru.tinkoff.edu.java.linkparser.absracts;
+
+import java.util.Objects;
+
+public class StackParser extends AbstractParser {
+
+ @Override
+ protected String parsAbstract(String link) {
+
+ String[] parsed = link.split("/");
+
+ if (!Objects.equals(parsed[2], "stackoverflow.com")) return null;
+
+ if (parsed.length > 4) return parsed[4];
+
+ return null;
+ }
+}
From 5f4eac289372a1d81db0044d6d2f3c8d4de20d89 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Sat, 25 Mar 2023 19:35:15 +0500
Subject: [PATCH 02/10] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?=
=?UTF-8?q?=D1=81=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0=20=D0=B2=20?=
=?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=83=D1=8E=20=D0=B2=D0=B5=D1=82=D0=BA=D1=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP_re/bot/pom.xml | 53 +++++++++++
.../tinkoff/edu/java/bot/BotApplication.java | 16 ++++
.../bot/configuration/ApplicationConfig.java | 9 ++
.../src/main/resources/application.properties | 1 +
FP_re/link-parser/pom.xml | 14 +++
.../edu/java/linkparser/LinkParserDemo.java | 0
.../linkparser/absracts/AbstractParser.java | 0
.../java/linkparser/absracts/GitParser.java | 0
.../java/linkparser/absracts/OtherParser.java | 0
.../java/linkparser/absracts/StackParser.java | 0
FP_re/pom.xml | 95 +++++++++++++++++++
FP_re/scrapper/pom.xml | 53 +++++++++++
.../java/scrapper/ScrapperApplication.java | 16 ++++
.../configuration/ApplicationConfig.java | 9 ++
.../src/main/resources/application.properties | 1 +
15 files changed, 267 insertions(+)
create mode 100644 FP_re/bot/pom.xml
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
create mode 100644 FP_re/bot/src/main/resources/application.properties
create mode 100644 FP_re/link-parser/pom.xml
rename {FP => FP_re}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java (100%)
rename {FP => FP_re}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java (100%)
rename {FP => FP_re}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java (100%)
rename {FP => FP_re}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java (100%)
rename {FP => FP_re}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java (100%)
create mode 100644 FP_re/pom.xml
create mode 100644 FP_re/scrapper/pom.xml
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
create mode 100644 FP_re/scrapper/src/main/resources/application.properties
diff --git a/FP_re/bot/pom.xml b/FP_re/bot/pom.xml
new file mode 100644
index 0000000..80a47a0
--- /dev/null
+++ b/FP_re/bot/pom.xml
@@ -0,0 +1,53 @@
+
+
+
+ org.example
+ FP
+ 1.0
+
+
+ 4.0.0
+
+ bot
+
+
+ 3.0.1
+ 2.7.6
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ ${starter-validation.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${starter-web.version}
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+ org.springframework
+ spring-context-indexer
+ true
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
\ No newline at end of file
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
new file mode 100644
index 0000000..0e60ab2
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
@@ -0,0 +1,16 @@
+package ru.tinkoff.edu.java.bot;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import ru.tinkoff.edu.java.bot.configuration.ApplicationConfig;
+
+@SpringBootApplication
+@EnableConfigurationProperties(ApplicationConfig.class)
+public class BotApplication {
+public static void main(String[] args) {
+ var ctx = SpringApplication.run(BotApplication.class, args);
+ ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
+ System.out.println(config);
+ }
+}
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
new file mode 100644
index 0000000..11b120c
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
@@ -0,0 +1,9 @@
+package ru.tinkoff.edu.java.bot.configuration;
+
+import jakarta.validation.constraints.NotNull;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.validation.annotation.Validated;
+
+@Validated
+@ConfigurationProperties(prefix = "app", ignoreUnknownFields = false)
+public record ApplicationConfig(@NotNull String test) {}
diff --git a/FP_re/bot/src/main/resources/application.properties b/FP_re/bot/src/main/resources/application.properties
new file mode 100644
index 0000000..6eb4921
--- /dev/null
+++ b/FP_re/bot/src/main/resources/application.properties
@@ -0,0 +1 @@
+app.test="123"
\ No newline at end of file
diff --git a/FP_re/link-parser/pom.xml b/FP_re/link-parser/pom.xml
new file mode 100644
index 0000000..1a9e456
--- /dev/null
+++ b/FP_re/link-parser/pom.xml
@@ -0,0 +1,14 @@
+
+
+
+ org.example
+ FP
+ 1.0
+
+
+ 4.0.0
+
+ link-parser
+
\ No newline at end of file
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
similarity index 100%
rename from FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
rename to FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
similarity index 100%
rename from FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
rename to FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
similarity index 100%
rename from FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
rename to FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
similarity index 100%
rename from FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
rename to FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
diff --git a/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
similarity index 100%
rename from FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
rename to FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
diff --git a/FP_re/pom.xml b/FP_re/pom.xml
new file mode 100644
index 0000000..302e82c
--- /dev/null
+++ b/FP_re/pom.xml
@@ -0,0 +1,95 @@
+
+
+ 4.0.0
+
+ org.example
+
+ FP
+
+ pom
+
+ 1.0
+
+
+ bot
+ link-parser
+ scrapper
+
+
+
+ UTF-8
+ 17
+ 17
+ 3.8.1
+ 3.0.1
+ 2022.0.0
+ 23.1.0
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version
+
+
+ true
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+ repackage
+ build-info
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 17
+ true
+
+
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+ org.jetbrains
+ annotations
+ ${annotations.version}
+ provided
+
+
+
+
\ No newline at end of file
diff --git a/FP_re/scrapper/pom.xml b/FP_re/scrapper/pom.xml
new file mode 100644
index 0000000..ae2e977
--- /dev/null
+++ b/FP_re/scrapper/pom.xml
@@ -0,0 +1,53 @@
+
+
+
+ org.example
+ FP
+ 1.0
+
+
+ 4.0.0
+
+ scrapper
+
+
+ 3.0.1
+ 2.7.6
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ ${starter-validation.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${starter-web.version}
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+ org.springframework
+ spring-context-indexer
+ true
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
\ No newline at end of file
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
new file mode 100644
index 0000000..48dc366
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
@@ -0,0 +1,16 @@
+package ru.tinkoff.edu.java.scrapper;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import ru.tinkoff.edu.java.scrapper.configuration.ApplicationConfig;
+
+@SpringBootApplication
+@EnableConfigurationProperties(ApplicationConfig.class)
+public class ScrapperApplication {
+public static void main(String[] args) {
+ var ctx = SpringApplication.run(ScrapperApplication.class, args);
+ ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
+ System.out.println(config);
+ }
+}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
new file mode 100644
index 0000000..5d7125d
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
@@ -0,0 +1,9 @@
+package ru.tinkoff.edu.java.scrapper.configuration;
+
+import jakarta.validation.constraints.NotNull;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.validation.annotation.Validated;
+
+@Validated
+@ConfigurationProperties(prefix = "app", ignoreUnknownFields = false)
+public record ApplicationConfig(@NotNull String test) {}
diff --git a/FP_re/scrapper/src/main/resources/application.properties b/FP_re/scrapper/src/main/resources/application.properties
new file mode 100644
index 0000000..7637125
--- /dev/null
+++ b/FP_re/scrapper/src/main/resources/application.properties
@@ -0,0 +1 @@
+app.test="456"
\ No newline at end of file
From e900370fe42bbf6ce1de5e45794d72c9d5d11048 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Sat, 25 Mar 2023 19:59:00 +0500
Subject: [PATCH 03/10] =?UTF-8?q?"=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?=
=?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=B2=D0=B0?=
=?UTF-8?q?=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D0=B8"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ru/tinkoff/edu/java/linkparser/absracts/StackParser.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
index cd68e2a..a73b23b 100644
--- a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
+++ b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
@@ -10,6 +10,8 @@ protected String parsAbstract(String link) {
String[] parsed = link.split("/");
if (!Objects.equals(parsed[2], "stackoverflow.com")) return null;
+ if (!Objects.equals(parsed[3], "questions")) return null;
+
if (parsed.length > 4) return parsed[4];
From 045daf8897835f5838b341ede794d66149259511 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Sat, 25 Mar 2023 20:38:36 +0500
Subject: [PATCH 04/10] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?=
=?UTF-8?q?=D1=88=D0=B8=D0=B5=20=D0=B8=D1=81=D1=80=D0=BF=D0=B0=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8?=
=?UTF-8?q?=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BF=D0=B0=D1=80?=
=?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java | 2 +-
.../tinkoff/edu/java/linkparser/absracts/AbstractParser.java | 3 +--
.../ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java | 2 +-
3 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
index b6d44bb..b77b570 100644
--- a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
+++ b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
@@ -17,6 +17,6 @@ public static void main (String [] args) {
gitParser.setNextParser(stackParser);
stackParser.setNextParser(otherParser);
- System.out.println(gitParser.logParser(link3));
+ System.out.println(gitParser.logParser(link));
}
}
diff --git a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
index 89c15f3..503e413 100644
--- a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
+++ b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
@@ -11,9 +11,8 @@ public void setNextParser(AbstractParser nextParser) {
public String logParser (String link) {
if(nextParser != null) {
if(this.parsAbstract(link) == null) return nextParser.logParser(link);
- return this.parsAbstract(link);
}
- return null;
+ return this.parsAbstract(link);
}
abstract protected String parsAbstract(String link);
diff --git a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
index 09c62e5..f3746fe 100644
--- a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
+++ b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
@@ -4,6 +4,6 @@ public class OtherParser extends AbstractParser {
@Override
protected String parsAbstract(String link) {
- return "Ссылка не поддерживается";
+ return null;
}
}
From 10004a75a502e75e392fa2dcb8bc2ae4652598b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Tue, 28 Mar 2023 22:16:33 +0500
Subject: [PATCH 05/10] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20?=
=?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B0=20(=D1=81?=
=?UTF-8?q?=D1=8B=D1=80=D0=B0=D1=8F)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP_re/bot/pom.xml | 12 ++
.../tinkoff/edu/java/bot/BotApplication.java | 1 -
.../edu/java/bot/api/BotController.java | 14 ++
.../exceptionHandler/BotExceptionHandler.java | 36 ++++
.../java/bot/api/model/ApiErrorResponse.java | 11 ++
.../edu/java/bot/api/model/LinkUpdate.java | 6 +
.../bot/configuration/ApplicationConfig.java | 5 +-
.../bot/schedule/LinkUpdaterScheduler.java | 17 ++
.../edu/java/bot/schedule/Scheduler.java | 6 +
.../src/main/resources/application.properties | 4 +-
FP_re/bot/src/main/resources/botapi.yml | 59 ++++++
FP_re/scrapper/pom.xml | 7 +
.../java/scrapper/ScrapperApplication.java | 1 -
.../scrapper/api/ScrapperControllerLink.java | 32 +++
.../scrapper/api/ScrapperControllerTg.java | 19 ++
.../ScrapperExceptionHandler.java | 50 +++++
.../scrapper/api/model/AddLinkRequest.java | 3 +
.../scrapper/api/model/ApiErrorResponse.java | 11 ++
.../java/scrapper/api/model/LinkResponse.java | 3 +
.../scrapper/api/model/ListLinksResponse.java | 6 +
.../scrapper/api/model/RemoveLinkRequest.java | 3 +
.../configuration/ApplicationConfig.java | 3 +-
.../schedule/LinkUpdaterScheduler.java | 17 ++
.../edu/java/scrapper/schedule/Scheduler.java | 6 +
.../src/main/resources/application.properties | 4 +-
.../src/main/resources/scrapperapi.yml | 184 ++++++++++++++++++
26 files changed, 514 insertions(+), 6 deletions(-)
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
create mode 100644 FP_re/bot/src/main/resources/botapi.yml
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
create mode 100644 FP_re/scrapper/src/main/resources/scrapperapi.yml
diff --git a/FP_re/bot/pom.xml b/FP_re/bot/pom.xml
index 80a47a0..ad944c9 100644
--- a/FP_re/bot/pom.xml
+++ b/FP_re/bot/pom.xml
@@ -18,6 +18,18 @@
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.0.2
+
+
+ org.apache.commons
+ commons-lang3
+ 3.10
+
+
org.springframework.boot
spring-boot-starter-validation
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
index 0e60ab2..7e836be 100644
--- a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
@@ -11,6 +11,5 @@ public class BotApplication {
public static void main(String[] args) {
var ctx = SpringApplication.run(BotApplication.class, args);
ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
- System.out.println(config);
}
}
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java
new file mode 100644
index 0000000..25186cf
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java
@@ -0,0 +1,14 @@
+package ru.tinkoff.edu.java.bot.api;
+
+import org.springframework.web.bind.annotation.*;
+import ru.tinkoff.edu.java.bot.api.model.LinkUpdate;
+
+@RestController
+@RequestMapping("/update")
+public class BotController {
+
+ @PostMapping
+ public String updateChat(@RequestBody LinkUpdate update) {
+ return update.toString();
+ }
+}
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java
new file mode 100644
index 0000000..732a56e
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java
@@ -0,0 +1,36 @@
+package ru.tinkoff.edu.java.bot.api.exceptionHandler;
+
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import ru.tinkoff.edu.java.bot.api.model.ApiErrorResponse;
+
+@RestControllerAdvice
+public class BotExceptionHandler {
+
+ private String getDescription(String message) {
+ ApiErrorResponse errorObj = new ApiErrorResponse(
+ message,
+ null,
+ null,
+ null,
+ null
+ );
+ return errorObj.description();
+ }
+
+ @ExceptionHandler(HttpMessageNotReadableException.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ public String MessageNotReadable(HttpMessageNotReadableException Exception) {
+ return getDescription("Некорректные значения параметров или их нет!");
+ }
+
+ @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ public String MethodNotSupported(HttpRequestMethodNotSupportedException Exception) {
+ return getDescription("Метод не разрешен!");
+ }
+}
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java
new file mode 100644
index 0000000..f43001e
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java
@@ -0,0 +1,11 @@
+package ru.tinkoff.edu.java.bot.api.model;
+
+import java.util.List;
+
+public record ApiErrorResponse(
+ String description,
+ String code,
+ String exceptionName,
+ String exceptionMessage,
+ List stacktrace
+) {}
\ No newline at end of file
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java
new file mode 100644
index 0000000..0f44607
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java
@@ -0,0 +1,6 @@
+package ru.tinkoff.edu.java.bot.api.model;
+
+import java.util.List;
+
+public record LinkUpdate(long id, String url, String description, List tgChatIds) {
+}
\ No newline at end of file
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
index 11b120c..deb3dee 100644
--- a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
@@ -2,8 +2,11 @@
import jakarta.validation.constraints.NotNull;
import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.validation.annotation.Validated;
+import ru.tinkoff.edu.java.bot.schedule.Scheduler;
@Validated
+@EnableScheduling
@ConfigurationProperties(prefix = "app", ignoreUnknownFields = false)
-public record ApplicationConfig(@NotNull String test) {}
+public record ApplicationConfig(@NotNull String test, @NotNull Scheduler scheduler) {}
\ No newline at end of file
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
new file mode 100644
index 0000000..f33b35a
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
@@ -0,0 +1,17 @@
+package ru.tinkoff.edu.java.bot.schedule;
+
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+@EnableScheduling
+public class LinkUpdaterScheduler {
+ private final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
+
+ @Scheduled(fixedDelayString = "${app.scheduler.interval}")
+ public void update() {
+ LOGGER.log(Level.INFO, "MSG INFO");
+ }
+}
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
new file mode 100644
index 0000000..186f6ad
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
@@ -0,0 +1,6 @@
+package ru.tinkoff.edu.java.bot.schedule;
+
+import java.time.Duration;
+
+public record Scheduler(Duration interval) {
+}
diff --git a/FP_re/bot/src/main/resources/application.properties b/FP_re/bot/src/main/resources/application.properties
index 6eb4921..8100c18 100644
--- a/FP_re/bot/src/main/resources/application.properties
+++ b/FP_re/bot/src/main/resources/application.properties
@@ -1 +1,3 @@
-app.test="123"
\ No newline at end of file
+app.test=123
+springdoc.swagger-ui.path=/swagger-ui
+app.scheduler.interval=10
\ No newline at end of file
diff --git a/FP_re/bot/src/main/resources/botapi.yml b/FP_re/bot/src/main/resources/botapi.yml
new file mode 100644
index 0000000..489441e
--- /dev/null
+++ b/FP_re/bot/src/main/resources/botapi.yml
@@ -0,0 +1,59 @@
+openapi: 3.0.1
+info:
+ title: Bot API
+ version: 1.0.0
+ contact:
+ name: Alexander Biryukov
+ url: https://github.com
+paths:
+ /updates:
+ post:
+ summary: Отправить обновление
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LinkUpdate'
+ required: true
+ responses:
+ '200':
+ description: Обновление обработано
+ '400':
+ description: Некорректные параметры запроса
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiErrorResponse'
+components:
+ schemas:
+ ApiErrorResponse:
+ type: object
+ properties:
+ description:
+ type: string
+ code:
+ type: string
+ exceptionName:
+ type: string
+ exceptionMessage:
+ type: string
+ stacktrace:
+ type: array
+ items:
+ type: string
+ LinkUpdate:
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ url:
+ type: string
+ format: uri
+ description:
+ type: string
+ tgChatIds:
+ type: array
+ items:
+ type: integer
+ format: int64
diff --git a/FP_re/scrapper/pom.xml b/FP_re/scrapper/pom.xml
index ae2e977..09f6880 100644
--- a/FP_re/scrapper/pom.xml
+++ b/FP_re/scrapper/pom.xml
@@ -18,6 +18,13 @@
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.0.2
+
+
org.springframework.boot
spring-boot-starter-validation
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
index 48dc366..1d9bda1 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
@@ -11,6 +11,5 @@ public class ScrapperApplication {
public static void main(String[] args) {
var ctx = SpringApplication.run(ScrapperApplication.class, args);
ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
- System.out.println(config);
}
}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
new file mode 100644
index 0000000..b443033
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
@@ -0,0 +1,32 @@
+package ru.tinkoff.edu.java.scrapper.api;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import ru.tinkoff.edu.java.scrapper.api.model.*;
+
+@RequestMapping("/links")
+@RestController
+public class ScrapperControllerLink {
+
+ @ResponseStatus(HttpStatus.NO_CONTENT)
+ @DeleteMapping
+ public void linksDelete(
+ @RequestHeader("Tg-Chat-Id") Long tgChatId,
+ @RequestBody RemoveLinkRequest removeLinkRequest
+ ) {}
+
+ @GetMapping
+ public String linksGet(@RequestHeader("Tg-Chat-Id") Long tgChatId) {
+ return tgChatId + "";
+ }
+
+ @PostMapping
+ public String linksPost(
+ @RequestHeader("Tg-Chat-Id") Long tgChatId,
+ @RequestBody AddLinkRequest addLinkRequest
+ ) {
+ return addLinkRequest.link();
+ }
+}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
new file mode 100644
index 0000000..be74b4f
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
@@ -0,0 +1,19 @@
+package ru.tinkoff.edu.java.scrapper.api;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+@RequestMapping("/tg-chat")
+@RestController
+public class ScrapperControllerTg {
+
+ @ResponseStatus(HttpStatus.NO_CONTENT)
+ @DeleteMapping("/{id}")
+ public void tgChatIdDelete(@PathVariable Long id) {}
+
+ @PostMapping("/{id}")
+ public String tgChatIdPost(@PathVariable Long id) {
+ if(id < 0) return "Аргумент отрицательный";
+ return id + "";
+ }
+}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java
new file mode 100644
index 0000000..f6f64c9
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java
@@ -0,0 +1,50 @@
+package ru.tinkoff.edu.java.scrapper.api.exceptionHandler;
+
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.MissingRequestHeaderException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
+import ru.tinkoff.edu.java.scrapper.api.model.ApiErrorResponse;
+
+@RestControllerAdvice
+public class ScrapperExceptionHandler {
+
+ private String getDescription(String message) {
+ ApiErrorResponse errorObj = new ApiErrorResponse(
+ message,
+ null,
+ null,
+ null,
+ null
+ );
+ return errorObj.description();
+ }
+
+ @ExceptionHandler(HttpMessageNotReadableException.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ public String MessageNotReadable(HttpMessageNotReadableException Exception) {
+ return getDescription("Некорректные значения параметров или их нет!");
+ }
+
+ @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ public String MethodNotSupported(HttpRequestMethodNotSupportedException Exception) {
+ return getDescription("Метод не разрешен!");
+ }
+
+ @ExceptionHandler(MissingRequestHeaderException.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ public String MissingRequestHeader(MissingRequestHeaderException Exception) {
+ return getDescription("Нет свойства в Headers!");
+ }
+
+ @ExceptionHandler(MethodArgumentTypeMismatchException.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ public String ArgumentTypeMismatch(MethodArgumentTypeMismatchException Exception) {
+ return getDescription("Неверный тип свойства в Headers!");
+ }
+}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java
new file mode 100644
index 0000000..7282291
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java
@@ -0,0 +1,3 @@
+package ru.tinkoff.edu.java.scrapper.api.model;
+
+public record AddLinkRequest(String link) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java
new file mode 100644
index 0000000..42e9be3
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java
@@ -0,0 +1,11 @@
+package ru.tinkoff.edu.java.scrapper.api.model;
+
+import java.util.List;
+
+public record ApiErrorResponse(
+ String description,
+ String code,
+ String ExceptionName,
+ String exceptionMessage,
+ List stacktrace
+) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java
new file mode 100644
index 0000000..023172d
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java
@@ -0,0 +1,3 @@
+package ru.tinkoff.edu.java.scrapper.api.model;
+
+public record LinkResponse(String url, int id) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java
new file mode 100644
index 0000000..9c9ed5b
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java
@@ -0,0 +1,6 @@
+package ru.tinkoff.edu.java.scrapper.api.model;
+
+import java.util.*;
+
+public record ListLinksResponse(List links, int size) {}
+
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java
new file mode 100644
index 0000000..3e2a8f0
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java
@@ -0,0 +1,3 @@
+package ru.tinkoff.edu.java.scrapper.api.model;
+
+public record RemoveLinkRequest(String link) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
index 5d7125d..e529689 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
@@ -3,7 +3,8 @@
import jakarta.validation.constraints.NotNull;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
+import ru.tinkoff.edu.java.scrapper.schedule.Scheduler;
@Validated
@ConfigurationProperties(prefix = "app", ignoreUnknownFields = false)
-public record ApplicationConfig(@NotNull String test) {}
+public record ApplicationConfig(@NotNull String test, @NotNull Scheduler scheduler) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
new file mode 100644
index 0000000..57588da
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
@@ -0,0 +1,17 @@
+package ru.tinkoff.edu.java.scrapper.schedule;
+
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+@EnableScheduling
+public class LinkUpdaterScheduler {
+ private final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
+
+ @Scheduled(fixedDelayString = "${app.scheduler.interval}")
+ public void update() {
+ LOGGER.log(Level.INFO, "MSG INFO");
+ }
+}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
new file mode 100644
index 0000000..72c8866
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
@@ -0,0 +1,6 @@
+package ru.tinkoff.edu.java.scrapper.schedule;
+
+import java.time.Duration;
+
+public record Scheduler(Duration interval) {
+}
diff --git a/FP_re/scrapper/src/main/resources/application.properties b/FP_re/scrapper/src/main/resources/application.properties
index 7637125..8100c18 100644
--- a/FP_re/scrapper/src/main/resources/application.properties
+++ b/FP_re/scrapper/src/main/resources/application.properties
@@ -1 +1,3 @@
-app.test="456"
\ No newline at end of file
+app.test=123
+springdoc.swagger-ui.path=/swagger-ui
+app.scheduler.interval=10
\ No newline at end of file
diff --git a/FP_re/scrapper/src/main/resources/scrapperapi.yml b/FP_re/scrapper/src/main/resources/scrapperapi.yml
new file mode 100644
index 0000000..c98cf7d
--- /dev/null
+++ b/FP_re/scrapper/src/main/resources/scrapperapi.yml
@@ -0,0 +1,184 @@
+openapi: 3.0.1
+info:
+ title: Scrapper API
+ version: 1.0.0
+ contact:
+ name: Alexander Biryukov
+ url: https://github.com
+paths:
+ /tg-chat/{id}:
+ post:
+ summary: Зарегистрировать чат
+ parameters:
+ - name: id
+ in: path
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: Чат зарегистрирован
+ '400':
+ description: Некорректные параметры запроса
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiErrorResponse'
+ delete:
+ summary: Удалить чат
+ parameters:
+ - name: id
+ in: path
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: Чат успешно удалён
+ '400':
+ description: Некорректные параметры запроса
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiErrorResponse'
+ '404':
+ description: Чат не существует
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiErrorResponse'
+ /links:
+ get:
+ summary: Получить все отслеживаемые ссылки
+ parameters:
+ - name: Tg-Chat-Id
+ in: header
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: Ссылки успешно получены
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ListLinksResponse'
+ '400':
+ description: Некорректные параметры запроса
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiErrorResponse'
+ post:
+ summary: Добавить отслеживание ссылки
+ parameters:
+ - name: Tg-Chat-Id
+ in: header
+ required: true
+ schema:
+ type: integer
+ format: int64
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AddLinkRequest'
+ required: true
+ responses:
+ '200':
+ description: Ссылка успешно добавлена
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LinkResponse'
+ '400':
+ description: Некорректные параметры запроса
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiErrorResponse'
+ delete:
+ summary: Убрать отслеживание ссылки
+ parameters:
+ - name: Tg-Chat-Id
+ in: header
+ required: true
+ schema:
+ type: integer
+ format: int64
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/RemoveLinkRequest'
+ required: true
+ responses:
+ '200':
+ description: Ссылка успешно убрана
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LinkResponse'
+ '400':
+ description: Некорректные параметры запроса
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiErrorResponse'
+ '404':
+ description: Ссылка не найдена
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiErrorResponse'
+components:
+ schemas:
+ LinkResponse:
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ url:
+ type: string
+ format: uri
+ ApiErrorResponse:
+ type: object
+ properties:
+ description:
+ type: string
+ code:
+ type: string
+ exceptionName:
+ type: string
+ exceptionMessage:
+ type: string
+ stacktrace:
+ type: array
+ items:
+ type: string
+ AddLinkRequest:
+ type: object
+ properties:
+ link:
+ type: string
+ format: uri
+ ListLinksResponse:
+ type: object
+ properties:
+ links:
+ type: array
+ items:
+ $ref: '#/components/schemas/LinkResponse'
+ size:
+ type: integer
+ format: int32
+ RemoveLinkRequest:
+ type: object
+ properties:
+ link:
+ type: string
+ format: uri
From a80dd02015f57b68b30768caaf3391e84032127b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Sun, 2 Apr 2023 16:03:18 +0500
Subject: [PATCH 06/10] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?=
=?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D1=80=D0=BE=D0=B2=D1=89=D0=B8=D0=BA=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../bot/schedule/LinkUpdaterScheduler.java | 6 ++---
.../edu/java/bot/schedule/Scheduler.java | 3 +--
.../src/main/resources/application.properties | 2 +-
.../edu/java/linkparser/LinkParser.java | 18 +++++++++++++++
.../edu/java/linkparser/LinkParserDemo.java | 22 -------------------
FP_re/scrapper/pom.xml | 15 +++++++++++++
.../java/scrapper/ScrapperApplication.java | 4 ++++
.../configuration/ApplicationConfig.java | 2 ++
.../schedule/LinkUpdaterScheduler.java | 6 ++---
.../edu/java/scrapper/schedule/Scheduler.java | 3 +--
.../src/main/resources/application.properties | 2 +-
11 files changed, 49 insertions(+), 34 deletions(-)
create mode 100644 FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java
delete mode 100644 FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
index f33b35a..1b2ff0f 100644
--- a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
@@ -1,17 +1,17 @@
package ru.tinkoff.edu.java.bot.schedule;
-import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
import java.util.logging.Level;
import java.util.logging.Logger;
-@EnableScheduling
+@Service
public class LinkUpdaterScheduler {
private final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
@Scheduled(fixedDelayString = "${app.scheduler.interval}")
public void update() {
- LOGGER.log(Level.INFO, "MSG INFO");
+ LOGGER.log(Level.INFO, "Info bot called");
}
}
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
index 186f6ad..01d1766 100644
--- a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
@@ -2,5 +2,4 @@
import java.time.Duration;
-public record Scheduler(Duration interval) {
-}
+public record Scheduler(Duration interval) {}
diff --git a/FP_re/bot/src/main/resources/application.properties b/FP_re/bot/src/main/resources/application.properties
index 8100c18..bef1ef2 100644
--- a/FP_re/bot/src/main/resources/application.properties
+++ b/FP_re/bot/src/main/resources/application.properties
@@ -1,3 +1,3 @@
app.test=123
springdoc.swagger-ui.path=/swagger-ui
-app.scheduler.interval=10
\ No newline at end of file
+app.scheduler.interval=5000
\ No newline at end of file
diff --git a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java
new file mode 100644
index 0000000..1f217ea
--- /dev/null
+++ b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java
@@ -0,0 +1,18 @@
+package ru.tinkoff.edu.java.linkparser;
+
+import ru.tinkoff.edu.java.linkparser.absracts.*;
+
+public class LinkParser {
+
+ public String getLink(String link) {
+
+ AbstractParser gitParser = new GitParser();
+ AbstractParser stackParser = new StackParser();
+ AbstractParser otherParser = new OtherParser();
+
+ gitParser.setNextParser(stackParser);
+ stackParser.setNextParser(otherParser);
+
+ return gitParser.logParser(link);
+ }
+}
diff --git a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
deleted file mode 100644
index b77b570..0000000
--- a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParserDemo.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package ru.tinkoff.edu.java.linkparser;
-
-import ru.tinkoff.edu.java.linkparser.absracts.*;
-
-public class LinkParserDemo {
-
- public static void main (String [] args) {
-
- String link = "https://github.com/sanyarnd/tinkoff-java-course-2022/";
- String link2 = "https://stackoverflow.com/questions/1642028/what-is-the-operator-in-c";
- String link3 = "https://stackoverflow.com/search?q=unsupported%20link";
-
- AbstractParser gitParser = new GitParser();
- AbstractParser stackParser = new StackParser();
- AbstractParser otherParser = new OtherParser();
-
- gitParser.setNextParser(stackParser);
- stackParser.setNextParser(otherParser);
-
- System.out.println(gitParser.logParser(link));
- }
-}
diff --git a/FP_re/scrapper/pom.xml b/FP_re/scrapper/pom.xml
index 09f6880..34c76b4 100644
--- a/FP_re/scrapper/pom.xml
+++ b/FP_re/scrapper/pom.xml
@@ -56,5 +56,20 @@
lombok
true
+
+
+ org.example
+ link-parser
+ 1.0
+ compile
+
+
+
+
+ org.springframework
+ spring-webflux
+ 6.0.6
+
+
\ No newline at end of file
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
index 1d9bda1..c4b02df 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
@@ -3,6 +3,8 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import ru.tinkoff.edu.java.linkparser.LinkParser;
import ru.tinkoff.edu.java.scrapper.configuration.ApplicationConfig;
@SpringBootApplication
@@ -11,5 +13,7 @@ public class ScrapperApplication {
public static void main(String[] args) {
var ctx = SpringApplication.run(ScrapperApplication.class, args);
ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
+ LinkParser pars = new LinkParser();
+ System.out.println(pars.getLink("https://github.com/sanyarnd/tinkoff-java-course-2022/"));
}
}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
index e529689..474fec8 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
@@ -2,9 +2,11 @@
import jakarta.validation.constraints.NotNull;
import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.validation.annotation.Validated;
import ru.tinkoff.edu.java.scrapper.schedule.Scheduler;
@Validated
@ConfigurationProperties(prefix = "app", ignoreUnknownFields = false)
+@EnableScheduling
public record ApplicationConfig(@NotNull String test, @NotNull Scheduler scheduler) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
index 57588da..37ca0de 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
@@ -1,17 +1,17 @@
package ru.tinkoff.edu.java.scrapper.schedule;
-import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
import java.util.logging.Level;
import java.util.logging.Logger;
-@EnableScheduling
+@Service
public class LinkUpdaterScheduler {
private final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
@Scheduled(fixedDelayString = "${app.scheduler.interval}")
public void update() {
- LOGGER.log(Level.INFO, "MSG INFO");
+ LOGGER.log(Level.INFO, "Info scrapper called");
}
}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
index 72c8866..d060c22 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
@@ -2,5 +2,4 @@
import java.time.Duration;
-public record Scheduler(Duration interval) {
-}
+public record Scheduler(Duration interval) {}
diff --git a/FP_re/scrapper/src/main/resources/application.properties b/FP_re/scrapper/src/main/resources/application.properties
index 8100c18..bef1ef2 100644
--- a/FP_re/scrapper/src/main/resources/application.properties
+++ b/FP_re/scrapper/src/main/resources/application.properties
@@ -1,3 +1,3 @@
app.test=123
springdoc.swagger-ui.path=/swagger-ui
-app.scheduler.interval=10
\ No newline at end of file
+app.scheduler.interval=5000
\ No newline at end of file
From fa4c5601d50c1b6bf6f5abb088e72b37009b292e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Mon, 3 Apr 2023 02:40:54 +0500
Subject: [PATCH 07/10] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82?=
=?UTF-8?q?=D0=BE=D0=B2=20(=D1=81=D1=8B=D1=80=D0=B0=D1=8F)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/linkparser/absracts/GitParser.java | 2 +-
FP_re/scrapper/pom.xml | 6 +--
.../java/scrapper/ScrapperApplication.java | 13 +++--
.../scrapper/client/ClientConfiguration.java | 51 +++++++++++++++++++
.../java/scrapper/client/GitHubRecord.java | 19 +++++++
.../scrapper/client/StackOverflowRecord.java | 10 ++++
.../java/scrapper/client/WeatherRecord.java | 11 ++++
.../configuration/ApplicationConfig.java | 5 +-
8 files changed, 108 insertions(+), 9 deletions(-)
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java
create mode 100644 FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java
diff --git a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
index 8df5abd..c30cc33 100644
--- a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
+++ b/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
@@ -11,7 +11,7 @@ protected String parsAbstract(String link) {
if(!Objects.equals(parsed[2], "github.com")) return null;
- if (parsed.length > 4) return parsed[3] + " " + parsed[4];
+ if (parsed.length > 4) return parsed[3] + "/" + parsed[4];
return null;
}
diff --git a/FP_re/scrapper/pom.xml b/FP_re/scrapper/pom.xml
index 34c76b4..a373157 100644
--- a/FP_re/scrapper/pom.xml
+++ b/FP_re/scrapper/pom.xml
@@ -66,9 +66,9 @@
- org.springframework
- spring-webflux
- 6.0.6
+ org.springframework.boot
+ spring-boot-starter-webflux
+ 3.0.5
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
index c4b02df..f37a02c 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
@@ -3,17 +3,22 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import ru.tinkoff.edu.java.linkparser.LinkParser;
+import ru.tinkoff.edu.java.scrapper.client.ClientConfiguration;
import ru.tinkoff.edu.java.scrapper.configuration.ApplicationConfig;
@SpringBootApplication
@EnableConfigurationProperties(ApplicationConfig.class)
public class ScrapperApplication {
public static void main(String[] args) {
+
+ String gitUrl = new String("https://api.github.com/repos/Ray-Not/JavaGuava");
+
var ctx = SpringApplication.run(ScrapperApplication.class, args);
ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
- LinkParser pars = new LinkParser();
- System.out.println(pars.getLink("https://github.com/sanyarnd/tinkoff-java-course-2022/"));
+ System.out.println("----------------------------------------------------------------");
+ ClientConfiguration cls = ctx.getBean(ClientConfiguration.class);
+ System.out.println(cls.weatherClient());
+ System.out.println(cls.gitHubClient());
+ System.out.println(cls.stackOverflowClient());
}
}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
new file mode 100644
index 0000000..ca960d9
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
@@ -0,0 +1,51 @@
+package ru.tinkoff.edu.java.scrapper.client;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.reactive.function.client.WebClient;
+import ru.tinkoff.edu.java.linkparser.LinkParser;
+
+
+@Configuration
+public class ClientConfiguration {
+
+ private final String BASE_URL = "https://jsonplaceholder.typicode.com";
+ static WebClient.Builder builder = WebClient.builder();
+ LinkParser pars = new LinkParser();
+
+ @Bean
+ public WeatherRecord weatherClient() {
+ WeatherRecord weatherResponse = builder.build()
+ .get()
+ .uri("http://api.weatherapi.com/v1/current.json?key=3ff5d13401e44f30a14170938230204&q=Russia&aqi=no")
+ .retrieve()
+ .bodyToMono(WeatherRecord.class)
+ .block();
+ return weatherResponse;
+ }
+
+ @Bean
+ public GitHubRecord gitHubClient() {
+ String gitLink = pars.getLink("https://github.com/Ray-Not/JavaGuava");
+ GitHubRecord gitHubResponse = builder.build()
+ .get()
+ .uri("https://api.github.com/repos/" + gitLink)
+ .retrieve()
+ .bodyToMono(GitHubRecord.class)
+ .block();
+ return gitHubResponse;
+ }
+
+ @Bean
+ public StackOverflowRecord stackOverflowClient() {
+ String stackLink = pars.getLink("https://stackoverflow.com/questions/1642028/what-is-the-operator-in-c");
+ String params = "?order=desc&sort=activity&site=stackoverflow";
+ StackOverflowRecord stackOverflowResponse = builder.build()
+ .get()
+ .uri("https://api.stackexchange.com/2.3/questions/" + stackLink + params)
+ .retrieve()
+ .bodyToMono(StackOverflowRecord.class)
+ .block();
+ return stackOverflowResponse;
+ }
+}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java
new file mode 100644
index 0000000..97ef980
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java
@@ -0,0 +1,19 @@
+package ru.tinkoff.edu.java.scrapper.client;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.time.OffsetDateTime;
+import java.util.HashMap;
+
+public record GitHubRecord(
+ @JsonProperty("full_name") String name,
+ @JsonProperty("owner") HashMap owner,
+ @JsonProperty("private") boolean is_private,
+ @JsonProperty("node_id") String node_id,
+ @JsonProperty("html_url") String url,
+ @JsonProperty("description") String description,
+ @JsonProperty("created_at") OffsetDateTime createdAt,
+ @JsonProperty("updated_at") OffsetDateTime updatedAt,
+ @JsonProperty("pushed_at") OffsetDateTime pushedAt
+
+) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java
new file mode 100644
index 0000000..6013400
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java
@@ -0,0 +1,10 @@
+package ru.tinkoff.edu.java.scrapper.client;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+
+public record StackOverflowRecord(
+ @JsonProperty("has_more") boolean has_more,
+ @JsonProperty("items") List owner
+) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java
new file mode 100644
index 0000000..5ee9adc
--- /dev/null
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java
@@ -0,0 +1,11 @@
+package ru.tinkoff.edu.java.scrapper.client;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.HashMap;
+import java.util.List;
+
+public record WeatherRecord(
+ @JsonProperty("location") HashMap location,
+ @JsonProperty("current") HashMap current
+ ) {}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
index 474fec8..3a82d60 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
@@ -9,4 +9,7 @@
@Validated
@ConfigurationProperties(prefix = "app", ignoreUnknownFields = false)
@EnableScheduling
-public record ApplicationConfig(@NotNull String test, @NotNull Scheduler scheduler) {}
+public record ApplicationConfig(
+ @NotNull String test,
+ @NotNull Scheduler scheduler
+) {}
From 7815ad8a4fc0954bda49257ad6855c2fc66b98ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Mon, 3 Apr 2023 02:42:18 +0500
Subject: [PATCH 08/10] =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=20+?=
=?UTF-8?q?=20=D0=BC=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=BF?=
=?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java | 3 ---
1 file changed, 3 deletions(-)
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
index f37a02c..efcf9c5 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
@@ -10,9 +10,6 @@
@EnableConfigurationProperties(ApplicationConfig.class)
public class ScrapperApplication {
public static void main(String[] args) {
-
- String gitUrl = new String("https://api.github.com/repos/Ray-Not/JavaGuava");
-
var ctx = SpringApplication.run(ScrapperApplication.class, args);
ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
System.out.println("----------------------------------------------------------------");
From 76f1a45c158ba2e8e74badeb9ca7d0d770d4d7e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Mon, 3 Apr 2023 21:20:33 +0500
Subject: [PATCH 09/10] =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=20?=
=?UTF-8?q?=D1=81=20prop?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/scrapper/ScrapperApplication.java | 10 ++++++++-
.../scrapper/client/ClientConfiguration.java | 21 ++++++++++++++++---
.../src/main/resources/application.properties | 4 +++-
.../target/classes/application.properties | 5 +++++
4 files changed, 35 insertions(+), 5 deletions(-)
create mode 100644 FP_re/scrapper/target/classes/application.properties
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
index efcf9c5..4c7f816 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
@@ -5,6 +5,9 @@
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import ru.tinkoff.edu.java.scrapper.client.ClientConfiguration;
import ru.tinkoff.edu.java.scrapper.configuration.ApplicationConfig;
+import ru.tinkoff.edu.java.scrapper.linkHandler.ParamsConverter;
+
+import java.util.HashMap;
@SpringBootApplication
@EnableConfigurationProperties(ApplicationConfig.class)
@@ -14,8 +17,13 @@ public static void main(String[] args) {
ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
System.out.println("----------------------------------------------------------------");
ClientConfiguration cls = ctx.getBean(ClientConfiguration.class);
- System.out.println(cls.weatherClient());
+// System.out.println(cls.weatherClient());
System.out.println(cls.gitHubClient());
System.out.println(cls.stackOverflowClient());
+// HashMap trt = new HashMap();
+// trt.put("order", "desc");
+// trt.put("sort", "activity");
+// trt.put("site", "stackoverflow");
+// System.out.println(ParamsConverter.setParamsLink("https://api.stackexchange.com/2.3/questions/552659", trt));
}
}
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
index ca960d9..7bb87b7 100644
--- a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
+++ b/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
@@ -1,15 +1,23 @@
package ru.tinkoff.edu.java.scrapper.client;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
import ru.tinkoff.edu.java.linkparser.LinkParser;
+import java.util.Objects;
+
@Configuration
public class ClientConfiguration {
- private final String BASE_URL = "https://jsonplaceholder.typicode.com";
+ private final String BASE_GIT_URL = "https://github.com/Ray-Not/JavaGuava";
+ private final String BASE_STACK_URL = "https://stackoverflow.com/questions/1642028/what-is-the-operator-in-c";
+ @Value("${git.link}")
+ String gitLink;
+ @Value("${stack.link}")
+ String stackLink;
static WebClient.Builder builder = WebClient.builder();
LinkParser pars = new LinkParser();
@@ -26,7 +34,10 @@ public WeatherRecord weatherClient() {
@Bean
public GitHubRecord gitHubClient() {
- String gitLink = pars.getLink("https://github.com/Ray-Not/JavaGuava");
+
+ if(Objects.equals(gitLink, "")) gitLink = BASE_GIT_URL;
+
+ gitLink = pars.getLink(gitLink);
GitHubRecord gitHubResponse = builder.build()
.get()
.uri("https://api.github.com/repos/" + gitLink)
@@ -38,8 +49,12 @@ public GitHubRecord gitHubClient() {
@Bean
public StackOverflowRecord stackOverflowClient() {
- String stackLink = pars.getLink("https://stackoverflow.com/questions/1642028/what-is-the-operator-in-c");
+
+
+ if(Objects.equals(stackLink, "")) stackLink = BASE_STACK_URL;
+
String params = "?order=desc&sort=activity&site=stackoverflow";
+ stackLink = pars.getLink(stackLink);
StackOverflowRecord stackOverflowResponse = builder.build()
.get()
.uri("https://api.stackexchange.com/2.3/questions/" + stackLink + params)
diff --git a/FP_re/scrapper/src/main/resources/application.properties b/FP_re/scrapper/src/main/resources/application.properties
index bef1ef2..a476623 100644
--- a/FP_re/scrapper/src/main/resources/application.properties
+++ b/FP_re/scrapper/src/main/resources/application.properties
@@ -1,3 +1,5 @@
app.test=123
springdoc.swagger-ui.path=/swagger-ui
-app.scheduler.interval=5000
\ No newline at end of file
+app.scheduler.interval=5000
+git.link=
+stack.link=
\ No newline at end of file
diff --git a/FP_re/scrapper/target/classes/application.properties b/FP_re/scrapper/target/classes/application.properties
new file mode 100644
index 0000000..a476623
--- /dev/null
+++ b/FP_re/scrapper/target/classes/application.properties
@@ -0,0 +1,5 @@
+app.test=123
+springdoc.swagger-ui.path=/swagger-ui
+app.scheduler.interval=5000
+git.link=
+stack.link=
\ No newline at end of file
From 07e9597c36667219701b8c1fc8ad1e273707aa91 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?=
=?UTF-8?q?=D0=B7=D1=80=D1=83=D0=BA=D0=BE=D0=B2?= <2sinsincuba@gmail.com>
Date: Mon, 3 Apr 2023 21:21:37 +0500
Subject: [PATCH 10/10] =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=20?=
=?UTF-8?q?=D1=81=20prop=20[clean]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP_re/scrapper/target/classes/application.properties | 5 -----
1 file changed, 5 deletions(-)
delete mode 100644 FP_re/scrapper/target/classes/application.properties
diff --git a/FP_re/scrapper/target/classes/application.properties b/FP_re/scrapper/target/classes/application.properties
deleted file mode 100644
index a476623..0000000
--- a/FP_re/scrapper/target/classes/application.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-app.test=123
-springdoc.swagger-ui.path=/swagger-ui
-app.scheduler.interval=5000
-git.link=
-stack.link=
\ No newline at end of file