ModuleApiDescriptionModel.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using Abp.Collections.Extensions;
  5. namespace Abp.Web.Api.Modeling
  6. {
  7. [Serializable]
  8. public class ModuleApiDescriptionModel
  9. {
  10. public string Name { get; set; }
  11. public IDictionary<string, ControllerApiDescriptionModel> Controllers { get; }
  12. private ModuleApiDescriptionModel()
  13. {
  14. }
  15. public ModuleApiDescriptionModel(string name)
  16. {
  17. Name = name;
  18. Controllers = new Dictionary<string, ControllerApiDescriptionModel>();
  19. }
  20. public ControllerApiDescriptionModel AddController(ControllerApiDescriptionModel controller)
  21. {
  22. if (Controllers.ContainsKey(controller.Name))
  23. {
  24. throw new AbpException($"There is already a controller with name: {controller.Name} in module: {Name}");
  25. }
  26. return Controllers[controller.Name] = controller;
  27. }
  28. public ControllerApiDescriptionModel GetOrAddController(string name)
  29. {
  30. return Controllers.GetOrAdd(name, () => new ControllerApiDescriptionModel(name));
  31. }
  32. public ModuleApiDescriptionModel CreateSubModel(string[] controllers, string[] actions)
  33. {
  34. var subModel = new ModuleApiDescriptionModel(Name);
  35. foreach (var controller in Controllers.Values)
  36. {
  37. if (controllers == null || controllers.Contains(controller.Name))
  38. {
  39. subModel.AddController(controller.CreateSubModel(actions));
  40. }
  41. }
  42. return subModel;
  43. }
  44. }
  45. }