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/24] =?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/24] =?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/24] =?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/24] =?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/24] =?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/24] =?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/24] =?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/24] =?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/24] =?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/24] =?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
From e05a2590a413bda14ced14013a9602f5ba8713ab 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, 4 Apr 2023 02:50:26 +0500
Subject: [PATCH 11/24] =?UTF-8?q?+=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B4?=
=?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP_re/link-parser/pom.xml | 12 ++++++++++++
.../edu/java/linkparser/absracts/GitParser.java | 4 +++-
FP_re/pom.xml | 13 +++++++++++++
.../src/main/resources/application.properties | 3 ++-
4 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/FP_re/link-parser/pom.xml b/FP_re/link-parser/pom.xml
index 1a9e456..088df38 100644
--- a/FP_re/link-parser/pom.xml
+++ b/FP_re/link-parser/pom.xml
@@ -11,4 +11,16 @@
4.0.0
link-parser
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
+
\ No newline at end of file
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 c30cc33..9525306 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
@@ -9,7 +9,9 @@ protected String parsAbstract(String link) {
String[] parsed = link.split("/");
- if(!Objects.equals(parsed[2], "github.com")) return null;
+ if (parsed.length < 2) return null;
+
+ if (!Objects.equals(parsed[2], "github.com")) return null;
if (parsed.length > 4) return parsed[3] + "/" + parsed[4];
diff --git a/FP_re/pom.xml b/FP_re/pom.xml
index 302e82c..f51131c 100644
--- a/FP_re/pom.xml
+++ b/FP_re/pom.xml
@@ -26,11 +26,24 @@
3.0.1
2022.0.0
23.1.0
+ 5.8.1
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
+ false
+
+
org.springframework.boot
spring-boot-maven-plugin
diff --git a/FP_re/scrapper/src/main/resources/application.properties b/FP_re/scrapper/src/main/resources/application.properties
index a476623..49096c2 100644
--- a/FP_re/scrapper/src/main/resources/application.properties
+++ b/FP_re/scrapper/src/main/resources/application.properties
@@ -2,4 +2,5 @@ app.test=123
springdoc.swagger-ui.path=/swagger-ui
app.scheduler.interval=5000
git.link=
-stack.link=
\ No newline at end of file
+stack.link=
+bot.token=5781089546:AAHNwqHIyTrAXvifhq2R8GpEcnYAxQuBeuw
\ No newline at end of file
From 759d171e97a847b844c051a23d73eae8ad82d604 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, 4 Apr 2023 02:52:19 +0500
Subject: [PATCH 12/24] =?UTF-8?q?+=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B4?=
=?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP_re/bot/src/main/resources/application.properties | 3 ++-
FP_re/scrapper/src/main/resources/application.properties | 1 -
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/FP_re/bot/src/main/resources/application.properties b/FP_re/bot/src/main/resources/application.properties
index bef1ef2..5448c39 100644
--- a/FP_re/bot/src/main/resources/application.properties
+++ b/FP_re/bot/src/main/resources/application.properties
@@ -1,3 +1,4 @@
app.test=123
springdoc.swagger-ui.path=/swagger-ui
-app.scheduler.interval=5000
\ No newline at end of file
+app.scheduler.interval=5000
+bot.token=
\ No newline at end of file
diff --git a/FP_re/scrapper/src/main/resources/application.properties b/FP_re/scrapper/src/main/resources/application.properties
index 49096c2..b9ad588 100644
--- a/FP_re/scrapper/src/main/resources/application.properties
+++ b/FP_re/scrapper/src/main/resources/application.properties
@@ -3,4 +3,3 @@ springdoc.swagger-ui.path=/swagger-ui
app.scheduler.interval=5000
git.link=
stack.link=
-bot.token=5781089546:AAHNwqHIyTrAXvifhq2R8GpEcnYAxQuBeuw
\ No newline at end of file
From 693685ee112bdbb158340143735f644c156ce253 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, 4 Apr 2023 07:01:07 +0500
Subject: [PATCH 13/24] =?UTF-8?q?+=20=D0=B1=D0=BE=D1=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP_re/bot/pom.xml | 14 +++
.../tinkoff/edu/java/bot/BotApplication.java | 12 +-
.../bot/configuration/ApplicationConfig.java | 8 +-
.../ru/tinkoff/edu/java/bot/telegram/Bot.java | 106 ++++++++++++++++++
.../java/bot/telegram/UpdateInterface.java | 8 ++
.../edu/java/bot/telegram/Updater.java | 21 ++++
.../src/main/resources/application.properties | 5 +-
7 files changed, 167 insertions(+), 7 deletions(-)
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
create mode 100644 FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
diff --git a/FP_re/bot/pom.xml b/FP_re/bot/pom.xml
index ad944c9..fd8306c 100644
--- a/FP_re/bot/pom.xml
+++ b/FP_re/bot/pom.xml
@@ -61,5 +61,19 @@
lombok
true
+
+
+ com.github.pengrad
+ java-telegram-bot-api
+ 6.6.0
+
+
+
+ org.example
+ scrapper
+ 1.0
+ compile
+
+
\ 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
index 7e836be..3d52675 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
@@ -4,12 +4,16 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import ru.tinkoff.edu.java.bot.configuration.ApplicationConfig;
+import ru.tinkoff.edu.java.bot.telegram.Bot;
+
@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);
+public class BotApplication
+{
+ public static void main(String[] args){
+ var ctx = SpringApplication.run(BotApplication.class, args);
+ ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
+ new Bot(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
index deb3dee..9ae2f9b 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
@@ -9,4 +9,10 @@
@Validated
@EnableScheduling
@ConfigurationProperties(prefix = "app", ignoreUnknownFields = false)
-public record ApplicationConfig(@NotNull String test, @NotNull Scheduler scheduler) {}
\ No newline at end of file
+public record ApplicationConfig(
+ @NotNull String test,
+ @NotNull Scheduler scheduler,
+ @NotNull BotConfig botConfig
+) {
+ public record BotConfig(String name, String token){}
+}
\ No newline at end of file
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
new file mode 100644
index 0000000..3d73188
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
@@ -0,0 +1,106 @@
+package ru.tinkoff.edu.java.bot.telegram;
+
+import com.pengrad.telegrambot.model.Update;
+import com.pengrad.telegrambot.model.request.ChatAction;
+import com.pengrad.telegrambot.model.request.ForceReply;
+import com.pengrad.telegrambot.model.request.ParseMode;
+import com.pengrad.telegrambot.request.SendChatAction;
+import com.pengrad.telegrambot.request.SendMessage;
+import org.springframework.stereotype.Component;
+import ru.tinkoff.edu.java.bot.configuration.ApplicationConfig;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class Bot extends Updater {
+
+ private static final String NEW_LINK_PRINT_COMMAND = "Print new link";
+ private static final String LINK_REMOVE_COMMAND = "Print link you want to remove";
+ private static final String HELP_MESSAGE = """
+ /start -- зарегистрировать пользователя
+ /help -- вывести окно с командами
+ /track -- начать отслеживание ссылки
+ /untrack -- прекратить отслеживание ссылки
+ /list -- показать список отслеживаемых ссылок""";
+ List links = new ArrayList<>();
+ public Bot(ApplicationConfig applicationConfig) {
+ super(applicationConfig.botConfig().token());
+ }
+
+ @Override
+ public void handleUpdate(Update update) {
+ if(update.message()!=null&&update.message().text()!=null){
+ long chatId = update.message().chat().id();
+ bot.execute(new SendChatAction(chatId, ChatAction.typing));
+ handleUpdateMessageTextCommand(update, chatId);
+ }
+ }
+
+ protected void handleUpdateMessageTextCommand(Update update, long chatId) {
+ switch (update.message().text()){
+ case "/start" -> handleStart(chatId);
+ case "/help" -> sendHelpText(chatId);
+ case "/track" -> handleTrack(chatId);
+ case "/untrack" -> handleUntrack(chatId);
+ case "/list" -> handleList(chatId);
+ default -> handleUnknownCommand(update, chatId);
+ }
+ }
+
+ protected void handleUnknownCommand(Update update, long chatId) {
+ if(update.message().replyToMessage()!=null){
+ handleRepliedMessage(update, chatId);
+ }else {
+ sendMessage(chatId, "Command was not found!");
+ sendHelpText(chatId);
+ }
+ }
+
+ protected void handleList(long chatId) {
+ bot.execute(
+ new SendMessage(chatId, "*Links:*\n"
+ +links.stream()
+ .map(s -> "\"`"+s+"`\"")
+ .reduce((s, s2) -> s+"\n"+s2)
+ .orElse("There is not links!"))
+ .disableWebPagePreview(true)
+ .parseMode(ParseMode.Markdown)
+ );
+ }
+
+ protected void handleUntrack(long chatId) {
+ bot.execute(new SendMessage(chatId, LINK_REMOVE_COMMAND)
+ .replyMarkup(new ForceReply(true))
+ );
+ }
+
+ protected void handleTrack(long chatId) {
+ bot.execute(new SendMessage(chatId, NEW_LINK_PRINT_COMMAND)
+ .replyMarkup(new ForceReply(true)));
+ }
+
+ protected void sendHelpText(long chatId) {
+ sendMessage(chatId, HELP_MESSAGE);
+ }
+
+ protected void handleStart(long chatId) {
+ sendMessage(chatId, "You was registered!");
+ }
+
+ protected void handleRepliedMessage(Update update, long chatId) {
+ switch (update.message().replyToMessage().text()){
+ case NEW_LINK_PRINT_COMMAND -> {
+ links.add(update.message().text());
+ sendMessage(chatId, "Link "+ update.message().text()+" was successfully added!");
+ }
+ case LINK_REMOVE_COMMAND -> {
+ if(links.remove(update.message().text())){
+ sendMessage(chatId, "Link "+ update.message().text()+" was successfully removed!");
+ }else {
+ sendMessage(chatId, "Link \""+ update.message().text()+"\" was not found!");
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
new file mode 100644
index 0000000..160acbe
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
@@ -0,0 +1,8 @@
+package ru.tinkoff.edu.java.bot.telegram;
+
+
+import com.pengrad.telegrambot.model.Update;
+
+public interface UpdateInterface {
+ void handleUpdate(Update update);
+}
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
new file mode 100644
index 0000000..73283df
--- /dev/null
+++ b/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
@@ -0,0 +1,21 @@
+package ru.tinkoff.edu.java.bot.telegram;
+
+import com.pengrad.telegrambot.TelegramBot;
+import com.pengrad.telegrambot.UpdatesListener;
+import com.pengrad.telegrambot.request.SendMessage;
+
+public abstract class Updater implements UpdateInterface {
+ protected TelegramBot bot;
+
+ public Updater(String token) {
+ this.bot = new TelegramBot(token);
+ this.bot.setUpdatesListener(updates -> {
+ updates.forEach(this::handleUpdate);
+ return UpdatesListener.CONFIRMED_UPDATES_ALL;
+ });
+ }
+
+ public void sendMessage(Long chatId, String message){
+ this.bot.execute(new SendMessage(chatId, message));
+ }
+}
\ No newline at end of file
diff --git a/FP_re/bot/src/main/resources/application.properties b/FP_re/bot/src/main/resources/application.properties
index 5448c39..3119d77 100644
--- a/FP_re/bot/src/main/resources/application.properties
+++ b/FP_re/bot/src/main/resources/application.properties
@@ -1,4 +1,5 @@
app.test=123
springdoc.swagger-ui.path=/swagger-ui
-app.scheduler.interval=5000
-bot.token=
\ No newline at end of file
+app.scheduler.interval=50000
+app.botConfig.token=5781089546:AAHNwqHIyTrAXvifhq2R8GpEcnYAxQuBeuw
+app.botConfig.name=@SFRETbot
From 1ec7b8317b38fcd77713478ceac3c30cb1a8f79f Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Wed, 5 Apr 2023 15:54:47 +0500
Subject: [PATCH 14/24] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?=
=?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B8?=
=?UTF-8?q?=D1=80=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
{FP_re => FP}/bot/pom.xml | 0
.../bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java | 0
.../src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java | 0
.../edu/java/bot/api/exceptionHandler/BotExceptionHandler.java | 0
.../java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java | 0
.../main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java | 0
.../ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java | 0
.../ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java | 0
.../src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java | 0
.../bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java | 0
.../java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java | 0
.../src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java | 0
{FP_re => FP}/bot/src/main/resources/application.properties | 0
{FP_re => FP}/bot/src/main/resources/botapi.yml | 0
{FP_re => FP}/link-parser/pom.xml | 0
.../src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java | 0
.../ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java | 0
.../java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java | 0
.../java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java | 0
.../java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java | 0
{FP_re => FP}/pom.xml | 0
{FP_re => FP}/scrapper/pom.xml | 0
.../java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java | 0
.../ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java | 0
.../ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java | 0
.../scrapper/api/exceptionHandler/ScrapperExceptionHandler.java | 0
.../ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java | 0
.../ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java | 0
.../java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java | 0
.../ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java | 0
.../ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java | 0
.../ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java | 0
.../java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java | 0
.../ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java | 0
.../java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java | 0
.../edu/java/scrapper/configuration/ApplicationConfig.java | 0
.../tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java | 0
.../java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java | 0
{FP_re => FP}/scrapper/src/main/resources/application.properties | 0
{FP_re => FP}/scrapper/src/main/resources/scrapperapi.yml | 0
40 files changed, 0 insertions(+), 0 deletions(-)
rename {FP_re => FP}/bot/pom.xml (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java (100%)
rename {FP_re => FP}/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java (100%)
rename {FP_re => FP}/bot/src/main/resources/application.properties (100%)
rename {FP_re => FP}/bot/src/main/resources/botapi.yml (100%)
rename {FP_re => FP}/link-parser/pom.xml (100%)
rename {FP_re => FP}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java (100%)
rename {FP_re => FP}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java (100%)
rename {FP_re => FP}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java (100%)
rename {FP_re => FP}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java (100%)
rename {FP_re => FP}/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java (100%)
rename {FP_re => FP}/pom.xml (100%)
rename {FP_re => FP}/scrapper/pom.xml (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java (100%)
rename {FP_re => FP}/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java (100%)
rename {FP_re => FP}/scrapper/src/main/resources/application.properties (100%)
rename {FP_re => FP}/scrapper/src/main/resources/scrapperapi.yml (100%)
diff --git a/FP_re/bot/pom.xml b/FP/bot/pom.xml
similarity index 100%
rename from FP_re/bot/pom.xml
rename to FP/bot/pom.xml
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/api/BotController.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/api/exceptionHandler/BotExceptionHandler.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/ApiErrorResponse.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/api/model/LinkUpdate.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/LinkUpdaterScheduler.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
diff --git a/FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
similarity index 100%
rename from FP_re/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
diff --git a/FP_re/bot/src/main/resources/application.properties b/FP/bot/src/main/resources/application.properties
similarity index 100%
rename from FP_re/bot/src/main/resources/application.properties
rename to FP/bot/src/main/resources/application.properties
diff --git a/FP_re/bot/src/main/resources/botapi.yml b/FP/bot/src/main/resources/botapi.yml
similarity index 100%
rename from FP_re/bot/src/main/resources/botapi.yml
rename to FP/bot/src/main/resources/botapi.yml
diff --git a/FP_re/link-parser/pom.xml b/FP/link-parser/pom.xml
similarity index 100%
rename from FP_re/link-parser/pom.xml
rename to FP/link-parser/pom.xml
diff --git a/FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java b/FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java
similarity index 100%
rename from FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java
rename to FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/LinkParser.java
diff --git a/FP_re/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
similarity index 100%
rename from FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
rename to FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/AbstractParser.java
diff --git a/FP_re/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
similarity index 100%
rename from FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
rename to FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/GitParser.java
diff --git a/FP_re/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
similarity index 100%
rename from FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
rename to FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/OtherParser.java
diff --git a/FP_re/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
similarity index 100%
rename from FP_re/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
rename to FP/link-parser/src/main/java/ru/tinkoff/edu/java/linkparser/absracts/StackParser.java
diff --git a/FP_re/pom.xml b/FP/pom.xml
similarity index 100%
rename from FP_re/pom.xml
rename to FP/pom.xml
diff --git a/FP_re/scrapper/pom.xml b/FP/scrapper/pom.xml
similarity index 100%
rename from FP_re/scrapper/pom.xml
rename to FP/scrapper/pom.xml
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/exceptionHandler/ScrapperExceptionHandler.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/AddLinkRequest.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ApiErrorResponse.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/LinkResponse.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/ListLinksResponse.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/model/RemoveLinkRequest.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/ClientConfiguration.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/GitHubRecord.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/StackOverflowRecord.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/client/WeatherRecord.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/configuration/ApplicationConfig.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/LinkUpdaterScheduler.java
diff --git a/FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
similarity index 100%
rename from FP_re/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
rename to FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/schedule/Scheduler.java
diff --git a/FP_re/scrapper/src/main/resources/application.properties b/FP/scrapper/src/main/resources/application.properties
similarity index 100%
rename from FP_re/scrapper/src/main/resources/application.properties
rename to FP/scrapper/src/main/resources/application.properties
diff --git a/FP_re/scrapper/src/main/resources/scrapperapi.yml b/FP/scrapper/src/main/resources/scrapperapi.yml
similarity index 100%
rename from FP_re/scrapper/src/main/resources/scrapperapi.yml
rename to FP/scrapper/src/main/resources/scrapperapi.yml
From 151b07fd7375d1a640d8f81930811ff832baf773 Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Wed, 5 Apr 2023 19:04:15 +0500
Subject: [PATCH 15/24] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?=
=?UTF-8?q?=D0=BB=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=B1=D0=BE=D1=82=20+?=
=?UTF-8?q?=20=D0=BC=D0=B5=D0=BD=D1=8E=20=D0=B4=D0=BB=D1=8F=20=D0=B1=D0=BE?=
=?UTF-8?q?=D1=82=D0=B0=20+=20DB=20+=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?=
=?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0?=
=?UTF-8?q?=20=D0=BE=D1=82=D1=81=D0=BB=D0=B5=D0=B6=D0=B8=D0=B2=D0=B0=D0=BD?=
=?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D1=81=D1=8B=D0=BB=D0=BE=D0=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP/bot/pom.xml | 6 +
.../tinkoff/edu/java/bot/BotApplication.java | 7 +-
.../bot/configuration/ApplicationConfig.java | 6 +-
.../bot/configuration/configRecords/Bot.java | 4 +
.../configRecords}/Scheduler.java | 2 +-
.../edu/java/bot/firstBot/BotMain.java | 21 ++++
.../ru/tinkoff/edu/java/bot/firstBot/DB.java | 42 +++++++
.../edu/java/bot/firstBot/MessageHandler.java | 21 ++++
.../edu/java/bot/firstBot/Updater.java | 40 +++++++
.../edu/java/bot/firstBot/commands/All.java | 7 ++
.../edu/java/bot/firstBot/commands/Help.java | 11 ++
.../edu/java/bot/firstBot/commands/List.java | 10 ++
.../edu/java/bot/firstBot/commands/Start.java | 9 ++
.../edu/java/bot/firstBot/commands/Track.java | 15 +++
.../java/bot/firstBot/commands/Untrack.java | 14 +++
.../ru/tinkoff/edu/java/bot/telegram/Bot.java | 106 ------------------
.../java/bot/telegram/UpdateInterface.java | 8 --
.../edu/java/bot/telegram/Updater.java | 21 ----
.../src/main/resources/application.properties | 4 +-
.../java/scrapper/ScrapperApplication.java | 9 --
20 files changed, 211 insertions(+), 152 deletions(-)
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/configRecords/Bot.java
rename FP/bot/src/main/java/ru/tinkoff/edu/java/bot/{schedule => configuration/configRecords}/Scheduler.java (55%)
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/BotMain.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/DB.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/MessageHandler.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/Updater.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/All.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Help.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/List.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Start.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Track.java
create mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Untrack.java
delete mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
delete mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
delete mode 100644 FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
diff --git a/FP/bot/pom.xml b/FP/bot/pom.xml
index fd8306c..6442fc2 100644
--- a/FP/bot/pom.xml
+++ b/FP/bot/pom.xml
@@ -39,6 +39,12 @@
org.springframework.boot
spring-boot-starter-web
${starter-web.version}
+
+
+ org.apache.logging.log4j
+ log4j-to-slf4j
+
+
org.springframework.boot
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
index 3d52675..505fdf0 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
@@ -4,7 +4,7 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import ru.tinkoff.edu.java.bot.configuration.ApplicationConfig;
-import ru.tinkoff.edu.java.bot.telegram.Bot;
+import ru.tinkoff.edu.java.bot.firstBot.BotMain;
@SpringBootApplication
@@ -14,6 +14,9 @@ public class BotApplication
public static void main(String[] args){
var ctx = SpringApplication.run(BotApplication.class, args);
ApplicationConfig config = ctx.getBean(ApplicationConfig.class);
- new Bot(config);
+
+ BotMain bot = new BotMain(config.bot().token());
+ bot.start();
+
}
}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
index 9ae2f9b..49ce5e3 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/ApplicationConfig.java
@@ -4,7 +4,8 @@
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;
+import ru.tinkoff.edu.java.bot.configuration.configRecords.Bot;
+import ru.tinkoff.edu.java.bot.configuration.configRecords.Scheduler;
@Validated
@EnableScheduling
@@ -12,7 +13,6 @@
public record ApplicationConfig(
@NotNull String test,
@NotNull Scheduler scheduler,
- @NotNull BotConfig botConfig
+ Bot bot
) {
- public record BotConfig(String name, String token){}
}
\ No newline at end of file
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/configRecords/Bot.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/configRecords/Bot.java
new file mode 100644
index 0000000..37f4842
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/configRecords/Bot.java
@@ -0,0 +1,4 @@
+package ru.tinkoff.edu.java.bot.configuration.configRecords;
+
+public record Bot(String token, String name) {
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/configRecords/Scheduler.java
similarity index 55%
rename from FP/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
rename to FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/configRecords/Scheduler.java
index 01d1766..08278f6 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/schedule/Scheduler.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/configuration/configRecords/Scheduler.java
@@ -1,4 +1,4 @@
-package ru.tinkoff.edu.java.bot.schedule;
+package ru.tinkoff.edu.java.bot.configuration.configRecords;
import java.time.Duration;
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/BotMain.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/BotMain.java
new file mode 100644
index 0000000..1466675
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/BotMain.java
@@ -0,0 +1,21 @@
+package ru.tinkoff.edu.java.bot.firstBot;
+
+import com.pengrad.telegrambot.TelegramBot;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import ru.tinkoff.edu.java.bot.configuration.ApplicationConfig;
+
+
+@EnableConfigurationProperties(ApplicationConfig.class)
+public class BotMain {
+
+ String token;
+
+ public BotMain(String token) {
+ this.token = token;
+ }
+
+ public void start() {
+ TelegramBot bot = new TelegramBot(token);
+ bot.setUpdatesListener(new Updater(bot));
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/DB.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/DB.java
new file mode 100644
index 0000000..486a886
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/DB.java
@@ -0,0 +1,42 @@
+package ru.tinkoff.edu.java.bot.firstBot;
+
+import java.util.ArrayList;
+
+public class DB {
+
+ static ArrayList list = new ArrayList();
+
+ public static void addLink(String link) {
+ list.add(link);
+ }
+
+ public static void rmLink(String link) {
+ list.remove(link);
+ }
+
+ public static String getListParse() {
+
+ int i = 1;
+
+ String out_list = "";
+
+ for(String element: list){
+
+ out_list += element;
+
+ if(i != list.size()) {
+ out_list += ", ";
+ }
+ i++;
+ }
+ return out_list;
+ }
+
+ public static boolean listIsEmpty() {
+ return list.isEmpty();
+ }
+
+ public static boolean linkContain(String link) {
+ return list.contains(link);
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/MessageHandler.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/MessageHandler.java
new file mode 100644
index 0000000..7c9b02f
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/MessageHandler.java
@@ -0,0 +1,21 @@
+package ru.tinkoff.edu.java.bot.firstBot;
+
+import ru.tinkoff.edu.java.bot.firstBot.commands.All;
+
+public class MessageHandler extends All {
+
+ public boolean is_command(String message) {
+ return message.startsWith("/");
+ }
+
+ public String call_command(String command, String arg) {
+ return switch (command) {
+ case "/start" -> start();
+ case "/help" -> help();
+ case "/track" -> track(arg);
+ case "/list" -> list();
+ case "/untrack" -> untrack(arg);
+ default -> unknow();
+ };
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/Updater.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/Updater.java
new file mode 100644
index 0000000..1811e6d
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/Updater.java
@@ -0,0 +1,40 @@
+package ru.tinkoff.edu.java.bot.firstBot;
+
+import com.pengrad.telegrambot.TelegramBot;
+import com.pengrad.telegrambot.UpdatesListener;
+import com.pengrad.telegrambot.model.Update;
+import com.pengrad.telegrambot.model.request.*;
+import com.pengrad.telegrambot.request.SendMessage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Updater implements UpdatesListener {
+
+ MessageHandler handler = new MessageHandler();
+ String command;
+ TelegramBot bot;
+
+ public Updater(TelegramBot bot) {
+ this.bot = bot;
+ }
+
+ @Override
+ public int process(List updates) {
+ Update update = updates.get(0);
+ if(handler.is_command(update.message().text())) {
+ String[] parse = update.message().text().split(" ");
+ if(parse.length > 1) command = handler.call_command(parse[0], parse[1]);
+ else command = handler.call_command(parse[0], null);
+ bot.execute(
+ new SendMessage(update.message().chat().id(), command)
+ .replyMarkup(new ReplyKeyboardMarkup(new String[][]{
+ {"/start", "/help"},
+ {"/track testlink", "/untrack testlink", "/list"}
+ }).resizeKeyboard(true)
+ )
+ );
+ }
+ return UpdatesListener.CONFIRMED_UPDATES_ALL;
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/All.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/All.java
new file mode 100644
index 0000000..05b92db
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/All.java
@@ -0,0 +1,7 @@
+package ru.tinkoff.edu.java.bot.firstBot.commands;
+
+public class All implements List, Start, Track, Untrack, Help {
+ protected String unknow() {
+ return "Неизвестная команда";
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Help.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Help.java
new file mode 100644
index 0000000..418a213
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Help.java
@@ -0,0 +1,11 @@
+package ru.tinkoff.edu.java.bot.firstBot.commands;
+
+public interface Help {
+ default String help() {
+ return "/start -- зарегистрировать пользователя\n" +
+ "/help -- вывести окно с командами\n" +
+ "/track -- начать отслеживание ссылки\n" +
+ "/untrack -- прекратить отслеживание ссылки\n" +
+ "/list -- показать список отслеживаемых ссылок";
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/List.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/List.java
new file mode 100644
index 0000000..d654338
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/List.java
@@ -0,0 +1,10 @@
+package ru.tinkoff.edu.java.bot.firstBot.commands;
+
+import ru.tinkoff.edu.java.bot.firstBot.DB;
+
+public interface List {
+ default String list() {
+ if(DB.listIsEmpty()) return "list пустой";
+ return "Отслеживаемые ссылки: " + DB.getListParse();
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Start.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Start.java
new file mode 100644
index 0000000..d58c89c
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Start.java
@@ -0,0 +1,9 @@
+package ru.tinkoff.edu.java.bot.firstBot.commands;
+
+public interface Start {
+
+ default String start() {
+ return "Бот начал работу";
+ }
+}
+
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Track.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Track.java
new file mode 100644
index 0000000..268dde6
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Track.java
@@ -0,0 +1,15 @@
+package ru.tinkoff.edu.java.bot.firstBot.commands;
+
+import ru.tinkoff.edu.java.bot.firstBot.DB;
+
+import java.util.Objects;
+
+public interface Track {
+ default String track(String link) {
+ link.trim();
+ if(link.equals("")) return "ведите ссылку";
+ if(DB.linkContain(link)) return "Ссылка уже есть";
+ DB.addLink(link);
+ return "ссылка " + link + " добавлена";
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Untrack.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Untrack.java
new file mode 100644
index 0000000..03871c2
--- /dev/null
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Untrack.java
@@ -0,0 +1,14 @@
+package ru.tinkoff.edu.java.bot.firstBot.commands;
+
+import ru.tinkoff.edu.java.bot.firstBot.DB;
+
+public interface Untrack {
+ default String untrack(String link) {
+ if(link.equals("")) return "ведите ссылку";
+ if(DB.linkContain(link)) {
+ DB.rmLink(link);
+ return "ссылка " + link + " удалена";
+ }
+ return "ссылки " + link + " нет в пуле";
+ }
+}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
deleted file mode 100644
index 3d73188..0000000
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Bot.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package ru.tinkoff.edu.java.bot.telegram;
-
-import com.pengrad.telegrambot.model.Update;
-import com.pengrad.telegrambot.model.request.ChatAction;
-import com.pengrad.telegrambot.model.request.ForceReply;
-import com.pengrad.telegrambot.model.request.ParseMode;
-import com.pengrad.telegrambot.request.SendChatAction;
-import com.pengrad.telegrambot.request.SendMessage;
-import org.springframework.stereotype.Component;
-import ru.tinkoff.edu.java.bot.configuration.ApplicationConfig;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Component
-public class Bot extends Updater {
-
- private static final String NEW_LINK_PRINT_COMMAND = "Print new link";
- private static final String LINK_REMOVE_COMMAND = "Print link you want to remove";
- private static final String HELP_MESSAGE = """
- /start -- зарегистрировать пользователя
- /help -- вывести окно с командами
- /track -- начать отслеживание ссылки
- /untrack -- прекратить отслеживание ссылки
- /list -- показать список отслеживаемых ссылок""";
- List links = new ArrayList<>();
- public Bot(ApplicationConfig applicationConfig) {
- super(applicationConfig.botConfig().token());
- }
-
- @Override
- public void handleUpdate(Update update) {
- if(update.message()!=null&&update.message().text()!=null){
- long chatId = update.message().chat().id();
- bot.execute(new SendChatAction(chatId, ChatAction.typing));
- handleUpdateMessageTextCommand(update, chatId);
- }
- }
-
- protected void handleUpdateMessageTextCommand(Update update, long chatId) {
- switch (update.message().text()){
- case "/start" -> handleStart(chatId);
- case "/help" -> sendHelpText(chatId);
- case "/track" -> handleTrack(chatId);
- case "/untrack" -> handleUntrack(chatId);
- case "/list" -> handleList(chatId);
- default -> handleUnknownCommand(update, chatId);
- }
- }
-
- protected void handleUnknownCommand(Update update, long chatId) {
- if(update.message().replyToMessage()!=null){
- handleRepliedMessage(update, chatId);
- }else {
- sendMessage(chatId, "Command was not found!");
- sendHelpText(chatId);
- }
- }
-
- protected void handleList(long chatId) {
- bot.execute(
- new SendMessage(chatId, "*Links:*\n"
- +links.stream()
- .map(s -> "\"`"+s+"`\"")
- .reduce((s, s2) -> s+"\n"+s2)
- .orElse("There is not links!"))
- .disableWebPagePreview(true)
- .parseMode(ParseMode.Markdown)
- );
- }
-
- protected void handleUntrack(long chatId) {
- bot.execute(new SendMessage(chatId, LINK_REMOVE_COMMAND)
- .replyMarkup(new ForceReply(true))
- );
- }
-
- protected void handleTrack(long chatId) {
- bot.execute(new SendMessage(chatId, NEW_LINK_PRINT_COMMAND)
- .replyMarkup(new ForceReply(true)));
- }
-
- protected void sendHelpText(long chatId) {
- sendMessage(chatId, HELP_MESSAGE);
- }
-
- protected void handleStart(long chatId) {
- sendMessage(chatId, "You was registered!");
- }
-
- protected void handleRepliedMessage(Update update, long chatId) {
- switch (update.message().replyToMessage().text()){
- case NEW_LINK_PRINT_COMMAND -> {
- links.add(update.message().text());
- sendMessage(chatId, "Link "+ update.message().text()+" was successfully added!");
- }
- case LINK_REMOVE_COMMAND -> {
- if(links.remove(update.message().text())){
- sendMessage(chatId, "Link "+ update.message().text()+" was successfully removed!");
- }else {
- sendMessage(chatId, "Link \""+ update.message().text()+"\" was not found!");
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
deleted file mode 100644
index 160acbe..0000000
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/UpdateInterface.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package ru.tinkoff.edu.java.bot.telegram;
-
-
-import com.pengrad.telegrambot.model.Update;
-
-public interface UpdateInterface {
- void handleUpdate(Update update);
-}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
deleted file mode 100644
index 73283df..0000000
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/telegram/Updater.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package ru.tinkoff.edu.java.bot.telegram;
-
-import com.pengrad.telegrambot.TelegramBot;
-import com.pengrad.telegrambot.UpdatesListener;
-import com.pengrad.telegrambot.request.SendMessage;
-
-public abstract class Updater implements UpdateInterface {
- protected TelegramBot bot;
-
- public Updater(String token) {
- this.bot = new TelegramBot(token);
- this.bot.setUpdatesListener(updates -> {
- updates.forEach(this::handleUpdate);
- return UpdatesListener.CONFIRMED_UPDATES_ALL;
- });
- }
-
- public void sendMessage(Long chatId, String message){
- this.bot.execute(new SendMessage(chatId, message));
- }
-}
\ No newline at end of file
diff --git a/FP/bot/src/main/resources/application.properties b/FP/bot/src/main/resources/application.properties
index 3119d77..a54b385 100644
--- a/FP/bot/src/main/resources/application.properties
+++ b/FP/bot/src/main/resources/application.properties
@@ -1,5 +1,5 @@
app.test=123
springdoc.swagger-ui.path=/swagger-ui
app.scheduler.interval=50000
-app.botConfig.token=5781089546:AAHNwqHIyTrAXvifhq2R8GpEcnYAxQuBeuw
-app.botConfig.name=@SFRETbot
+app.bot.token=5805337447:AAGnmh2isW2115L7tJWFojbpmSjNrarTvxQ
+app.bot.name=@SFRETbot
diff --git a/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
index 4c7f816..55f205a 100644
--- a/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
+++ b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/ScrapperApplication.java
@@ -5,9 +5,6 @@
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)
@@ -17,13 +14,7 @@ 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.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));
}
}
From dd8b30a084754d48d9741bb1649b808524a5ef30 Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Wed, 5 Apr 2023 20:01:34 +0500
Subject: [PATCH 16/24] =?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=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?=
=?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=82=D0=B5=D1=81=D1=82=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/test/java/LinkParserTest.java | 24 +++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 FP/link-parser/src/test/java/LinkParserTest.java
diff --git a/FP/link-parser/src/test/java/LinkParserTest.java b/FP/link-parser/src/test/java/LinkParserTest.java
new file mode 100644
index 0000000..7bd8349
--- /dev/null
+++ b/FP/link-parser/src/test/java/LinkParserTest.java
@@ -0,0 +1,24 @@
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import ru.tinkoff.edu.java.linkparser.LinkParser;
+
+public class LinkParserTest {
+
+ String gitLink = "https://github.com/Ray-Not/JavaGuava";
+ String invalidLink = "https://gitrub.com/";
+ String invalidLink2 = "https://github.com/Ray-Not";
+ String expectGitLink = "Ray-Not/JavaGuava";
+ String stackLink = "https://stackoverflow.com/questions/1642028/what-is-the-operator-in-c";
+ String expectStackLink = "1642028";
+
+ LinkParser pars = new LinkParser();
+
+ @Test
+ public void validGitPars(){
+ Assertions.assertNull(pars.getLink(invalidLink));
+ Assertions.assertNull(pars.getLink(invalidLink2));
+ Assertions.assertNotNull(pars.getLink(gitLink));
+ Assertions.assertEquals(pars.getLink(gitLink), expectGitLink);
+ Assertions.assertEquals(pars.getLink(stackLink), expectStackLink);
+ }
+}
From 0059fcace7fb5d9b619bdd80511b83169350156c Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Wed, 5 Apr 2023 20:39:50 +0500
Subject: [PATCH 17/24] =?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=20html-=D1=84=D0=BE=D1=80=D0=BC=D0=B0?=
=?UTF-8?q?=D1=82=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE=D0=BE=D0=B1?=
=?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B8=20=D1=82=D0=B5=D1=81?=
=?UTF-8?q?=D1=82=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=B1=D0=BE=D1=82=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP/bot/pom.xml | 11 ++++++++++-
.../edu/java/bot/firstBot/MessageHandler.java | 9 +++++++++
.../tinkoff/edu/java/bot/firstBot/Updater.java | 5 ++---
.../edu/java/bot/firstBot/commands/Help.java | 10 +++++-----
.../edu/java/bot/firstBot/commands/List.java | 2 +-
.../edu/java/bot/firstBot/commands/Track.java | 6 ++----
.../edu/java/bot/firstBot/commands/Untrack.java | 2 +-
FP/bot/src/test/java/BotTest.java | 17 +++++++++++++++++
8 files changed, 47 insertions(+), 15 deletions(-)
create mode 100644 FP/bot/src/test/java/BotTest.java
diff --git a/FP/bot/pom.xml b/FP/bot/pom.xml
index 6442fc2..3a298d4 100644
--- a/FP/bot/pom.xml
+++ b/FP/bot/pom.xml
@@ -80,6 +80,15 @@
1.0
compile
-
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
\ No newline at end of file
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/MessageHandler.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/MessageHandler.java
index 7c9b02f..f003c84 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/MessageHandler.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/MessageHandler.java
@@ -18,4 +18,13 @@ public String call_command(String command, String arg) {
default -> unknow();
};
}
+
+ public String call_command(String command) {
+ return switch (command) {
+ case "/start" -> start();
+ case "/help" -> help();
+ case "/list" -> list();
+ default -> unknow();
+ };
+ }
}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/Updater.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/Updater.java
index 1811e6d..a01e4d9 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/Updater.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/Updater.java
@@ -6,7 +6,6 @@
import com.pengrad.telegrambot.model.request.*;
import com.pengrad.telegrambot.request.SendMessage;
-import java.util.ArrayList;
import java.util.List;
public class Updater implements UpdatesListener {
@@ -25,14 +24,14 @@ public int process(List updates) {
if(handler.is_command(update.message().text())) {
String[] parse = update.message().text().split(" ");
if(parse.length > 1) command = handler.call_command(parse[0], parse[1]);
- else command = handler.call_command(parse[0], null);
+ else command = handler.call_command(parse[0]);
bot.execute(
new SendMessage(update.message().chat().id(), command)
.replyMarkup(new ReplyKeyboardMarkup(new String[][]{
{"/start", "/help"},
{"/track testlink", "/untrack testlink", "/list"}
}).resizeKeyboard(true)
- )
+ ).parseMode(ParseMode.HTML)
);
}
return UpdatesListener.CONFIRMED_UPDATES_ALL;
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Help.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Help.java
index 418a213..0761e05 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Help.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Help.java
@@ -2,10 +2,10 @@
public interface Help {
default String help() {
- return "/start -- зарегистрировать пользователя\n" +
- "/help -- вывести окно с командами\n" +
- "/track -- начать отслеживание ссылки\n" +
- "/untrack -- прекратить отслеживание ссылки\n" +
- "/list -- показать список отслеживаемых ссылок";
+ return "/start -- зарегистрировать пользователя\n" +
+ "/help -- вывести окно с командами\n" +
+ "/track [link] -- начать отслеживание ссылки\n" +
+ "/untrack [link] -- прекратить отслеживание ссылки\n" +
+ "/list -- показать список отслеживаемых ссылок";
}
}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/List.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/List.java
index d654338..8673887 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/List.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/List.java
@@ -5,6 +5,6 @@
public interface List {
default String list() {
if(DB.listIsEmpty()) return "list пустой";
- return "Отслеживаемые ссылки: " + DB.getListParse();
+ return "Отслеживаемые ссылки: " + DB.getListParse() + "";
}
}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Track.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Track.java
index 268dde6..0f4669e 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Track.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Track.java
@@ -2,14 +2,12 @@
import ru.tinkoff.edu.java.bot.firstBot.DB;
-import java.util.Objects;
-
public interface Track {
default String track(String link) {
- link.trim();
+ link = link.trim();
if(link.equals("")) return "ведите ссылку";
if(DB.linkContain(link)) return "Ссылка уже есть";
DB.addLink(link);
- return "ссылка " + link + " добавлена";
+ return "ссылка " + link + " добавлена";
}
}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Untrack.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Untrack.java
index 03871c2..6550daf 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Untrack.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/Untrack.java
@@ -7,7 +7,7 @@ default String untrack(String link) {
if(link.equals("")) return "ведите ссылку";
if(DB.linkContain(link)) {
DB.rmLink(link);
- return "ссылка " + link + " удалена";
+ return "ссылка " + link + " удалена";
}
return "ссылки " + link + " нет в пуле";
}
diff --git a/FP/bot/src/test/java/BotTest.java b/FP/bot/src/test/java/BotTest.java
new file mode 100644
index 0000000..fc11212
--- /dev/null
+++ b/FP/bot/src/test/java/BotTest.java
@@ -0,0 +1,17 @@
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import ru.tinkoff.edu.java.bot.firstBot.DB;
+import ru.tinkoff.edu.java.bot.firstBot.commands.List;
+
+
+public class BotTest implements List {
+
+ String except_empty_list = "list пустой";
+
+ @Test
+ public void listTest() {
+ Assertions.assertEquals(list(), except_empty_list);
+ DB.addLink("link");
+ Assertions.assertNotEquals(list(), except_empty_list);
+ }
+}
From ab6f6253ebb6fa7d9e5744ed5fd5a4927511fbd1 Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Wed, 5 Apr 2023 20:49:51 +0500
Subject: [PATCH 18/24] =?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=D1=82=D0=B5=D1=81=D1=82=D0=B0=20?=
=?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=20=D0=B8=20?=
=?UTF-8?q?=D0=BD=D0=B5=D0=B8=D0=B7=D0=B2=D0=B5=D1=81=D1=82=D0=BD=D1=83?=
=?UTF-8?q?=D1=8E=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../edu/java/bot/firstBot/commands/All.java | 2 +-
FP/bot/src/test/java/BotTest.java | 15 +++++++++++----
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/All.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/All.java
index 05b92db..991b177 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/All.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/commands/All.java
@@ -2,6 +2,6 @@
public class All implements List, Start, Track, Untrack, Help {
protected String unknow() {
- return "Неизвестная команда";
+ return "Неизвестная команда";
}
}
diff --git a/FP/bot/src/test/java/BotTest.java b/FP/bot/src/test/java/BotTest.java
index fc11212..1548bc9 100644
--- a/FP/bot/src/test/java/BotTest.java
+++ b/FP/bot/src/test/java/BotTest.java
@@ -1,17 +1,24 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import ru.tinkoff.edu.java.bot.firstBot.DB;
-import ru.tinkoff.edu.java.bot.firstBot.commands.List;
+import ru.tinkoff.edu.java.bot.firstBot.MessageHandler;
-public class BotTest implements List {
+public class BotTest {
String except_empty_list = "list пустой";
+ String except_unknow_command = "Неизвестная команда";
+ MessageHandler handler = new MessageHandler();
@Test
public void listTest() {
- Assertions.assertEquals(list(), except_empty_list);
+ Assertions.assertEquals(handler.call_command("/list"), except_empty_list);
DB.addLink("link");
- Assertions.assertNotEquals(list(), except_empty_list);
+ Assertions.assertNotEquals(handler.call_command("/list"), except_empty_list);
+ }
+
+ @Test
+ public void unknowCommandAndFormatTest() {
+ Assertions.assertEquals(handler.call_command("/uno"), except_unknow_command);
}
}
From d7d6f7c2d64ca50851a1dacf0b5001551ab2f7a6 Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Wed, 5 Apr 2023 21:33:46 +0500
Subject: [PATCH 19/24] =?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=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=BD?=
=?UTF-8?q?=D0=BE=D0=B9=20=D0=B1=D0=B0=D0=B7=D1=8B=20=D0=B4=D0=BB=D1=8F=20?=
=?UTF-8?q?=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20tgChatId,=20?=
=?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?=
=?UTF-8?q?API=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=B1=D0=BE=D1=82=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../tinkoff/edu/java/bot/BotApplication.java | 1 -
.../edu/java/bot/firstBot/BotMain.java | 17 +++++++-
FP/scrapper/pom.xml | 6 +++
.../ru/tinkoff/edu/java/scrapper/api/DB.java | 42 +++++++++++++++++++
.../scrapper/api/ScrapperControllerLink.java | 14 ++++---
.../scrapper/api/ScrapperControllerTg.java | 9 ++--
6 files changed, 78 insertions(+), 11 deletions(-)
create mode 100644 FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/DB.java
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
index 505fdf0..312857e 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/BotApplication.java
@@ -17,6 +17,5 @@ public static void main(String[] args){
BotMain bot = new BotMain(config.bot().token());
bot.start();
-
}
}
diff --git a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/BotMain.java b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/BotMain.java
index 1466675..f758472 100644
--- a/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/BotMain.java
+++ b/FP/bot/src/main/java/ru/tinkoff/edu/java/bot/firstBot/BotMain.java
@@ -1,6 +1,7 @@
package ru.tinkoff.edu.java.bot.firstBot;
import com.pengrad.telegrambot.TelegramBot;
+import com.pengrad.telegrambot.request.SendMessage;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import ru.tinkoff.edu.java.bot.configuration.ApplicationConfig;
@@ -9,13 +10,27 @@
public class BotMain {
String token;
+ static TelegramBot bot;
public BotMain(String token) {
this.token = token;
}
public void start() {
- TelegramBot bot = new TelegramBot(token);
+ bot = new TelegramBot(token);
bot.setUpdatesListener(new Updater(bot));
}
+
+ public void end() {
+ bot.removeGetUpdatesListener();
+ }
+
+ public static void apiCommand(long tgChatId, String command) {
+
+ MessageHandler handler = new MessageHandler();
+ String[] parse = command.split(" ");
+ if(parse.length > 1) command = handler.call_command(parse[0], parse[1]);
+ else command = handler.call_command(parse[0]);
+ bot.execute(new SendMessage(tgChatId, command));
+ }
}
diff --git a/FP/scrapper/pom.xml b/FP/scrapper/pom.xml
index a373157..1225302 100644
--- a/FP/scrapper/pom.xml
+++ b/FP/scrapper/pom.xml
@@ -71,5 +71,11 @@
3.0.5
+
+ org.example
+ bot
+ 1.0
+ compile
+
\ No newline at end of file
diff --git a/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/DB.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/DB.java
new file mode 100644
index 0000000..392e291
--- /dev/null
+++ b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/DB.java
@@ -0,0 +1,42 @@
+package ru.tinkoff.edu.java.scrapper.api;
+
+import java.util.ArrayList;
+
+public class DB {
+
+ static ArrayList tgChatIDList = new ArrayList();
+
+ public static void addId(Long id) {
+ tgChatIDList.add(id);
+ }
+
+ public static void rmId(Long id) {
+ tgChatIDList.remove(id);
+ }
+
+ public static String getListParse() {
+
+ int i = 1;
+
+ String out_list = "";
+
+ for(Long element: tgChatIDList){
+
+ out_list += element;
+
+ if(i != tgChatIDList.size()) {
+ out_list += ", ";
+ }
+ i++;
+ }
+ return out_list;
+ }
+
+ public static boolean listIsEmpty() {
+ return tgChatIDList.isEmpty();
+ }
+
+ public static boolean linkContain(Long id) {
+ return tgChatIDList.contains(id);
+ }
+}
diff --git a/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
index b443033..1b4c616 100644
--- a/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
+++ b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerLink.java
@@ -4,6 +4,8 @@
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.bot.firstBot.BotMain;
+import ru.tinkoff.edu.java.bot.firstBot.DB;
import ru.tinkoff.edu.java.scrapper.api.model.*;
@RequestMapping("/links")
@@ -15,18 +17,20 @@ public class ScrapperControllerLink {
public void linksDelete(
@RequestHeader("Tg-Chat-Id") Long tgChatId,
@RequestBody RemoveLinkRequest removeLinkRequest
- ) {}
+ ) {
+ BotMain.apiCommand(tgChatId, "/untrack" + " " + removeLinkRequest.link());
+ }
@GetMapping
- public String linksGet(@RequestHeader("Tg-Chat-Id") Long tgChatId) {
- return tgChatId + "";
+ public void linksGet(@RequestHeader("Tg-Chat-Id") Long tgChatId) {
+ BotMain.apiCommand(tgChatId, "/list");
}
@PostMapping
- public String linksPost(
+ public void linksPost(
@RequestHeader("Tg-Chat-Id") Long tgChatId,
@RequestBody AddLinkRequest addLinkRequest
) {
- return addLinkRequest.link();
+ BotMain.apiCommand(tgChatId, "/track" + " " + addLinkRequest.link());
}
}
diff --git a/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
index be74b4f..5968bd0 100644
--- a/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
+++ b/FP/scrapper/src/main/java/ru/tinkoff/edu/java/scrapper/api/ScrapperControllerTg.java
@@ -9,11 +9,12 @@ public class ScrapperControllerTg {
@ResponseStatus(HttpStatus.NO_CONTENT)
@DeleteMapping("/{id}")
- public void tgChatIdDelete(@PathVariable Long id) {}
+ public void tgChatIdDelete(@PathVariable Long id) {
+ DB.addId(id);
+ }
@PostMapping("/{id}")
- public String tgChatIdPost(@PathVariable Long id) {
- if(id < 0) return "Аргумент отрицательный";
- return id + "";
+ public void tgChatIdPost(@PathVariable Long id) {
+ DB.rmId(id);
}
}
From 787a423578f3e1ecb5c6c1c8f0eca9daebaefc09 Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Sat, 8 Apr 2023 15:16:52 +0500
Subject: [PATCH 20/24] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80?=
=?UTF-8?q?=D0=BA=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index 810ebf3..862eb15 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,5 +22,5 @@
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
-# IJ IDEA #
+# idea
.idea
\ No newline at end of file
From b05d5beff5fa5f49397703e10ed6885cb7722304 Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Tue, 11 Apr 2023 18:43:01 +0500
Subject: [PATCH 21/24] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D0=B5=D1=80=20=D0=BA?=
=?UTF-8?q?=D0=BE=D0=BC=D0=BF=D0=BE=D1=81=20+=20=D1=81=D1=85=D0=B5=D0=BC?=
=?UTF-8?q?=D0=B0=20=D0=B1=D0=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP/migrations/chats_links_scheme.sql | 8 ++++++++
FP/migrations/docker-compose.yml | 24 ++++++++++++++++++++++++
FP/migrations/master.xml | 11 +++++++++++
3 files changed, 43 insertions(+)
create mode 100644 FP/migrations/chats_links_scheme.sql
create mode 100644 FP/migrations/docker-compose.yml
create mode 100644 FP/migrations/master.xml
diff --git a/FP/migrations/chats_links_scheme.sql b/FP/migrations/chats_links_scheme.sql
new file mode 100644
index 0000000..e1567e5
--- /dev/null
+++ b/FP/migrations/chats_links_scheme.sql
@@ -0,0 +1,8 @@
+CREATE TABLE dbo.links (id INTEGER PRIMARY KEY, link NVARCHAR(128) NOT NULL);
+
+CREATE TABLE Links (id INTEGER PRIMARY KEY, tg_chat_id BIGINT NOT NULL);
+
+CREATE TABLE links_tgChats (
+FOREIGN KEY (LinkID) REFERENCES links (id),
+FOREIGN KEY (ChatID) REFERENCES tgChats (id)
+);
\ No newline at end of file
diff --git a/FP/migrations/docker-compose.yml b/FP/migrations/docker-compose.yml
new file mode 100644
index 0000000..0d0f5b4
--- /dev/null
+++ b/FP/migrations/docker-compose.yml
@@ -0,0 +1,24 @@
+services:
+ PostGreSQL:
+ image: postgres:latest
+ environment:
+ POSTGRES_DB: "scrapper"
+ POSTGRES_USER: "admin"
+ POSTGRES_PASSWORD: "admin"
+
+ liquibase-migrations:
+ image: liquibase/liquibase:4.18
+ depends_on:
+ - postgresql
+ command:
+ - --hub-mode=off
+ - --changelog-file=master.xml
+ - --driver=org.postgresql.Driver
+ - --url=jdbc:postgresql://postgresql:5432/scrapper
+ - --username=admin
+ - --password=admin
+ - update
+ volumes:
+ - ./migrations:/liquibase/changelog
+ networks:
+ - backend
\ No newline at end of file
diff --git a/FP/migrations/master.xml b/FP/migrations/master.xml
new file mode 100644
index 0000000..5d643de
--- /dev/null
+++ b/FP/migrations/master.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
From 1a69f014e648a4cbe250d3904034a77a735918ed Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.ru>
Date: Wed, 12 Apr 2023 20:26:06 +0500
Subject: [PATCH 22/24] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?=
=?UTF-8?q?=D0=BB=D0=B0=D0=BD=D0=BD=D0=B0=D1=8F=20=D1=81=D1=85=D0=B5=D0=BC?=
=?UTF-8?q?=D0=B0=20+=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0?=
=?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20compose=20(=D1=80=D0=B0=D0=B1=D0=BE?=
=?UTF-8?q?=D1=87=D0=B8=D0=B9)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP/bot/pom.xml | 6 ----
FP/docker-compose.yml | 42 ++++++++++++++++++++++++++++
FP/migrations/chats_links_scheme.sql | 10 ++++---
FP/migrations/docker-compose.yml | 24 ----------------
4 files changed, 48 insertions(+), 34 deletions(-)
create mode 100644 FP/docker-compose.yml
delete mode 100644 FP/migrations/docker-compose.yml
diff --git a/FP/bot/pom.xml b/FP/bot/pom.xml
index 3a298d4..60f49bd 100644
--- a/FP/bot/pom.xml
+++ b/FP/bot/pom.xml
@@ -74,12 +74,6 @@
6.6.0
-
- org.example
- scrapper
- 1.0
- compile
-
org.junit.jupiter
junit-jupiter
diff --git a/FP/docker-compose.yml b/FP/docker-compose.yml
new file mode 100644
index 0000000..4829d18
--- /dev/null
+++ b/FP/docker-compose.yml
@@ -0,0 +1,42 @@
+version: '1.-'
+
+services:
+ postgres:
+ container_name: postgres
+ image: postgres
+ environment:
+ POSTGRES_DB: scrapper
+ POSTGRES_USER: scrap_user
+ POSTGRES_PASSWORD: hard_password
+ volumes:
+ - ./migrations/postgres_data:/var/lib/postgresql/data
+ ports:
+ - "5432:5432"
+ networks:
+ - backend
+
+ liquibase-migrations:
+ container_name: liquibase
+ image: liquibase/liquibase
+ deploy:
+ restart_policy:
+ condition: on-failure
+ delay: 10s
+ max_attempts: 10
+ command:
+ - --hub-mode=off
+ - --changelog-file=master.xml
+ - --driver=org.postgresql.Driver
+ - --url=jdbc:postgresql://postgres:5432/scrapper
+ - --username=scrap_user
+ - --password=hard_password
+ - --logLevel=debug
+ - update
+ volumes:
+ - ./migrations:/liquibase/changelog
+ networks:
+ - backend
+
+networks:
+ backend:
+ driver: bridge
\ No newline at end of file
diff --git a/FP/migrations/chats_links_scheme.sql b/FP/migrations/chats_links_scheme.sql
index e1567e5..7de0483 100644
--- a/FP/migrations/chats_links_scheme.sql
+++ b/FP/migrations/chats_links_scheme.sql
@@ -1,8 +1,10 @@
-CREATE TABLE dbo.links (id INTEGER PRIMARY KEY, link NVARCHAR(128) NOT NULL);
+CREATE TABLE links (id INTEGER PRIMARY KEY, link VARCHAR(128) NOT NULL);
-CREATE TABLE Links (id INTEGER PRIMARY KEY, tg_chat_id BIGINT NOT NULL);
+CREATE TABLE tgChats (id INTEGER PRIMARY KEY, tg_chat_id BIGINT NOT NULL);
CREATE TABLE links_tgChats (
-FOREIGN KEY (LinkID) REFERENCES links (id),
-FOREIGN KEY (ChatID) REFERENCES tgChats (id)
+ LinkID INTEGER,
+ FOREIGN KEY (LinkID) REFERENCES links (id),
+ ChatID INTEGER,
+ FOREIGN KEY (ChatID) REFERENCES tgChats (id)
);
\ No newline at end of file
diff --git a/FP/migrations/docker-compose.yml b/FP/migrations/docker-compose.yml
deleted file mode 100644
index 0d0f5b4..0000000
--- a/FP/migrations/docker-compose.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-services:
- PostGreSQL:
- image: postgres:latest
- environment:
- POSTGRES_DB: "scrapper"
- POSTGRES_USER: "admin"
- POSTGRES_PASSWORD: "admin"
-
- liquibase-migrations:
- image: liquibase/liquibase:4.18
- depends_on:
- - postgresql
- command:
- - --hub-mode=off
- - --changelog-file=master.xml
- - --driver=org.postgresql.Driver
- - --url=jdbc:postgresql://postgresql:5432/scrapper
- - --username=admin
- - --password=admin
- - update
- volumes:
- - ./migrations:/liquibase/changelog
- networks:
- - backend
\ No newline at end of file
From de3a82c07aecee7c89e3aa26474965d1d989572f Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Wed, 12 Apr 2023 22:26:57 +0500
Subject: [PATCH 23/24] =?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=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP/pom.xml | 8 ++++
FP/scrapper/pom.xml | 35 +++++++++++++++
FP/scrapper/src/test/java/BaseTest.java | 11 +++++
.../src/test/java/IntegrationEnvironment.java | 45 +++++++++++++++++++
4 files changed, 99 insertions(+)
create mode 100644 FP/scrapper/src/test/java/BaseTest.java
create mode 100644 FP/scrapper/src/test/java/IntegrationEnvironment.java
diff --git a/FP/pom.xml b/FP/pom.xml
index f51131c..e38a124 100644
--- a/FP/pom.xml
+++ b/FP/pom.xml
@@ -27,6 +27,7 @@
2022.0.0
23.1.0
5.8.1
+ 1.18.0
@@ -103,6 +104,13 @@
${annotations.version}
provided
+
+ org.testcontainers
+ testcontainers-bom
+ ${testcontainers.version}
+ pom
+ import
+
\ No newline at end of file
diff --git a/FP/scrapper/pom.xml b/FP/scrapper/pom.xml
index 1225302..bbd37fb 100644
--- a/FP/scrapper/pom.xml
+++ b/FP/scrapper/pom.xml
@@ -77,5 +77,40 @@
1.0
compile
+
+ org.testcontainers
+ junit-jupiter
+ test
+
+
+ org.testcontainers
+ postgresql
+ test
+
+
+ org.liquibase
+ liquibase-core
+ test
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+ org.postgresql
+ postgresql
+ runtime
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
\ No newline at end of file
diff --git a/FP/scrapper/src/test/java/BaseTest.java b/FP/scrapper/src/test/java/BaseTest.java
new file mode 100644
index 0000000..447e5c5
--- /dev/null
+++ b/FP/scrapper/src/test/java/BaseTest.java
@@ -0,0 +1,11 @@
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class BaseTest extends IntegrationEnvironment {
+
+ @Test
+ void create_test() {
+ Assertions.assertTrue(Postgre_container.isCreated());
+ System.out.println(Postgre_container.getImage());
+ }
+}
\ No newline at end of file
diff --git a/FP/scrapper/src/test/java/IntegrationEnvironment.java b/FP/scrapper/src/test/java/IntegrationEnvironment.java
new file mode 100644
index 0000000..675b2c1
--- /dev/null
+++ b/FP/scrapper/src/test/java/IntegrationEnvironment.java
@@ -0,0 +1,45 @@
+import liquibase.Contexts;
+import liquibase.LabelExpression;
+import liquibase.Liquibase;
+import liquibase.database.Database;
+import liquibase.database.DatabaseFactory;
+import liquibase.database.jvm.JdbcConnection;
+import liquibase.exception.LiquibaseException;
+import liquibase.resource.DirectoryResourceAccessor;
+import org.testcontainers.containers.PostgreSQLContainer;
+
+import java.io.FileNotFoundException;
+import java.nio.file.Path;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+abstract class IntegrationEnvironment {
+
+ static final protected PostgreSQLContainer Postgre_container;
+
+ static {
+ Postgre_container = new PostgreSQLContainer<>("postgres:14");
+ Postgre_container.start();
+
+ try {
+ Connection connection = DriverManager.getConnection(
+ Postgre_container.getJdbcUrl(),
+ Postgre_container.getUsername(),
+ Postgre_container.getPassword());
+ Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
+ Liquibase liquibase = new liquibase.Liquibase(
+ "master.xml",
+ new DirectoryResourceAccessor(Path.of(".")
+ .toAbsolutePath()
+ .getParent()
+ .getParent()
+ .resolve("migrations")),
+ database);
+ liquibase.update(new Contexts(), new LabelExpression());
+ } catch (SQLException | LiquibaseException | FileNotFoundException e) {
+ System.out.println(e.getMessage());
+ throw new RuntimeException(e);
+ }
+ }
+}
From 1524020320ace0f666bae152469bee605e9303f4 Mon Sep 17 00:00:00 2001
From: Ray-Not <2sinsincuba@gmail.com>
Date: Sun, 23 Apr 2023 15:41:13 +0300
Subject: [PATCH 24/24] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FP/docker-compose.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/FP/docker-compose.yml b/FP/docker-compose.yml
index 4829d18..528e9c8 100644
--- a/FP/docker-compose.yml
+++ b/FP/docker-compose.yml
@@ -3,7 +3,7 @@ version: '1.-'
services:
postgres:
container_name: postgres
- image: postgres
+ image: postgres:15.2
environment:
POSTGRES_DB: scrapper
POSTGRES_USER: scrap_user
@@ -17,7 +17,7 @@ services:
liquibase-migrations:
container_name: liquibase
- image: liquibase/liquibase
+ image: liquibase/liquibase:4.18
deploy:
restart_policy:
condition: on-failure