package jnpf.limsService.provider; import cn.dev33.satoken.stp.StpUtil; import jnpf.base.UserInfo; import jnpf.limsService.LimsTestWorkItemSnapshotService; import jnpf.util.UserProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import javax.sql.DataSource; import java.util.function.Supplier; /** No configuration-table access or read-pool initialization during application startup. */ @Configuration(proxyBeanMethods = false) public class LimsElnSourceConfiguration { @Bean public LimsElnReadonlyPool limsElnReadonlyPool(Environment environment, DataSource dataSource) { return new LimsElnReadonlyPool(environment, dataSource); } @Bean public Supplier limsElnSourceActors() { return () -> { UserInfo user = UserProvider.getUser(); if (user == null || user.getUserId() == null || user.getUserId().trim().isEmpty()) { throw new LimsElnReadonlyResolver.SourceFailure("SOURCE_FORBIDDEN", "Authenticated source caller required"); } String tenant = user.getTenantId(); if (tenant != null && !tenant.trim().isEmpty() && !"0".equals(tenant.trim())) { throw new LimsElnReadonlyResolver.SourceFailure("SOURCE_FORBIDDEN", "Invalid tenant context"); } return new LimsElnSourceCatalog.Actor("0", user.getUserId(), Boolean.TRUE.equals(user.getIsAdministrator()) || StpUtil.hasPermission("dianziJiluGonggongZiduanGuanli")); }; } @Bean public LimsElnSourceMetadata limsElnSourceMetadata(DataSource dataSource, LimsElnReadonlyPool pool, Supplier limsElnSourceActors) { return new LimsElnSourceMetadata(dataSource, pool.dataSource(), limsElnSourceActors); } @Bean public LimsElnDatasetCatalog limsElnDatasetCatalog(DataSource dataSource, LimsElnReadonlyPool pool, LimsElnSourceMetadata metadata, LimsTestWorkItemSnapshotService tasks, Supplier limsElnSourceActors) { return new LimsElnDatasetCatalog(dataSource, pool.dataSource(), metadata, tasks, limsElnSourceActors); } @Bean public LimsElnSourceCatalog limsElnSourceCatalog(DataSource dataSource, LimsElnDatasetCatalog datasets, Supplier limsElnSourceActors) { return new LimsElnSourceCatalog(new JdbcLimsElnSourceStore(dataSource), limsElnSourceActors, datasets); } @Bean public LimsElnDataItemManager limsElnDataItemManager(LimsElnSourceCatalog properties, LimsElnDatasetCatalog paths, LimsElnSourceMetadata metadata) { return new LimsElnDataItemManager(properties, paths, metadata); } @Bean public LimsElnPreviewSampleCatalog limsElnPreviewSampleCatalog(LimsElnReadonlyPool pool, Supplier limsElnSourceActors) { return new LimsElnPreviewSampleCatalog(pool.dataSource(), limsElnSourceActors); } @Bean public LimsElnReadonlyResolver limsElnReadonlyResolver(LimsElnSourceCatalog catalog, LimsElnReadonlyPool pool, LimsTestWorkItemSnapshotService tasks, Supplier limsElnSourceActors) { return new LimsElnReadonlyResolver(catalog, pool.dataSource(), tasks, limsElnSourceActors); } }