Add rag-service

This commit is contained in:
2026-02-16 18:54:22 +01:00
parent f4b4212160
commit 37b619fd93
89 changed files with 4262 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
package com.balex.rag.repo;
import com.balex.rag.model.entity.ChatEntry;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ChatEntryRepository extends JpaRepository<ChatEntry, Long> {
List<ChatEntry> findByChatIdOrderByCreatedAtAsc(Long chatId);
}

View File

@@ -0,0 +1,9 @@
package com.balex.rag.repo;
import com.balex.rag.model.entity.Chat;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ChatRepository extends JpaRepository<Chat, Long> {
}

View File

@@ -0,0 +1,15 @@
package com.balex.rag.repo;
import com.balex.rag.model.LoadedDocument;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface DocumentRepository extends JpaRepository<LoadedDocument, Long> {
boolean existsByFilenameAndContentHash(String filename, String contentHash);
List<LoadedDocument> findByUserId(Integer userId);
}

View File

@@ -0,0 +1,15 @@
package com.balex.rag.repo;
import com.balex.rag.model.entity.RefreshToken;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface RefreshTokenRepository extends JpaRepository<RefreshToken, Integer> {
Optional<RefreshToken> findByToken(String token);
Optional<RefreshToken> findByUserId(Integer userId);
}

View File

@@ -0,0 +1,27 @@
package com.balex.rag.repo;
import com.balex.rag.model.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {
boolean existsByEmail(String email);
boolean existsByUsername(String username);
Optional<User> findByIdAndDeletedFalse (Integer id);
Optional<User> findUserByEmailAndDeletedFalse(String email);
Optional<User> findByEmail(String email);
Optional<User> findByUsername(String username);
}

View File

@@ -0,0 +1,13 @@
package com.balex.rag.repo;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface VectorStoreRepository {
void deleteBySourceIn(List<String> sources);
void deleteByUserId(Long userId);
}

View File

@@ -0,0 +1,36 @@
package com.balex.rag.repo.impl;
import com.balex.rag.repo.VectorStoreRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class VectorStoreRepositoryImpl implements VectorStoreRepository {
private final JdbcTemplate jdbcTemplate;
@Override
public void deleteBySourceIn(List<String> sources) {
if (sources == null || sources.isEmpty()) {
return;
}
String placeholders = String.join(",", sources.stream()
.map(s -> "?")
.toList());
String sql = "DELETE FROM vector_store WHERE metadata->>'source' IN (" + placeholders + ")";
jdbcTemplate.update(sql, sources.toArray());
}
@Override
public void deleteByUserId(Long userId) {
String sql = "DELETE FROM vector_store WHERE (metadata->>'user_id')::bigint = ?";
jdbcTemplate.update(sql, userId);
}
}