0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: spring framework, проект, проектная работа, разработка на java, программирование spring, сборник рецептов, веб-приложение</p>
1
<p>Теги: spring framework, проект, проектная работа, разработка на java, программирование spring, сборник рецептов, веб-приложение</p>
2
<p>Предлагаем вашему вниманию очередную проектную работу по курсу "<a>Разработчик на Spring Framework</a>". Её выполнила Елена Жильцова, выпускница одной из прошлых групп. В свободное от программирования время Елена, как и многие девушки, увлекается кухней, поэтому она решила написать простенькое веб-приложение, представляющее собой<strong>сборник рецептов</strong>.</p>
2
<p>Предлагаем вашему вниманию очередную проектную работу по курсу "<a>Разработчик на Spring Framework</a>". Её выполнила Елена Жильцова, выпускница одной из прошлых групп. В свободное от программирования время Елена, как и многие девушки, увлекается кухней, поэтому она решила написать простенькое веб-приложение, представляющее собой<strong>сборник рецептов</strong>.</p>
3
<p>Надо сказать, что приложение поддерживает два языка (русский и английский) и выглядит довольно практично:</p>
3
<p>Надо сказать, что приложение поддерживает два языка (русский и английский) и выглядит довольно практично:</p>
4
<p>С помощью этого приложения вы можете<strong>сохранять свои рецепты</strong>и быстро их находить в случае надобности. Это позволит сэкономить время, ведь больше не придётся часами рыться в записных и кулинарных книжках в поисках любимого блюда и необходимых ингредиентов. Кроме того, вы сможете добавлять картинки по URL, просто скопировав ссылку на изображение.</p>
4
<p>С помощью этого приложения вы можете<strong>сохранять свои рецепты</strong>и быстро их находить в случае надобности. Это позволит сэкономить время, ведь больше не придётся часами рыться в записных и кулинарных книжках в поисках любимого блюда и необходимых ингредиентов. Кроме того, вы сможете добавлять картинки по URL, просто скопировав ссылку на изображение.</p>
5
<p>При просмотре нужного рецепта отображаются: - названия и категории блюд (салат "Оливье", торт "Наполеон" и т. п.); - компоненты, необходимые для приготовления; - фотография, соответствующая нужному рецепту.</p>
5
<p>При просмотре нужного рецепта отображаются: - названия и категории блюд (салат "Оливье", торт "Наполеон" и т. п.); - компоненты, необходимые для приготовления; - фотография, соответствующая нужному рецепту.</p>
6
<p><strong>Текстовый поиск</strong>реализован следующим образом:</p>
6
<p><strong>Текстовый поиск</strong>реализован следующим образом:</p>
7
package ru.otus.elena.receipt.service; import io.micrometer.core.instrument.Timer; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import ru.otus.elena.receipt.dao.ReceiptRepository; import ru.otus.elena.receipt.domain.Receipt; @Service public class ReceiptService { @Autowired private ReceiptRepository receiptRepository; @Autowired private Timer findTimer; public List<Receipt> findReceipt(Map<String, String> map) { if (map.getOrDefault("type", "").equalsIgnoreCase("")) { if (map.getOrDefault("name", "").equalsIgnoreCase("")) { if (map.getOrDefault("component", "").equalsIgnoreCase("")) { return findTimer.record(() -> { return receiptRepository.findAll(); }); } else { return findTimer.record(() -> { return receiptRepository.findByComponent(map.get("component")); }); } } else { if (map.getOrDefault("component", "").equalsIgnoreCase("")) { return findTimer.record(() -> { return receiptRepository.findByName(map.get("name")); }); } else { return findTimer.record(() -> { return receiptRepository.findByNameAndComponent(map.get("name"), map.get("component")); }); } } } else { if (map.getOrDefault("name", "").equalsIgnoreCase("")) { if (map.getOrDefault("component", "").equalsIgnoreCase("")) { return findTimer.record(() -> { return receiptRepository.findByType(map.get("type")); }); } else { return findTimer.record(() -> { return receiptRepository.findByTypeAndComponent(map.get("type"), map.get("component")); }); } } else { if (map.getOrDefault("component", "").equalsIgnoreCase("")) { return findTimer.record(() -> { return receiptRepository.findByTypeAndName(map.get("type"), map.get("name")); }); } else { return findTimer.record(() -> { return receiptRepository.findByTypeAndNameAndComponent(map.get("type"), map.get("name"), map.get("component")); }); } } } } }<p>Интерфейс тоже предельно прост и понятен. Есть и специальная инструкция по использованию приложения:</p>
7
package ru.otus.elena.receipt.service; import io.micrometer.core.instrument.Timer; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import ru.otus.elena.receipt.dao.ReceiptRepository; import ru.otus.elena.receipt.domain.Receipt; @Service public class ReceiptService { @Autowired private ReceiptRepository receiptRepository; @Autowired private Timer findTimer; public List<Receipt> findReceipt(Map<String, String> map) { if (map.getOrDefault("type", "").equalsIgnoreCase("")) { if (map.getOrDefault("name", "").equalsIgnoreCase("")) { if (map.getOrDefault("component", "").equalsIgnoreCase("")) { return findTimer.record(() -> { return receiptRepository.findAll(); }); } else { return findTimer.record(() -> { return receiptRepository.findByComponent(map.get("component")); }); } } else { if (map.getOrDefault("component", "").equalsIgnoreCase("")) { return findTimer.record(() -> { return receiptRepository.findByName(map.get("name")); }); } else { return findTimer.record(() -> { return receiptRepository.findByNameAndComponent(map.get("name"), map.get("component")); }); } } } else { if (map.getOrDefault("name", "").equalsIgnoreCase("")) { if (map.getOrDefault("component", "").equalsIgnoreCase("")) { return findTimer.record(() -> { return receiptRepository.findByType(map.get("type")); }); } else { return findTimer.record(() -> { return receiptRepository.findByTypeAndComponent(map.get("type"), map.get("component")); }); } } else { if (map.getOrDefault("component", "").equalsIgnoreCase("")) { return findTimer.record(() -> { return receiptRepository.findByTypeAndName(map.get("type"), map.get("name")); }); } else { return findTimer.record(() -> { return receiptRepository.findByTypeAndNameAndComponent(map.get("type"), map.get("name"), map.get("component")); }); } } } } }<p>Интерфейс тоже предельно прост и понятен. Есть и специальная инструкция по использованию приложения:</p>
8
<p>При желании вы можете ознакомиться с исходным кодом проекта на<a>GitHub</a>.</p>
8
<p>При желании вы можете ознакомиться с исходным кодом проекта на<a>GitHub</a>.</p>
9
9