2727using Intent . Utils ;
2828using OperationModel = Intent . Modelers . Domain . Api . OperationModel ;
2929using OperationModelExtensions = Intent . Modelers . Domain . Api . OperationModelExtensions ;
30+ using ParameterModel = Intent . Modelers . Domain . Api . ParameterModel ;
3031
3132namespace Intent . Modules . EntityFrameworkCore . Repositories . Templates ;
3233
@@ -624,47 +625,75 @@ internal record StoredProcedureModelPair
624625 {
625626 public StoredProcedureModelPair ( StoredProcedureModel storedProcedureModel )
626627 {
627- StoredProcedureModel = storedProcedureModel ;
628+ StoredProcedureName = storedProcedureModel . Name ;
629+ ReturnType = storedProcedureModel . ReturnType ;
630+ Parameters = storedProcedureModel . Parameters . Select ( x => new StoredProcedureModelParameter ( x ) ) . ToArray ( ) ;
628631 DbContextInstance = new DbContextInstance ( storedProcedureModel . InternalElement . Package . AsDomainPackageModel ( ) ) ;
629632 }
633+
634+ public StoredProcedureModelPair ( OperationModel operationModel )
635+ {
636+ StoredProcedureName = operationModel . Name ;
637+ ReturnType = operationModel . ReturnType ;
638+ Parameters = operationModel . Parameters . Select ( x => new StoredProcedureModelParameter ( x ) ) . ToArray ( ) ;
639+ DbContextInstance = new DbContextInstance ( operationModel . InternalElement . Package . AsDomainPackageModel ( ) ) ;
640+ }
641+
642+ public string StoredProcedureName { get ; }
643+ public ITypeReference ? ReturnType { get ; }
644+ public IReadOnlyList < StoredProcedureModelParameter > Parameters { get ; }
630645
631- public StoredProcedureModel StoredProcedureModel { get ; }
632646 public DbContextInstance DbContextInstance { get ; }
633647 }
634648
649+ internal record StoredProcedureModelParameter
650+ {
651+ public StoredProcedureModelParameter ( StoredProcedureParameterModel paramModel )
652+ {
653+ ParameterName = paramModel . Name ;
654+ ParameterType = paramModel . TypeReference ;
655+ }
656+
657+ public StoredProcedureModelParameter ( ParameterModel paramModel )
658+ {
659+ ParameterName = paramModel . Name ;
660+ ParameterType = paramModel . TypeReference ;
661+ }
662+
663+ public string ParameterName { get ; }
664+ public ITypeReference ? ParameterType { get ; }
665+ }
666+
635667 public static IReadOnlyCollection < StoredProcedureModelPair > GetStoredProcedureModels ( this RepositoryModel repositoryModel )
636668 {
637669 return repositoryModel . InternalElement . ChildElements
638670 . SelectMany ( childElement =>
639671 {
640672 var storedProcedureModel = childElement . AsStoredProcedureModel ( ) ;
641- if ( storedProcedureModel != null )
673+ if ( storedProcedureModel is not null )
642674 {
643675 return [ new StoredProcedureModelPair ( storedProcedureModel ) ] ;
644676 }
645677
646678 var operationModel = OperationModelExtensions . AsOperationModel ( childElement ) ;
647- if ( operationModel != null )
679+ var invokedStoredProcedures = operationModel . StoredProcedureInvocationTargets ( )
680+ . Select ( x => x . TypeReference ? . Element ? . AsStoredProcedureModel ( ) )
681+ . Where ( x => x != null )
682+ . Cast < StoredProcedureModel > ( )
683+ . Select ( x => new StoredProcedureModelPair ( x ) )
684+ . ToArray ( ) ;
685+
686+ if ( invokedStoredProcedures . Length > 0 )
648687 {
649- var invokedStoredProcedures = operationModel . StoredProcedureInvocationTargets ( )
650- . Select ( x => x . TypeReference ? . Element ? . AsStoredProcedureModel ( ) )
651- . Where ( x => x != null )
652- . Cast < StoredProcedureModel > ( )
653- . Select ( x => new StoredProcedureModelPair ( x ) )
654- . ToArray ( ) ;
655-
656- if ( invokedStoredProcedures . Length > 0 )
657- {
658- return invokedStoredProcedures ;
659- }
688+ return invokedStoredProcedures ;
689+ }
660690
661- if ( operationModel . HasStereotype ( "Stored Procedure" ) )
662- {
663- return [ new StoredProcedureModelPair ( new StoredProcedureModel ( operationModel . InternalElement , OperationModel . SpecializationType ) ) ] ;
664- }
691+ if ( operationModel . HasStereotype ( "Stored Procedure" ) )
692+ {
693+ return [ new StoredProcedureModelPair ( operationModel ) ] ;
665694 }
666695
667- return [ ] ;
696+ return Array . Empty < StoredProcedureModelPair > ( ) ;
668697 } )
669698 . ToArray ( ) ;
670699 }
@@ -678,8 +707,8 @@ public static IReadOnlyCollection<DataContractModelPair> GetEntityTypeConfigurat
678707
679708 return [ .. repositoryModels
680709 . SelectMany ( GetStoredProcedureModels )
681- . Select ( x => x . StoredProcedureModel . TypeReference ? . Element . AsDataContractModel ( ) is not null
682- ? new DataContractModelPair ( x . StoredProcedureModel . TypeReference . Element . AsDataContractModel ( ) , x . DbContextInstance )
710+ . Select ( x => x . ReturnType ? . Element . AsDataContractModel ( ) is not null
711+ ? new DataContractModelPair ( x . ReturnType . Element . AsDataContractModel ( ) , x . DbContextInstance )
683712 : null )
684713 . Where ( x => x != null )
685714 . Cast < DataContractModelPair > ( )
0 commit comments