LmStudioSettingsService.java
package fr.tiogars.chat.domains.lmstudio.services;
import java.util.Optional;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.server.ResponseStatusException;
import fr.tiogars.chat.domains.lmstudio.entities.LmStudioSettingsEntity;
import fr.tiogars.chat.domains.lmstudio.models.LmStudioSettings;
import fr.tiogars.chat.domains.lmstudio.repositories.LmStudioSettingsRepository;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
@Service
@Validated
public class LmStudioSettingsService {
private final LmStudioSettingsRepository repository;
public LmStudioSettingsService(LmStudioSettingsRepository repository) {
this.repository = repository;
}
@Transactional(readOnly = true)
public Optional<LmStudioSettings> find() {
return repository.findById(LmStudioSettingsEntity.GLOBAL_ID).map(LmStudioSettingsEntity::toSettings);
}
@Transactional(readOnly = true)
public LmStudioSettings requireSettings() {
return find().orElseThrow(() -> new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE,
"LM Studio is not configured. Configure it using PUT /api/v1/lmstudio/settings."));
}
@Transactional
public LmStudioSettings update(@NotNull @Valid LmStudioSettings settings) {
LmStudioSettingsEntity entity = repository.findById(LmStudioSettingsEntity.GLOBAL_ID)
.orElseGet(() -> new LmStudioSettingsEntity(settings));
entity.update(settings);
return repository.save(entity).toSettings();
}
}