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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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/23] =?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); + } + } +}