MimeTypeService.java

package api.services;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import api.entities.MimeType;
import api.repositories.MimeTypeRepository;
import lombok.extern.slf4j.Slf4j;

/**
 * {@link MimeTypeService}.
 */
@Slf4j
@Service
public class MimeTypeService {
    @Autowired
    private MimeTypeRepository mimeTypeRepository;

    /**
     * Find mime type.
     *
     * @param name mime type name
     * @return {@link Optional} {@link MimeType}
     */
    @Transactional(readOnly = true)
    public Optional<MimeType> find(String name) {
        return mimeTypeRepository.findByName(name);
    }

    /**
     * Save mime type.
     *
     * @param mimeType mime type
     * @return {@link MimeType}
     */
    @Transactional
    public MimeType save(MimeType mimeType) {
        log.info("Mime type saved: " + mimeType);
        return mimeTypeRepository.save(mimeType);
    }

    /**
     * Gets mime type by name and creates it if non-existent.
     *
     * @param name mime type name
     * @return {@link MimeType}
     */
    @Transactional
    public MimeType getOrCreateByName(String name) {
        return find(name).orElseGet(() -> save(MimeType.builder().name(name).build()));
    }
}