Добавление DI.

This commit is contained in:
max 2025-03-26 11:23:20 +07:00
parent 599d790171
commit f3a1248c10
13 changed files with 160 additions and 16 deletions

View File

@ -0,0 +1,3 @@
<component name="ProjectDictionaryState">
<dictionary name="max" />
</component>

6
README.md Normal file
View File

@ -0,0 +1,6 @@
## Backend для приложения "Автоматизация работы библиотеки"
### Ограничения
Поскольку аутентификация и авторизация не реализованы, данное приложение можно использовать только в ограниченной среде (например внутри docker контейнера).

19
pom.xml
View File

@ -37,19 +37,6 @@
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jsonb</artifactId> <artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>io.rest-assured</groupId> <groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId> <artifactId>rest-assured</artifactId>
@ -70,6 +57,12 @@
<artifactId>validation-api</artifactId> <artifactId>validation-api</artifactId>
<version>2.0.1.Final</version> <version>2.0.1.Final</version>
</dependency> </dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>7.0.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -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);
}
}

View File

@ -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());
}
}

View File

@ -1,9 +1,10 @@
package ru.cft.booklib; package ru.cft.booklib.application;
import io.quarkus.runtime.Quarkus; import io.quarkus.runtime.Quarkus;
import io.quarkus.runtime.QuarkusApplication; import io.quarkus.runtime.QuarkusApplication;
import io.quarkus.runtime.annotations.QuarkusMain; import io.quarkus.runtime.annotations.QuarkusMain;
/** Класс для запуска приложения в IDE. */
@QuarkusMain @QuarkusMain
public class Main { public class Main {
public static void main(String... args) { public static void main(String... args) {
@ -15,9 +16,10 @@ public class Main {
} }
public static class MyApp implements QuarkusApplication { public static class MyApp implements QuarkusApplication {
@Override @Override
public int run(String... args){ public int run(String... args){
InjectionInitializer.initDI();
Quarkus.waitForExit(); Quarkus.waitForExit();
return 0; return 0;
} }

View File

@ -1,12 +1,35 @@
package ru.cft.booklib.controller.impl; 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.controller.BooksApi;
import ru.cft.booklib.model.Book; import ru.cft.booklib.model.Book;
import ru.cft.booklib.model.BookCreate; import ru.cft.booklib.model.BookCreate;
import ru.cft.booklib.service.BooksService;
import java.util.List; import java.util.List;
public class BooksApiImpl implements BooksApi { public class BooksApiImpl implements BooksApi {
// /*
private final Provider<BooksService> booksService;
@Inject
public BooksApiImpl(Provider<BooksService> booksService) {
this.booksService = booksService;
}
@Override
public Book bookPost(BookCreate bookCreate) {
return booksService.get().addBook(bookCreate);
}
@Override
public List<Book> booksGet() {
return booksService.get().getBooks();
}
// */
/*
@Override @Override
public Book bookPost(BookCreate bookCreate) { public Book bookPost(BookCreate bookCreate) {
return null; return null;
@ -20,4 +43,5 @@ public class BooksApiImpl implements BooksApi {
return List.of(book); return List.of(book);
} }
*/
} }

View File

@ -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<Book> getBooks();
}

View File

@ -0,0 +1,5 @@
package ru.cft.booklib.service;
/** Сервис по работе с читателями. */
public interface ReadersService {
}

View File

@ -0,0 +1,5 @@
package ru.cft.booklib.service;
/** Сервис по выдаче книг читателям. */
public interface TransactionsService {
}

View File

@ -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<Integer, Book> 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<Book> getBooks() {
init();
return new ArrayList<>(books.values());
}
}

View File

@ -0,0 +1,7 @@
package ru.cft.booklib.service.impl;
import ru.cft.booklib.service.ReadersService;
public class ReadersServiceImpl implements ReadersService {
}

View File

@ -0,0 +1,6 @@
package ru.cft.booklib.service.impl;
import ru.cft.booklib.service.TransactionsService;
public class TransactionsServiceImpl implements TransactionsService {
}