buildNeo4jCode function
Implementation
CodeBuilder buildNeo4jCode(GraphQLNeo4Model model) {
var code = CodeBuilder();
model.model.addAllModels(
code,
inputGenerator: (c, name, fields, isAbstract) {
final typeName =
name.replaceAll("CreateInput", "").replaceAll("UpdateInput", "");
c.extend = refer('BaseGraphInput');
c.methods.add(Method((f) => f
..overridden()
..returns = refer('${typeName}Meta')
..name = 'meta'
..type = MethodType.getter
..body = Code('return ${typeName}Meta.instance;')));
},
extraGenerator: (c, name, fields, isAbstract) {
c.extend = refer('BaseSunnyEntity');
c.methods.add(Method((f) => f
..name = 'metadata'
..static = true
..type = MethodType.getter
..returns = refer('${name}Meta')
..body = refer('${name}Meta').property('instance').code));
c.methods.add(Method((f) => f
..name = 'ref'
..static = true
..type = MethodType.getter
..returns = refer('MSchemaRef')
..body =
refer('${name}Meta').property('instance').property('mtype').code));
c.methods.add(Method((f) => f
..overridden()
..returns = refer('${name}Meta')
..name = 'meta'
..type = MethodType.getter
..body = Code('return ${name}Meta.instance;')));
},
);
model.entities.forEach((objName, entity) {
if (entity.ops.isEmpty) return;
code += Class((c) => c
..name = '${objName.capitalize()}Api'
..extend = refer('${objName.capitalize()}ApiBase')
..constructors.add(Constructor((c) => c
..requiredParameters.addAll([
Parameter((p) => p
..name = "_client"
..toThis = true),
Parameter((p) => p
..name = "resolver"
..toThis = true),
Parameter((p) => p
..name = "serializer"
..toThis = true),
Parameter((p) => p
..name = "eventService"
..toThis = true),
])))
..fields.addAll([
Field((f) => f
..annotations.add(refer('override'))
..name = 'serializer'
..type = refer('GraphSerializer')
..modifier = FieldModifier.final$),
Field((f) => f
..name = 'resolver'
..annotations.add(refer('override'))
..type = refer('Neo4JGraphQueryResolver')
..modifier = FieldModifier.final$),
Field((f) => f
..name = '_client'
..type = refer('GraphQLClientGetter')
..modifier = FieldModifier.final$),
Field((f) => f
..name = 'eventService'
..type = refer('RecordEventService')
..modifier = FieldModifier.final$),
])
..methods.addAll([
Method((f) => f
..overridden()
..name = 'meta'
..type = MethodType.getter
..returns = refer('${objName.capitalize()}Meta')
..body =
refer('${objName.capitalize()}Meta').property('instance').code),
Method((m) => m
..annotations.add(refer('override'))
..name = 'client'
..returns = refer('GraphQLClient')
..body = Code('return this._client();')),
// for (var op in entity.ops) ...buildOperationMethod(model.model, entity, subqueries, op),
for (var sub in entity.fields.lazy)
if (sub.relationship?.propsType == null)
Method(
(m) => m
..name = 'load${sub.name.capitalize()}ForRecord'
..returns = refer(sub.nullableDartTypeName).future()
..requiredParameters.add(IdParameter)
..body = Code(
'return this.loadRelated${sub.isList ? 'List' : ''}(id: id, relatedType: "${sub.typeNode.toRawType()}", isNullable: ${!sub.isNonNull}, field: "${sub.name}", isJoinType: false,);'),
)
else ...[
// Method(
// (m) => m
// ..name = 'load${sub.relationship?.propsType}ForRecord'
// ..returns = refer(sub.isList ? 'List<${sub.relationship?.joinTypeName}>' : sub.nullableDartTypeName).future()
// ..requiredParameters.add(IdParameter)
// ..body = Code(
// 'return this.loadRelated${sub.isList ? 'List' : ''}(id: id, relatedType: "${sub.relationship?.joinTypeName}", isNullable: ${!sub.isNonNull}, field: "${sub.name}Connection",);'),
// ),
Method(
(m) => m
..name = 'load${sub.name.capitalize()}ForRecord'
..returns = refer(sub.isList
? 'List<${sub.joinRecordType}>'
: sub.nullableDartTypeName)
.future()
..requiredParameters.add(IdParameter)
..body = Code(
'return this.loadRelated${sub.isList ? 'List' : ''}(id: id, relatedType: "${sub.joinRecordType}", isNullable: ${!sub.isNonNull}, field: "${sub.name}Connection", isJoinType: true,);'),
),
],
]));
});
buildSerializer(model.model, code);
buildResolver(model, code);
return code;
}