Skip to content

Commit c32b083

Browse files
committed
Firestore koleksiyon isimleri güncellendi; "performance_analysis" ve "subscription_plans" isimleri sırasıyla "performanceAnalysis" ve "subscriptionPlans" olarak değiştirildi. AIModel ve Provider için yeni alanlar eklendi; ModelDataLoader ve ModelDataLoaderCommand sınıfları oluşturuldu, JSON dosyasından model yükleme işlevselliği eklendi. Uygulama yapılandırmasına model yükleme seçeneği eklendi.
1 parent dd8a4f6 commit c32b083

9 files changed

Lines changed: 430 additions & 60 deletions

File tree

llm-service/src/main/java/com/craftpilot/llmservice/repository/PerformanceAnalysisRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
@RequiredArgsConstructor
1919
@Slf4j
2020
public class PerformanceAnalysisRepository {
21-
private static final String COLLECTION_NAME = "performance_analysis";
21+
private static final String COLLECTION_NAME = "performanceAnalysis";
2222

2323
private final Firestore firestore;
2424

subscription-service/src/main/java/com/craftpilot/subscriptionservice/repository/SubscriptionPlanRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
public class SubscriptionPlanRepository {
1818

1919
private final Firestore firestore;
20-
private static final String COLLECTION_NAME = "subscription_plans";
20+
private static final String COLLECTION_NAME = "subscriptionPlans";
2121

2222
public Mono<SubscriptionPlan> save(SubscriptionPlan plan) {
2323
if (plan.getId() == null) {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.craftpilot.userservice.command;
2+
3+
import com.craftpilot.userservice.service.ModelDataLoader;
4+
import lombok.RequiredArgsConstructor;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.boot.CommandLineRunner;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
8+
import org.springframework.stereotype.Component;
9+
import java.time.Duration;
10+
11+
@Component
12+
@RequiredArgsConstructor
13+
@Slf4j
14+
@ConditionalOnProperty(name = "app.load-models", havingValue = "true")
15+
public class ModelDataLoaderCommand implements CommandLineRunner {
16+
17+
private final ModelDataLoader modelDataLoader;
18+
19+
@Override
20+
public void run(String... args) {
21+
log.info("AI modelleri yükleme işlemi başlıyor...");
22+
23+
String jsonFilePath = "c:\\Projects\\Craft-Pilot-Ai\\models.json";
24+
if (args.length > 0 && args[0] != null && !args[0].isEmpty()) {
25+
jsonFilePath = args[0];
26+
}
27+
28+
modelDataLoader.loadModelsFromJson(jsonFilePath)
29+
.timeout(Duration.ofMinutes(5))
30+
.doOnSuccess(count -> {
31+
log.info("AI model yükleme işlemi tamamlandı: {} model yüklendi", count);
32+
})
33+
.doOnError(error -> {
34+
log.error("AI model yükleme sırasında hata: {}", error.getMessage(), error);
35+
})
36+
.block();
37+
}
38+
}

user-service/src/main/java/com/craftpilot/userservice/model/ai/AIModel.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ public class AIModel {
2727
private Integer maxTokens;
2828
private Integer maxInputTokens;
2929
private String requiredPlan;
30+
private Integer creditCost; // Her kullanımda tüketilecek kredi miktarı
31+
private String category; // Model kategorisi (basic, standard, premium gibi)
32+
private String architecture; // Modelin mimarisi
33+
private Integer contextLength; // Modelin bağlam penceresi uzunluğu
3034
}

user-service/src/main/java/com/craftpilot/userservice/repository/AIModelRepository.java

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,46 @@
11
package com.craftpilot.userservice.repository;
22

33
import com.craftpilot.userservice.model.ai.AIModel;
4-
import com.google.api.core.ApiFuture;
5-
import com.google.cloud.firestore.DocumentSnapshot;
64
import com.google.cloud.firestore.Firestore;
7-
import com.google.cloud.firestore.QuerySnapshot;
8-
import com.google.cloud.firestore.WriteResult;
95
import lombok.RequiredArgsConstructor;
106
import org.springframework.stereotype.Repository;
117
import reactor.core.publisher.Flux;
128
import reactor.core.publisher.Mono;
139
import reactor.core.scheduler.Schedulers;
1410

15-
import java.util.concurrent.CompletableFuture;
16-
1711
@Repository
1812
@RequiredArgsConstructor
1913
public class AIModelRepository {
20-
21-
private final Firestore firestore;
22-
private static final String COLLECTION_NAME = "ai_models";
2314

24-
public Flux<AIModel> findAll() {
25-
return Mono.fromCallable(() ->
15+
private final Firestore firestore;
16+
private static final String COLLECTION_NAME = "aiModels";
17+
18+
public Mono<AIModel> save(AIModel model) {
19+
return Mono.fromCallable(() -> {
2620
firestore.collection(COLLECTION_NAME)
27-
.get()
28-
.get()
29-
.getDocuments()
30-
.stream()
31-
.map(doc -> doc.toObject(AIModel.class))
32-
.toList()
33-
)
34-
.subscribeOn(Schedulers.boundedElastic())
35-
.flatMapMany(Flux::fromIterable);
21+
.document(model.getId())
22+
.set(model)
23+
.get();
24+
return model;
25+
}).subscribeOn(Schedulers.boundedElastic());
3626
}
37-
27+
28+
public Flux<AIModel> findAll() {
29+
return Flux.defer(() -> Flux.fromIterable(
30+
firestore.collection(COLLECTION_NAME).get().get().getDocuments())
31+
.map(doc -> doc.toObject(AIModel.class)))
32+
.subscribeOn(Schedulers.boundedElastic());
33+
}
34+
35+
public Flux<AIModel> findByCategory(String category) {
36+
return Flux.defer(() -> Flux.fromIterable(
37+
firestore.collection(COLLECTION_NAME)
38+
.whereEqualTo("category", category)
39+
.get().get().getDocuments())
40+
.map(doc -> doc.toObject(AIModel.class)))
41+
.subscribeOn(Schedulers.boundedElastic());
42+
}
43+
3844
public Mono<AIModel> findById(String id) {
3945
return Mono.fromCallable(() ->
4046
firestore.collection(COLLECTION_NAME)
@@ -45,16 +51,6 @@ public Mono<AIModel> findById(String id) {
4551
).subscribeOn(Schedulers.boundedElastic());
4652
}
4753

48-
public Mono<AIModel> save(AIModel model) {
49-
return Mono.fromCallable(() -> {
50-
if (model.getId() == null) {
51-
model.setId(firestore.collection(COLLECTION_NAME).document().getId());
52-
}
53-
firestore.collection(COLLECTION_NAME).document(model.getId()).set(model).get();
54-
return model;
55-
}).subscribeOn(Schedulers.boundedElastic());
56-
}
57-
5854
public Mono<Void> deleteById(String id) {
5955
return Mono.fromRunnable(() -> {
6056
try {

user-service/src/main/java/com/craftpilot/userservice/repository/ProviderRepository.java

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,35 @@
11
package com.craftpilot.userservice.repository;
22

33
import com.craftpilot.userservice.model.ai.Provider;
4-
import com.google.api.core.ApiFuture;
5-
import com.google.cloud.firestore.DocumentSnapshot;
64
import com.google.cloud.firestore.Firestore;
7-
import com.google.cloud.firestore.QuerySnapshot;
8-
import com.google.cloud.firestore.WriteResult;
95
import lombok.RequiredArgsConstructor;
106
import org.springframework.stereotype.Repository;
117
import reactor.core.publisher.Flux;
128
import reactor.core.publisher.Mono;
139
import reactor.core.scheduler.Schedulers;
1410

15-
import java.util.concurrent.CompletableFuture;
16-
1711
@Repository
1812
@RequiredArgsConstructor
1913
public class ProviderRepository {
20-
14+
2115
private final Firestore firestore;
2216
private static final String COLLECTION_NAME = "providers";
23-
24-
public Flux<Provider> findAll() {
25-
return Mono.fromCallable(() ->
17+
18+
public Mono<Provider> save(Provider provider) {
19+
return Mono.fromCallable(() -> {
2620
firestore.collection(COLLECTION_NAME)
27-
.get()
28-
.get()
29-
.getDocuments()
30-
.stream()
31-
.map(doc -> doc.toObject(Provider.class))
32-
.toList()
33-
)
34-
.subscribeOn(Schedulers.boundedElastic())
35-
.flatMapMany(Flux::fromIterable);
21+
.document(provider.getName())
22+
.set(provider)
23+
.get();
24+
return provider;
25+
}).subscribeOn(Schedulers.boundedElastic());
26+
}
27+
28+
public Flux<Provider> findAll() {
29+
return Flux.defer(() -> Flux.fromIterable(
30+
firestore.collection(COLLECTION_NAME).get().get().getDocuments())
31+
.map(doc -> doc.toObject(Provider.class)))
32+
.subscribeOn(Schedulers.boundedElastic());
3633
}
3734

3835
public Mono<Provider> findById(String name) {
@@ -45,13 +42,6 @@ public Mono<Provider> findById(String name) {
4542
).subscribeOn(Schedulers.boundedElastic());
4643
}
4744

48-
public Mono<Provider> save(Provider provider) {
49-
return Mono.fromCallable(() -> {
50-
firestore.collection(COLLECTION_NAME).document(provider.getName()).set(provider).get();
51-
return provider;
52-
}).subscribeOn(Schedulers.boundedElastic());
53-
}
54-
5545
public Mono<Void> deleteById(String name) {
5646
return Mono.fromRunnable(() -> {
5747
try {

user-service/src/main/java/com/craftpilot/userservice/repository/UserPreferenceRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
public class UserPreferenceRepository {
1818

1919
private final Firestore firestore;
20-
private static final String COLLECTION_NAME = "user_preferences";
20+
private static final String COLLECTION_NAME = "userPreferences";
2121

2222
public Mono<UserPreference> findById(String userId) {
2323
return Mono.fromCallable(() ->

0 commit comments

Comments
 (0)