@using System.Linq @using ApiGenerator @using ApiGenerator.Domain.Code.HighLevel.Requests @using ApiGenerator.Generator @inherits global::ApiGenerator.CodeTemplatePage @{ var names = Model.CsharpNames; var type = names.GenericOrNonGenericDescriptorName; var concreteInterface = names.GenericOrNonGenericInterfaceName; var baseInterface = names.GenericOrNonGenericInterfacePreference; var apiLookup = $"ApiUrlsLookups.{Model.CsharpNames.Namespace}{Model.CsharpNames.MethodName}"; } ///Descriptor for @names.MethodName@(Raw(Model.OfficialDocumentationLink.IsNullOrEmpty() ? "" : " " + Model.OfficialDocumentationLink + "")) public partial class @Raw(type) @(Raw(string.Format(" : RequestDescriptorBase<{0},{1}, {2}>, {2}", type,names.ParametersName, concreteInterface))) { internal override ApiUrls ApiUrls => @apiLookup; @foreach (var c in Model.Constructors) { @(Raw(CodeGenerator.Constructor(c))) } // values part of the url path @foreach (var part in Model.Parts) { @(Raw(part.HighLevelTypeName)) @(Raw(baseInterface)).@(part.InterfaceName) => Self.RouteValues.Get@(Raw(string.Format("<{0}>",part.HighLevelTypeName)))("@(part.Name)"); } @foreach (var c in Model.GetFluentRouteSetters()) { @(Raw(c.XmlDoc)) @(Raw(c.Code)) } // Request parameters @foreach (var param in Model.Params) { var original = param.QueryStringKey; //skip parameters already part of the path portion of the url if (Model.Parts.Any(p=>p.Name == original)) { continue; } //we prefer this parameter to be explictly implemented on the request body if (param.RenderPartial && (Model.HasBody)) { continue; } var t = @param.TypeHighLevel; var tSuffix = (t == "bool" || t == "bool?") ? " = true" : ""; var typed = !string.IsNullOrEmpty(names.GenericsDeclaredOnDescriptor); var g = typed ? names.GenericsDeclaredOnDescriptor.Replace("<", "").Replace(">", "") : "T"; var desc = param.DescriptionHighLevel.ToList(); await IncludeAsync("HighLevel/Descriptors/XmlDocs.cshtml", desc); if(!string.IsNullOrWhiteSpace(param.Obsolete)) { [Obsolete("Scheduled to be removed in 8.0, @param.Obsolete")] } public @Raw(type) @(param.ClsName)(@param.DescriptorArgumentType @param.ClsArgumentName@tSuffix) => Qs("@original", @(param.ClsArgumentName)); if (param.IsFieldsParam) { ///@param.Description public @Raw(type) @param.ClsName@(Raw(typed ? "" : ""))(params @Raw("Expression>[]") fields) @Raw(typed ? "" : "where " + g + " : class") => Qs("@original", fields?@Raw(".Select(e=>(Field)e)")); } else if (param.IsFieldParam) { ///@param.Description public @Raw(type) @param.ClsName@(Raw(typed ? "" : ""))(@Raw("Expression>") field) @Raw(typed ? "" : "where " + g + " : class") => Qs("@original", (Field)field); } } @if (names.DescriptorNotFoundInCodebase) { [Obsolete("Unmapped, blacklist this API in CodeConfiguration.cs or implement @names.DescriptorName and @names.RequestName in a file called @(names.RequestName).cs in OSC's codebase", true)] public bool IsUnmapped => true; public bool UseIsUnmapped => IsUnmapped; } }