1 package fr.tiogars.chat.domains.lmstudio.services;
2
3 import java.util.Optional;
4
5 import org.springframework.http.HttpStatus;
6 import org.springframework.stereotype.Service;
7 import org.springframework.transaction.annotation.Transactional;
8 import org.springframework.validation.annotation.Validated;
9 import org.springframework.web.server.ResponseStatusException;
10
11 import fr.tiogars.chat.domains.lmstudio.entities.LmStudioSettingsEntity;
12 import fr.tiogars.chat.domains.lmstudio.models.LmStudioSettings;
13 import fr.tiogars.chat.domains.lmstudio.repositories.LmStudioSettingsRepository;
14 import jakarta.validation.Valid;
15 import jakarta.validation.constraints.NotNull;
16
17 @Service
18 @Validated
19 public class LmStudioSettingsService {
20
21 private final LmStudioSettingsRepository repository;
22
23 public LmStudioSettingsService(LmStudioSettingsRepository repository) {
24 this.repository = repository;
25 }
26
27 @Transactional(readOnly = true)
28 public Optional<LmStudioSettings> find() {
29 return repository.findById(LmStudioSettingsEntity.GLOBAL_ID).map(LmStudioSettingsEntity::toSettings);
30 }
31
32 @Transactional(readOnly = true)
33 public LmStudioSettings requireSettings() {
34 return find().orElseThrow(() -> new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE,
35 "LM Studio is not configured. Configure it using PUT /api/v1/lmstudio/settings."));
36 }
37
38 @Transactional
39 public LmStudioSettings update(@NotNull @Valid LmStudioSettings settings) {
40 LmStudioSettingsEntity entity = repository.findById(LmStudioSettingsEntity.GLOBAL_ID)
41 .orElseGet(() -> new LmStudioSettingsEntity(settings));
42 entity.update(settings);
43 return repository.save(entity).toSettings();
44 }
45 }