org.babyfish.jimmer.spring.cloud.MicroServiceExporterController Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jimmer-spring-boot-starter Show documentation
Show all versions of jimmer-spring-boot-starter Show documentation
A revolutionary ORM framework for both java and kotlin
package org.babyfish.jimmer.spring.cloud;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import com.fasterxml.jackson.databind.type.SimpleType;
import io.swagger.v3.oas.annotations.Hidden;
import org.babyfish.jimmer.client.ApiIgnore;
import org.babyfish.jimmer.impl.util.Classes;
import org.babyfish.jimmer.meta.ImmutableProp;
import org.babyfish.jimmer.runtime.ImmutableSpi;
import org.babyfish.jimmer.sql.JSqlClient;
import org.babyfish.jimmer.sql.ast.tuple.Tuple2;
import org.babyfish.jimmer.sql.fetcher.Fetcher;
import org.babyfish.jimmer.sql.fetcher.compiler.FetcherCompiler;
import org.babyfish.jimmer.sql.runtime.MicroServiceExporter;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
@Hidden
@ApiIgnore
@RestController
@Transactional(readOnly = true)
public class MicroServiceExporterController {
public static final String BY_IDS = "/jimmerMicroServiceBridge/byIds";
public static final String BY_ASSOCIATED_IDS = "/jimmerMicroServiceBridge/byAssociatedIds";
public static final String IDS = "ids";
public static final String PROP = "prop";
public static final String TARGET_IDS = "targetIds";
public static final String FETCHER = "fetcher";
private final MicroServiceExporter exporter;
private final ObjectMapper mapper;
public MicroServiceExporterController(JSqlClient sqlClient, ObjectMapper mapper) {
this.exporter = new MicroServiceExporter(sqlClient);
this.mapper = mapper;
}
@GetMapping(value = BY_IDS, produces = MediaType.APPLICATION_JSON_VALUE)
public List findByIds(
@RequestParam(IDS) String idArrStr,
@RequestParam(FETCHER) String fetcherStr
) throws IOException {
Fetcher> fetcher = FetcherCompiler.compile(fetcherStr);
Class> idType = fetcher.getImmutableType().getIdProp().getElementClass();
List> ids = mapper.readValue(
idArrStr,
CollectionType.construct(
List.class,
null,
null,
null,
SimpleType.constructUnsafe(Classes.boxTypeOf(idType))
)
);
return exporter.findByIds(ids, fetcher);
}
@GetMapping(value = BY_ASSOCIATED_IDS, produces = MediaType.APPLICATION_JSON_VALUE)
public List> findByAssociatedIds(
@RequestParam(PROP) String prop,
@RequestParam(TARGET_IDS) String targetIdArrStr,
@RequestParam(FETCHER) String fetcherStr
) throws Exception {
Fetcher> fetcher = FetcherCompiler.compile(fetcherStr);
ImmutableProp immutableProp = fetcher.getImmutableType().getProp(prop);
Class> targetIdType = immutableProp.getTargetType().getIdProp().getElementClass();
List> targetIds = mapper.readValue(
targetIdArrStr,
CollectionType.construct(
List.class,
null,
null,
null,
SimpleType.constructUnsafe(Classes.boxTypeOf(targetIdType))
)
);
return exporter.findByAssociatedIds(
immutableProp,
targetIds,
fetcher
);
}
}