Dazz1ee / OOP

Проект по ООП

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OOP

MAIGENERATION

Проект MAIGENERATION - сайт, где можно сгенерировать цитаты наподобие Маевского цитатника или текст, как в ИА "Панорама МАИ". Backend написан на Java с помощью фреймворка Spring, frontend написан на React, так как генерация текста может занимать долгое время я использовал очередь сообщений RabbitMQ, сгенерированный текст сохраняется в БД (связь one-to-one). Чтобы сгенерировать текст нужно сначало авторизоваться, пользователь может посмотреть результат последнего запроса генерации текста. В качестве модели генерации текста взял medium GPT3 от Сбера, дообучал в Colaboratory.

Архитектура

Точка входа в приложение ингресс-контроллер, доступ настроен по хосту maigeneration.ru.
Манифесты

Паттерны

  • Singleton

Spring по умолчанию создает ровно один экземпляр объекта, к который можно получить с помощью аннотации
Пример создание бина:

  @Repository
  public interface PostRepository extends JpaRepository<Posts, Long> {}

Пример получения объекта:

  @Autowired
  private PostRepository postRepository;
  • Dependency injection и inversion of control (IOC)

IoC-контейнер в Spring, отвечает за создание объекта, связывание объектов вместе, конфигурирование объектов и обработку всего их жизненного цикла от создания до полного уничтожения.

В контейнере Spring используется инъекция зависимостей (Dependency Injection, DI) для управления компонентами приложения. Эти компоненты называются биныю

  • Builder
        User user = new User();
        user.setEmail(sign.email());
        user.setPassword(passwordEncode);
        user.setUsername(sign.name());
  • Chain of responsibility

Запрос проходит цепочку обработки

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
        .cors().and().csrf().disable()
        .authorizeRequests()
        .antMatchers("/getLast/**").hasRole("USER")
        .antMatchers("/signout/**").hasRole("USER")
        .antMatchers("/generation/**").hasRole("USER")
        .and()
        .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
        .sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        httpSecurity.headers().frameOptions().sameOrigin();
        httpSecurity.addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class);
        return httpSecurity.build();
    }
  • Observer

Следит за появление сообщений в очереди.

    @RabbitListener(queues = "textQueue")
    public String[] listen(MyMessage message) throws URISyntaxException {
        ...
    }
  • Momento

Сериализация сообщения

    @PostMapping("/generation")
    public ResponseEntity<?> generate(@RequestBody GenerationModel model, Authentication authentication) throws URISyntaxException {
        UserDetailsImp userDetailsImp = (UserDetailsImp) authentication.getPrincipal();
        MyMessage message = new MyMessage(userDetailsImp.getId(), model.getCount(), List.of(new String[]{model.getText()}), model.getAuthor());
        String[] response = (String[]) rabbitTemplate.convertSendAndReceive(exchange.getName(), "rpc", message);
        return ResponseEntity.ok().body(response);
    }

Десериализация сообщения

    @RabbitListener(queues = "textQueue")
    @Transactional
    public String[] listen(MyMessage message) throws URISyntaxException {
        ...
    }
  • repositories содержат 3 интерефейса с помощью которых можно обращаться к БД:

    • PostRepository
    • RoleRepository
    • UserRepository
  • services содержит служебные классы - сервисы, которые выполняют бизнес-логику

    • PostService
    • RoleService
    • UserService
  • contollers содержит контроллеры, обрабатывающие запросы.

    • AuthController
    • TextController
  • model содержит классы и рекорды, не реализующие никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели (нужны для получения, отправки запросов и сообщений)

  • filter - пакет, в котором содержатся классы для настройки авторизации

  • entity - пакет, в котором находятся сущности БД

  • security - пакет, в котором содержится реализация JWT токена и переопределение информация о пользователе

  • configure содержит конфигурацию приложения и очереди сообщений.

  • MaioopApplication - точка входа в приложение.

Использовал компоненты MaterialUI, есть несколько страниц: авторизация, регистрация, главная и страница с последним запросом

About

Проект по ООП


Languages

Language:Jupyter Notebook 54.1%Language:JavaScript 24.1%Language:Java 18.1%Language:CSS 1.3%Language:Python 1.0%Language:HTML 1.0%Language:Dockerfile 0.3%