<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.metaobjects</groupId>
        <artifactId>metaobjects</artifactId>
        <version>7.4.1</version>
    </parent>

    <artifactId>metaobjects-codegen-spring</artifactId>
    <packaging>jar</packaging>

    <name>MetaObjects :: Codegen :: Spring</name>
    <description>Spring Web MVC codegen target — emits @RestController per entity + DTO records + Repository interface (FR-008 §2.1). Targets Spring Boot 3.x / Java 21. Hand-rolled string emission; no Spring runtime dependency.</description>

    <dependencies>
        <!-- production -->
        <dependency>
            <groupId>com.metaobjects</groupId>
            <artifactId>metaobjects-codegen-base</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.metaobjects</groupId>
            <artifactId>metaobjects-metadata</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!-- compile scope: SpringRenderHelperGenerator runs the mustache-VO drift
             gate (Verify.check + FilesystemProvider + PayloadField) at CODEGEN time,
             so codegen-spring genuinely compiles against the render engine. -->
        <dependency>
            <groupId>com.metaobjects</groupId>
            <artifactId>metaobjects-render</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- test -->
        <dependency>
            <groupId>com.metaobjects</groupId>
            <artifactId>metaobjects-metadata</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.metaobjects</groupId>
            <artifactId>metaobjects-codegen-base</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>


        <!-- compile-and-run test: the runtime-delegating extractLenient(MetaDataLoader, String)
             overload delegates to com.metaobjects.object.extract.MetaObjectExtractor (om).
             om transitively brings render + metadata onto the test classpath. -->
        <dependency>
            <groupId>com.metaobjects</groupId>
            <artifactId>metaobjects-om</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- compile-and-run test: the generated <Entity>TraceHelper references the Slice-1
             OMDB recorder seam (com.metaobjects.manager.db.ai.LlmCallRecorder / LlmCallInput /
             LlmTraceRowBuilder) by FQN string. omdb brings om + render + metadata transitively
             onto the test classpath so the emitted helper compiles. -->
        <dependency>
            <groupId>com.metaobjects</groupId>
            <artifactId>metaobjects-omdb</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- compile-and-run test: generated parser imports Jackson ObjectMapper -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- validation-conformance runner: validate the generated DTO via a jakarta Validator.
             Hibernate Validator brings jakarta.validation-api transitively; expressly is the
             jakarta EL implementation the constraint-message interpolator needs at runtime. -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>8.0.1.Final</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.expressly</groupId>
            <artifactId>expressly</artifactId>
            <version>5.0.0</version>
            <scope>test</scope>
        </dependency>

        <!-- Inherited from parent POM: SLF4J, JUnit 4, Logback -->
    </dependencies>

    <build>
        <plugins>
        </plugins>
    </build>
</project>
