public void GenerateOperationIds()
{
// TODO: Improve this method
// Generate missing IDs
foreach (var operation in Operations.Where(o => string.IsNullOrEmpty(o.Operation.OperationId)))
operation.Operation.OperationId = GetOperationNameFromPath(operation);
// Find non-unique operation IDs
foreach (var group in Operations.GroupBy(o => o.Operation.OperationId))
{
var operations = group.ToList();
if (group.Count() > 1)
{
// Append "All" if possible
var arrayResponseOperation = operations.FirstOrDefault(
a => a.Operation.Responses.Any(r => HttpUtilities.IsSuccessStatusCode(r.Key) && r.Value.Schema != null && r.Value.Schema.Type == JsonObjectType.Array));
if (arrayResponseOperation != null)
{
var name = arrayResponseOperation.Operation.OperationId + "All";
if (Operations.All(o => o.Operation.OperationId != name))
{
arrayResponseOperation.Operation.OperationId = name;
operations.Remove(arrayResponseOperation);
GenerateOperationIds();
return;
}
}
// Add numbers
var i = 2;
foreach (var operation in operations.Skip(1))
operation.Operation.OperationId += i++;
GenerateOperationIds();
return;
}
}
}