99import lombok .RequiredArgsConstructor ;
1010import lombok .extern .slf4j .Slf4j ;
1111import org .springframework .core .io .ClassPathResource ;
12+ import org .springframework .core .io .FileSystemResource ;
1213import org .springframework .core .io .Resource ;
1314import org .springframework .core .io .ResourceLoader ;
1415import org .springframework .dao .DuplicateKeyException ;
1516import org .springframework .stereotype .Service ;
1617import reactor .core .publisher .Flux ;
1718import reactor .core .publisher .Mono ;
1819
20+ import jakarta .annotation .PostConstruct ;
1921import java .io .IOException ;
2022import java .nio .charset .StandardCharsets ;
2123import java .nio .file .Files ;
@@ -35,6 +37,35 @@ public class ModelDataLoader {
3537 private final ModelDataFixer modelDataFixer ;
3638 private final ResourceLoader resourceLoader ;
3739
40+ /**
41+ * Uygulama başlangıcında varsayılan modelleri yükler
42+ */
43+ @ PostConstruct
44+ public void loadDefaultModels () {
45+ log .info ("Varsayılan modelleri yükleme girişimi başlatılıyor" );
46+
47+ // Önce model sayısını kontrol et, eğer veri zaten varsa tekrar yükleme
48+ modelRepository .count ()
49+ .flatMap (modelCount -> {
50+ if (modelCount > 0 ) {
51+ log .info ("Veritabanında zaten {} model var, yeniden yükleme yapılmayacak" , modelCount );
52+ return Mono .just (0 );
53+ }
54+
55+ log .info ("Veritabanında hiç model yok, varsayılan modelleri yüklüyorum" );
56+ return loadModelsFromJson ("newmodels.json" )
57+ .onErrorResume (e -> {
58+ log .error ("Varsayılan model yükleme hatası: {}" , e .getMessage (), e );
59+ // Alternatif dosya adı dene
60+ return loadModelsFromJson ("classpath:newmodels.json" );
61+ });
62+ })
63+ .subscribe (
64+ count -> log .info ("Varsayılan model yükleme işlemi tamamlandı: {} model yüklendi" , count ),
65+ error -> log .error ("Varsayılan model yükleme hatası: {}" , error .getMessage (), error )
66+ );
67+ }
68+
3869 /**
3970 * JSON dosyasından model verilerini yükler
4071 *
@@ -67,9 +98,12 @@ public Mono<Integer> loadModelsFromJson(String jsonFilePath) {
6798 private Mono <Integer > saveAllProvidersThenModels (List <Provider > providers , List <AIModel > models ) {
6899 AtomicInteger savedModelsCount = new AtomicInteger (0 );
69100
101+ // Önce provider'ları kaydet, sonra modelleri kaydet
70102 return Flux .fromIterable (providers )
71- .flatMap (provider -> saveProvider ( provider ) )
103+ .flatMap (this :: saveProvider )
72104 .collectList ()
105+ .doOnSuccess (savedProviders ->
106+ log .info ("{} provider başarıyla kaydedildi" , savedProviders .size ()))
73107 .flatMapMany (savedProviders -> Flux .fromIterable (models ))
74108 .concatMap (model -> saveModel (model , savedModelsCount ))
75109 .then (Mono .just (savedModelsCount .get ()))
@@ -80,6 +114,11 @@ private Mono<Integer> saveAllProvidersThenModels(List<Provider> providers, List<
80114 * Provider'ı kaydeder, zaten varsa var olanı döndürür
81115 */
82116 private Mono <Provider > saveProvider (Provider provider ) {
117+ if (provider .getName () == null || provider .getName ().trim ().isEmpty ()) {
118+ log .warn ("Geçersiz provider ismi, atlanan provider: {}" , provider );
119+ return Mono .empty ();
120+ }
121+
83122 return providerRepository .findByName (provider .getName ())
84123 .flatMap (existingProvider -> {
85124 log .info ("Provider '{}' zaten var, yeniden kullanılıyor" , provider .getName ());
@@ -89,6 +128,9 @@ private Mono<Provider> saveProvider(Provider provider) {
89128 providerRepository .save (provider )
90129 .doOnSuccess (savedProvider ->
91130 log .info ("Yeni provider kaydedildi: {}" , savedProvider .getName ()))
131+ .doOnError (e ->
132+ log .error ("Provider '{}' kaydedilirken hata: {}" ,
133+ provider .getName (), e .getMessage ()))
92134 );
93135 }
94136
@@ -132,32 +174,38 @@ private Mono<AIModel> saveModel(AIModel model, AtomicInteger counter) {
132174 */
133175 private Mono <String > readJsonContent (String jsonFilePath ) {
134176 try {
177+ Resource resource ;
178+
135179 if (jsonFilePath .startsWith ("classpath:" )) {
136- String resourcePath = jsonFilePath .replace ("classpath:" , "" );
137- Resource resource = resourceLoader .getResource ("classpath:" + resourcePath );
138-
139- log .info ("Modeller classpath kaynağından yükleniyor: {}" , resource .getURL ());
140-
141- try (var inputStream = resource .getInputStream ()) {
142- byte [] bytes = inputStream .readAllBytes ();
143- return Mono .just (new String (bytes , StandardCharsets .UTF_8 ));
144- }
180+ // ClassPath kaynaklarını yükle
181+ resource = resourceLoader .getResource (jsonFilePath );
182+ } else if (Files .exists (Paths .get (jsonFilePath ))) {
183+ // Dosya sisteminden yükle
184+ resource = new FileSystemResource (jsonFilePath );
145185 } else {
146- Path path = Paths .get (jsonFilePath );
147- if (Files .exists (path )) {
148- log .info ("Modeller dosya sisteminden yükleniyor: {}" , path .toAbsolutePath ());
149- return Mono .just (Files .readString (path ));
150- } else {
151- // Dosya bulunamadı, ClassPathResource olarak dene
152- ClassPathResource resource = new ClassPathResource (jsonFilePath );
153- log .info ("Modeller ClassPathResource'dan yükleniyor: {}" , resource .getURL ());
154-
155- try (var inputStream = resource .getInputStream ()) {
156- byte [] bytes = inputStream .readAllBytes ();
157- return Mono .just (new String (bytes , StandardCharsets .UTF_8 ));
186+ // Önce sınıf yolunda ara
187+ resource = new ClassPathResource (jsonFilePath );
188+ if (!resource .exists ()) {
189+ // Sonra resources klasöründe ara
190+ resource = resourceLoader .getResource ("classpath:" + jsonFilePath );
191+ if (!resource .exists ()) {
192+ throw new IOException ("Dosya bulunamadı: " + jsonFilePath );
158193 }
159194 }
160195 }
196+
197+ log .info ("Model dosyası bulundu: {}" , resource .getURL ());
198+
199+ try (var inputStream = resource .getInputStream ()) {
200+ byte [] bytes = inputStream .readAllBytes ();
201+ String content = new String (bytes , StandardCharsets .UTF_8 );
202+
203+ if (content .isEmpty ()) {
204+ throw new IOException ("JSON dosyası boş" );
205+ }
206+
207+ return Mono .just (content );
208+ }
161209 } catch (IOException e ) {
162210 log .error ("JSON dosyası okunamadı: {}" , e .getMessage (), e );
163211 return Mono .error (e );
0 commit comments