/// <inheritdoc/> protected override void SetResponses(OpenApiOperation operation) { operation.Responses = new OpenApiResponses { { Constants.StatusCode201, new OpenApiResponse { Description = "Created navigation property.", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = new OpenApiSchema { Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = NavigationProperty.ToEntityType().FullName() } } } } } } } }; operation.Responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse()); base.SetResponses(operation); }
/// <inheritdoc/> protected override void SetRequestBody(OpenApiOperation operation) { operation.RequestBody = new OpenApiRequestBody { Required = true, Description = "New navigation property", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = new OpenApiSchema { Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = NavigationProperty.ToEntityType().FullName() } } } } } }; base.SetRequestBody(operation); }
/// <summary> /// Gets the EDM type for this segment. /// </summary> /// <param name="previousEdmType">The EDM type of the previous path segment.</param> /// <returns> /// The EDM type for this segment. /// </returns> public override IEdmType GetEdmType(IEdmType previousEdmType) { if (NavigationProperty != null) { return(NavigationProperty.Partner.Multiplicity() == EdmMultiplicity.Many ? (IEdmType)NavigationProperty.ToEntityType().GetCollection() : (IEdmType)NavigationProperty.ToEntityType()); } return(null); }
/// <inheritdoc/> protected override void Initialize(ODataContext context, ODataPath path) { base.Initialize(context, path); ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment; NavigationSource = navigationSourceSegment.NavigationSource; LastSegmentIsKeySegment = path.LastSegment.Kind == ODataSegmentKind.Key; LastSegmentIsRefSegment = path.LastSegment.Kind == ODataSegmentKind.Ref; NavigationProperty = path.OfType <ODataNavigationPropertySegment>().Last().NavigationProperty; _entityType = NavigationProperty.ToEntityType(); }
private OpenApiSchema GetOpenApiSchema() { if (Context.Settings.EnableDerivedTypesReferencesForRequestBody) { return(EdmModelHelper.GetDerivedTypesReferenceSchema(NavigationProperty.ToEntityType(), Context.Model)); } return(new OpenApiSchema { UnresolvedReference = true, Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = NavigationProperty.ToEntityType().FullName() } }); }
/// <inheritdoc/> protected override void SetResponses(OpenApiOperation operation) { OpenApiSchema schema = null; if (Context.Settings.EnableDerivedTypesReferencesForResponses) { schema = EdmModelHelper.GetDerivedTypesReferenceSchema(NavigationProperty.ToEntityType(), Context.Model); } if (schema == null) { schema = new OpenApiSchema { UnresolvedReference = true, Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = NavigationProperty.ToEntityType().FullName() } }; } operation.Responses = new OpenApiResponses { { Context.Settings.UseSuccessStatusCodeRange?Constants.StatusCodeClass2XX : Constants.StatusCode201, new OpenApiResponse { Description = "Created navigation property.", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = schema } } } } } }; operation.AddErrorResponses(Context.Settings, false); base.SetResponses(operation); }
/// <inheritdoc/> protected override void SetTags(OpenApiOperation operation) { IList <string> items = new List <string> { NavigationSource.Name }; foreach (var segment in Path.Segments.Skip(1)) { ODataNavigationPropertySegment npSegment = segment as ODataNavigationPropertySegment; if (npSegment != null) { if (npSegment.NavigationProperty == NavigationProperty) { items.Add(NavigationProperty.ToEntityType().Name); break; } else { if (items.Count >= Context.Settings.TagDepth - 1) { items.Add(npSegment.NavigationProperty.ToEntityType().Name); break; } else { items.Add(npSegment.NavigationProperty.Name); } } } } string name = string.Join(".", items); OpenApiTag tag = new OpenApiTag { Name = name }; tag.Extensions.Add(Constants.xMsTocType, new OpenApiString("page")); operation.Tags.Add(tag); Context.AppendTag(tag); base.SetTags(operation); }
/// <inheritdoc/> protected override void SetRequestBody(OpenApiOperation operation) { OpenApiSchema schema = null; if (Context.Settings.EnableDerivedTypesReferencesForRequestBody) { schema = EdmModelHelper.GetDerivedTypesReferenceSchema(NavigationProperty.ToEntityType(), Context.Model); } if (schema == null) { schema = new OpenApiSchema { UnresolvedReference = true, Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = NavigationProperty.ToEntityType().FullName() } }; } operation.RequestBody = new OpenApiRequestBody { Required = true, Description = "New navigation property", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = schema } } } }; base.SetRequestBody(operation); }
/// <inheritdoc/> protected override void SetResponses(OpenApiOperation operation) { OpenApiSchema schema = null; if (Context.Settings.EnableDerivedTypesReferencesForResponses) { schema = EdmModelHelper.GetDerivedTypesReferenceSchema(NavigationProperty.ToEntityType(), Context.Model); } if (schema == null) { schema = new OpenApiSchema { Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = NavigationProperty.ToEntityType().FullName() } }; } if (!LastSegmentIsKeySegment && NavigationProperty.TargetMultiplicity() == EdmMultiplicity.Many) { var properties = new Dictionary <string, OpenApiSchema> { { "value", new OpenApiSchema { Type = "array", Items = schema } } }; if (Context.Settings.EnablePagination) { properties.Add( "@odata.nextLink", new OpenApiSchema { Type = "string" }); } operation.Responses = new OpenApiResponses { { Constants.StatusCode200, new OpenApiResponse { Description = "Retrieved navigation property", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = new OpenApiSchema { Title = "Collection of " + NavigationProperty.ToEntityType().Name, Type = "object", Properties = properties } } } } } } }; } else { IDictionary <string, OpenApiLink> links = null; if (Context.Settings.ShowLinks) { string operationId = GetOperationId(); links = Context.CreateLinks(entityType: NavigationProperty.ToEntityType(), entityName: NavigationProperty.Name, entityKind: NavigationProperty.PropertyKind.ToString(), parameters: operation.Parameters, navPropOperationId: operationId); } operation.Responses = new OpenApiResponses { { Constants.StatusCode200, new OpenApiResponse { Description = "Retrieved navigation property", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = schema } } }, Links = links } } }; } operation.Responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse()); base.SetResponses(operation); }
/// <inheritdoc/> protected override void SetResponses(OpenApiOperation operation) { if (!LastSegmentIsKeySegment && NavigationProperty.TargetMultiplicity() == EdmMultiplicity.Many) { operation.Responses = new OpenApiResponses { { Constants.StatusCode200, new OpenApiResponse { Description = "Retrieved navigation property", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = new OpenApiSchema { Title = "Collection of " + NavigationProperty.ToEntityType().Name, Type = "object", Properties = new Dictionary <string, OpenApiSchema> { { "value", new OpenApiSchema { Type = "array", Items = new OpenApiSchema { Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = NavigationProperty.ToEntityType().FullName() } } } } } } } } } } } }; } else { operation.Responses = new OpenApiResponses { { Constants.StatusCode200, new OpenApiResponse { Description = "Retrieved navigation property", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = new OpenApiSchema { Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = NavigationProperty.ToEntityType().FullName() } } } } } } } }; } operation.Responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse()); base.SetResponses(operation); }
/// <inheritdoc/> protected override void SetResponses(OpenApiOperation operation) { OpenApiSchema schema = new OpenApiSchema { // $ref returns string for the Uri? Type = "string" }; if (NavigationProperty.TargetMultiplicity() == EdmMultiplicity.Many) { var properties = new Dictionary <string, OpenApiSchema> { { "value", new OpenApiSchema { Type = "array", Items = schema } } }; if (Context.Settings.EnablePagination) { properties.Add( "@odata.nextLink", new OpenApiSchema { Type = "string" }); } operation.Responses = new OpenApiResponses { { Constants.StatusCode200, new OpenApiResponse { Description = "Retrieved navigation property links", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = new OpenApiSchema { Title = "Collection of links of " + NavigationProperty.ToEntityType().Name, Type = "object", Properties = properties } } } }, Links = Context.CreateLinks(NavigationProperty.ToEntityType(), NavigationProperty.Name) } } }; } else { operation.Responses = new OpenApiResponses { { Constants.StatusCode200, new OpenApiResponse { Description = "Retrieved navigation property link", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = schema } } } } } }; } operation.Responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse()); base.SetResponses(operation); }
/// <inheritdoc/> protected override void SetResponses(OpenApiOperation operation) { IDictionary <string, OpenApiLink> links = null; if (Context.Settings.ShowLinks) { string operationId = GetOperationId(); links = Context.CreateLinks(entityType: NavigationProperty.ToEntityType(), entityName: NavigationProperty.Name, entityKind: NavigationProperty.PropertyKind.ToString(), path: Path, parameters: PathParameters, navPropOperationId: operationId); } if (!LastSegmentIsKeySegment && NavigationProperty.TargetMultiplicity() == EdmMultiplicity.Many) { operation.Responses = new OpenApiResponses { { Context.Settings.UseSuccessStatusCodeRange?Constants.StatusCodeClass2XX : Constants.StatusCode200, new OpenApiResponse { UnresolvedReference = true, Reference = new OpenApiReference() { Type = ReferenceType.Response, Id = $"{NavigationProperty.ToEntityType().FullName()}{Constants.CollectionSchemaSuffix}" }, Links = links } } }; } else { OpenApiSchema schema = null; var entityType = NavigationProperty.ToEntityType(); if (Context.Settings.EnableDerivedTypesReferencesForResponses) { schema = EdmModelHelper.GetDerivedTypesReferenceSchema(entityType, Context.Model); } if (schema == null) { schema = new OpenApiSchema { UnresolvedReference = true, Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = entityType.FullName() } }; } operation.Responses = new OpenApiResponses { { Context.Settings.UseSuccessStatusCodeRange?Constants.StatusCodeClass2XX : Constants.StatusCode200, new OpenApiResponse { Description = "Retrieved navigation property", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = schema } } }, Links = links } } }; } operation.AddErrorResponses(Context.Settings, false); base.SetResponses(operation); }
/// <inheritdoc/> protected override void SetResponses(OpenApiOperation operation) { if (NavigationProperty.TargetMultiplicity() == EdmMultiplicity.Many) { operation.Responses = new OpenApiResponses { { Context.Settings.UseSuccessStatusCodeRange?Constants.StatusCodeClass2XX : Constants.StatusCode200, new OpenApiResponse { UnresolvedReference = true, Reference = new OpenApiReference { Type = ReferenceType.Response, Id = $"String{Constants.CollectionSchemaSuffix}" }, } } }; } else { OpenApiSchema schema = new() { // $ref returns string for the Uri? Type = "string" }; IDictionary <string, OpenApiLink> links = null; if (Context.Settings.ShowLinks) { string operationId = GetOperationId(); links = Context.CreateLinks(entityType: NavigationProperty.ToEntityType(), entityName: NavigationProperty.Name, entityKind: NavigationProperty.PropertyKind.ToString(), parameters: PathParameters, path: Path, navPropOperationId: operationId); } operation.Responses = new OpenApiResponses { { Context.Settings.UseSuccessStatusCodeRange?Constants.StatusCodeClass2XX : Constants.StatusCode200, new OpenApiResponse { Description = "Retrieved navigation property link", Content = new Dictionary <string, OpenApiMediaType> { { Constants.ApplicationJsonMediaType, new OpenApiMediaType { Schema = schema } } }, Links = links } } }; } operation.AddErrorResponses(Context.Settings, false); base.SetResponses(operation); }