View Javadoc
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  }