Проект выпускницы курса «Разработчик на Spring Framework»

Предлагаем вашему вниманию очередную проектную работу по курсу «Разработчик на Spring Framework». Её выполнила Елена Жильцова, выпускница одной из прошлых групп. В свободное от программирования время Елена, как и многие девушки, увлекается кухней, поэтому она решила написать простенькое веб-приложение, представляющее собой сборник рецептов.

Надо сказать, что приложение поддерживает два языка (русский и английский) и выглядит довольно практично:

С помощью этого приложения вы можете сохранять свои рецепты и быстро их находить в случае надобности. Это позволит сэкономить время, ведь больше не придётся часами рыться в записных и кулинарных книжках в поисках любимого блюда и необходимых ингредиентов. Кроме того, вы сможете добавлять картинки по URL, просто скопировав ссылку на изображение.

При просмотре нужного рецепта отображаются: — названия и категории блюд (салат «Оливье», торт «Наполеон» и т. п.); — компоненты, необходимые для приготовления; — фотография, соответствующая нужному рецепту.

Текстовый поиск реализован следующим образом:

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

Интерфейс тоже предельно прост и понятен. Есть и специальная инструкция по использованию приложения:

При желании вы можете ознакомиться с исходным кодом проекта на GitHub.