From f3a1248c102db20dc402b4840d28574eb61ac5fe Mon Sep 17 00:00:00 2001 From: max Date: Wed, 26 Mar 2025 11:23:20 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20DI.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dictionaries/max.xml | 3 ++ README.md | 6 +++ pom.xml | 19 +++----- .../ru/cft/booklib/application/AppModule.java | 20 +++++++++ .../application/InjectionInitializer.java | 13 ++++++ .../cft/booklib/{ => application}/Main.java | 6 ++- .../booklib/controller/impl/BooksApiImpl.java | 26 ++++++++++- .../ru/cft/booklib/service/BooksService.java | 15 +++++++ .../cft/booklib/service/ReadersService.java | 5 +++ .../booklib/service/TransactionsService.java | 5 +++ .../service/impl/BooksServiceImpl.java | 45 +++++++++++++++++++ .../service/impl/ReadersServiceImpl.java | 7 +++ .../service/impl/TransactionsServiceImpl.java | 6 +++ 13 files changed, 160 insertions(+), 16 deletions(-) create mode 100644 .idea/dictionaries/max.xml create mode 100644 README.md create mode 100644 src/main/java/ru/cft/booklib/application/AppModule.java create mode 100644 src/main/java/ru/cft/booklib/application/InjectionInitializer.java rename src/main/java/ru/cft/booklib/{ => application}/Main.java (76%) create mode 100644 src/main/java/ru/cft/booklib/service/BooksService.java create mode 100644 src/main/java/ru/cft/booklib/service/ReadersService.java create mode 100644 src/main/java/ru/cft/booklib/service/TransactionsService.java create mode 100644 src/main/java/ru/cft/booklib/service/impl/BooksServiceImpl.java create mode 100644 src/main/java/ru/cft/booklib/service/impl/ReadersServiceImpl.java create mode 100644 src/main/java/ru/cft/booklib/service/impl/TransactionsServiceImpl.java diff --git a/.idea/dictionaries/max.xml b/.idea/dictionaries/max.xml new file mode 100644 index 0000000..81b3e8d --- /dev/null +++ b/.idea/dictionaries/max.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..75d6754 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +## Backend для приложения "Автоматизация работы библиотеки" + +### Ограничения + +Поскольку аутентификация и авторизация не реализованы, данное приложение можно использовать только в ограниченной среде (например внутри docker контейнера). + diff --git a/pom.xml b/pom.xml index 39ad98e..c464783 100644 --- a/pom.xml +++ b/pom.xml @@ -37,19 +37,6 @@ io.quarkus quarkus-resteasy-jsonb - - io.quarkus - quarkus-arc - - - io.quarkus - quarkus-resteasy - - - io.quarkus - quarkus-junit5 - test - io.rest-assured rest-assured @@ -70,6 +57,12 @@ validation-api 2.0.1.Final + + com.google.inject + guice + 7.0.0 + + diff --git a/src/main/java/ru/cft/booklib/application/AppModule.java b/src/main/java/ru/cft/booklib/application/AppModule.java new file mode 100644 index 0000000..5990bc2 --- /dev/null +++ b/src/main/java/ru/cft/booklib/application/AppModule.java @@ -0,0 +1,20 @@ +package ru.cft.booklib.application; + +import com.google.inject.AbstractModule; +import ru.cft.booklib.service.BooksService; +import ru.cft.booklib.service.ReadersService; +import ru.cft.booklib.service.TransactionsService; +import ru.cft.booklib.service.impl.BooksServiceImpl; +import ru.cft.booklib.service.impl.ReadersServiceImpl; +import ru.cft.booklib.service.impl.TransactionsServiceImpl; + +/** Модуль внедрения зависимостей. */ +public class AppModule extends AbstractModule { + @Override + protected void configure() { + // Инициализируем сервисы. + bind(BooksService.class).to(BooksServiceImpl.class); + bind(ReadersService.class).to(ReadersServiceImpl.class); + bind(TransactionsService.class).to(TransactionsServiceImpl.class); + } +} \ No newline at end of file diff --git a/src/main/java/ru/cft/booklib/application/InjectionInitializer.java b/src/main/java/ru/cft/booklib/application/InjectionInitializer.java new file mode 100644 index 0000000..b63893b --- /dev/null +++ b/src/main/java/ru/cft/booklib/application/InjectionInitializer.java @@ -0,0 +1,13 @@ +package ru.cft.booklib.application; + +import com.google.inject.Guice; +import com.google.inject.Injector; + +/** Добавление компонентов к контейнеру внедрения зависимостей. */ +public class InjectionInitializer { + + /** Инициализация внедрения зависимостей. */ + public static void initDI() { + Guice.createInjector(new AppModule()); + } +} diff --git a/src/main/java/ru/cft/booklib/Main.java b/src/main/java/ru/cft/booklib/application/Main.java similarity index 76% rename from src/main/java/ru/cft/booklib/Main.java rename to src/main/java/ru/cft/booklib/application/Main.java index 269ed63..1676047 100644 --- a/src/main/java/ru/cft/booklib/Main.java +++ b/src/main/java/ru/cft/booklib/application/Main.java @@ -1,9 +1,10 @@ -package ru.cft.booklib; +package ru.cft.booklib.application; import io.quarkus.runtime.Quarkus; import io.quarkus.runtime.QuarkusApplication; import io.quarkus.runtime.annotations.QuarkusMain; +/** Класс для запуска приложения в IDE. */ @QuarkusMain public class Main { public static void main(String... args) { @@ -15,9 +16,10 @@ public class Main { } public static class MyApp implements QuarkusApplication { - @Override public int run(String... args){ + InjectionInitializer.initDI(); + Quarkus.waitForExit(); return 0; } diff --git a/src/main/java/ru/cft/booklib/controller/impl/BooksApiImpl.java b/src/main/java/ru/cft/booklib/controller/impl/BooksApiImpl.java index b303d95..dc4e052 100644 --- a/src/main/java/ru/cft/booklib/controller/impl/BooksApiImpl.java +++ b/src/main/java/ru/cft/booklib/controller/impl/BooksApiImpl.java @@ -1,12 +1,35 @@ package ru.cft.booklib.controller.impl; +import com.google.inject.Inject; +import com.google.inject.Provider; import ru.cft.booklib.controller.BooksApi; import ru.cft.booklib.model.Book; import ru.cft.booklib.model.BookCreate; +import ru.cft.booklib.service.BooksService; import java.util.List; public class BooksApiImpl implements BooksApi { + // /* + private final Provider booksService; + + @Inject + public BooksApiImpl(Provider booksService) { + this.booksService = booksService; + } + + @Override + public Book bookPost(BookCreate bookCreate) { + return booksService.get().addBook(bookCreate); + } + + @Override + public List booksGet() { + return booksService.get().getBooks(); + } + // */ + + /* @Override public Book bookPost(BookCreate bookCreate) { return null; @@ -20,4 +43,5 @@ public class BooksApiImpl implements BooksApi { return List.of(book); } -} + */ +} \ No newline at end of file diff --git a/src/main/java/ru/cft/booklib/service/BooksService.java b/src/main/java/ru/cft/booklib/service/BooksService.java new file mode 100644 index 0000000..0a633f6 --- /dev/null +++ b/src/main/java/ru/cft/booklib/service/BooksService.java @@ -0,0 +1,15 @@ +package ru.cft.booklib.service; + +import ru.cft.booklib.model.Book; +import ru.cft.booklib.model.BookCreate; + +import java.util.List; + +/** Сервис по работе с книгами. */ +public interface BooksService { + /** Добавляет книгу в библиотеку. */ + Book addBook(BookCreate bookCreate); + + /** Возвращает список книг библиотеки. */ + List getBooks(); +} diff --git a/src/main/java/ru/cft/booklib/service/ReadersService.java b/src/main/java/ru/cft/booklib/service/ReadersService.java new file mode 100644 index 0000000..e994b23 --- /dev/null +++ b/src/main/java/ru/cft/booklib/service/ReadersService.java @@ -0,0 +1,5 @@ +package ru.cft.booklib.service; + +/** Сервис по работе с читателями. */ +public interface ReadersService { +} diff --git a/src/main/java/ru/cft/booklib/service/TransactionsService.java b/src/main/java/ru/cft/booklib/service/TransactionsService.java new file mode 100644 index 0000000..7c17e43 --- /dev/null +++ b/src/main/java/ru/cft/booklib/service/TransactionsService.java @@ -0,0 +1,5 @@ +package ru.cft.booklib.service; + +/** Сервис по выдаче книг читателям. */ +public interface TransactionsService { +} diff --git a/src/main/java/ru/cft/booklib/service/impl/BooksServiceImpl.java b/src/main/java/ru/cft/booklib/service/impl/BooksServiceImpl.java new file mode 100644 index 0000000..0d5db9c --- /dev/null +++ b/src/main/java/ru/cft/booklib/service/impl/BooksServiceImpl.java @@ -0,0 +1,45 @@ +package ru.cft.booklib.service.impl; + +import ru.cft.booklib.model.Book; +import ru.cft.booklib.model.BookCreate; +import ru.cft.booklib.service.BooksService; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +public class BooksServiceImpl implements BooksService { + /** ^^^ Удалить после реализации репозитория. */ + private static final ConcurrentHashMap books = new ConcurrentHashMap<>(); + + private static boolean isInit = false; + private static void init() { + if(isInit) + return; + + isInit = true; + Book book = new Book(); + book.id(1); + book.title("Java для начинающих"); + book.authors(List.of("Иванов", "Петров")); + books.put(1, book); + } + + @Override + public Book addBook(BookCreate bookCreate) { + Book book = new Book(); + + book.setId(books.size() + 1); + book.setTitle(bookCreate.getTitle()); + book.setAuthors(bookCreate.getAuthors()); + + books.put(book.getId(), book); + return book; + } + + @Override + public List getBooks() { + init(); + return new ArrayList<>(books.values()); + } +} diff --git a/src/main/java/ru/cft/booklib/service/impl/ReadersServiceImpl.java b/src/main/java/ru/cft/booklib/service/impl/ReadersServiceImpl.java new file mode 100644 index 0000000..f9c2a1a --- /dev/null +++ b/src/main/java/ru/cft/booklib/service/impl/ReadersServiceImpl.java @@ -0,0 +1,7 @@ +package ru.cft.booklib.service.impl; + +import ru.cft.booklib.service.ReadersService; + +public class ReadersServiceImpl implements ReadersService { + +} diff --git a/src/main/java/ru/cft/booklib/service/impl/TransactionsServiceImpl.java b/src/main/java/ru/cft/booklib/service/impl/TransactionsServiceImpl.java new file mode 100644 index 0000000..e266520 --- /dev/null +++ b/src/main/java/ru/cft/booklib/service/impl/TransactionsServiceImpl.java @@ -0,0 +1,6 @@ +package ru.cft.booklib.service.impl; + +import ru.cft.booklib.service.TransactionsService; + +public class TransactionsServiceImpl implements TransactionsService { +}