UserQueryService.java

package de.mirkosertic.powerstaff.auth;

import org.springframework.jdbc.core.simple.JdbcClient;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserQueryService {

    private final JdbcClient jdbcClient;

    public UserQueryService(final JdbcClient jdbcClient) {
        this.jdbcClient = jdbcClient;
    }

    public List<UserView> findAll() {
        return jdbcClient
                .sql("SELECT username, must_change_password, enabled, profile_search_system_prompt, is_admin AS admin, llm_api_token FROM ps_user ORDER BY username ASC")
                .query(UserView.class)
                .list();
    }

    public Optional<UserView> findByUsername(final String username) {
        return jdbcClient
                .sql("SELECT username, must_change_password, enabled, profile_search_system_prompt, is_admin AS admin, llm_api_token FROM ps_user WHERE username = :username")
                .param("username", username)
                .query(UserView.class)
                .optional();
    }

    public Optional<String> findFirstAdminLlmApiToken() {
        return jdbcClient
                .sql("SELECT llm_api_token FROM ps_user WHERE is_admin = TRUE AND llm_api_token IS NOT NULL AND llm_api_token <> '' ORDER BY username ASC LIMIT 1")
                .query(String.class)
                .optional();
    }
}