private String parseFieldType()

in doc-architect/doc-architect-core/src/main/java/com/docarchitect/core/scanner/impl/schema/AvroSchemaScanner.java [312:350]


    private String parseFieldType(JsonNode typeNode) {
        if (typeNode.isTextual()) {
            return typeNode.asText();
        }

        if (typeNode.isArray()) {
            // Union type - extract non-null type
            for (JsonNode unionType : typeNode) {
                String typeName = unionType.isTextual() ? unionType.asText() : TYPE_COMPLEX;
                if (!TYPE_NULL.equals(typeName)) {
                    return typeName;
                }
            }
            return TYPE_NULL;
        }

        if (typeNode.isObject()) {
            if (typeNode.has(FIELD_TYPE)) {
                String type = typeNode.get(FIELD_TYPE).asText();

                // Handle complex types
                return switch (type) {
                    case TYPE_ARRAY -> typeNode.has(FIELD_ITEMS) ?
                        TYPE_ARRAY + "<" + parseFieldType(typeNode.get(FIELD_ITEMS)) + ">" : TYPE_ARRAY;
                    case TYPE_MAP -> typeNode.has(FIELD_VALUES) ?
                        TYPE_MAP + "<" + parseFieldType(typeNode.get(FIELD_VALUES)) + ">" : TYPE_MAP;
                    case TYPE_RECORD -> typeNode.has(FIELD_NAME) ?
                        typeNode.get(FIELD_NAME).asText() : TYPE_RECORD;
                    case TYPE_ENUM -> typeNode.has(FIELD_NAME) ?
                        typeNode.get(FIELD_NAME).asText() : TYPE_ENUM;
                    case TYPE_FIXED -> typeNode.has(FIELD_NAME) ?
                        typeNode.get(FIELD_NAME).asText() : TYPE_FIXED;
                    default -> type;
                };
            }
        }

        return TYPE_UNKNOWN;
    }