Răsfoiți Sursa

Ran cleanup

Tim Jones 2 luni în urmă
părinte
comite
aebdfa7f0b
100 a modificat fișierele cu 2113 adăugiri și 278 ștergeri
  1. 653 24
      COMMANDS.md
  2. 655 24
      README.md
  3. 5 12
      RackPeek.Domain/Resources/Hardware/Desktops/AddDesktopUseCase.cs
  4. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Cpus/AddDesktopCpuUseCase.cs
  5. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Cpus/RemoveDesktopCpuUseCase.cs
  6. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Cpus/UpdateDesktopCpuUseCase.cs
  7. 1 3
      RackPeek.Domain/Resources/Hardware/Desktops/DeleteDesktopUseCase.cs
  8. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/DescribeDesktopUseCase.cs
  9. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Drives/AddDesktopDriveUseCase.cs
  10. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Drives/RemoveDesktopDriveUseCase.cs
  11. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Drives/UpdateDesktopDriveUseCase.cs
  12. 3 3
      RackPeek.Domain/Resources/Hardware/Desktops/GetDesktopUseCase.cs
  13. 3 3
      RackPeek.Domain/Resources/Hardware/Desktops/GetDesktopsUseCase.cs
  14. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Gpus/AddDesktopGpuUseCase.cs
  15. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Gpus/RemoveDesktopGpuUseCase.cs
  16. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Gpus/UpdateDesktopGpuUseCase.cs
  17. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Nics/AddDesktopNicUseCase.cs
  18. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Nics/RemoveDesktopNicUseCase.cs
  19. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/Nics/UpdateDesktopNicUseCase.cs
  20. 2 2
      RackPeek.Domain/Resources/Hardware/Desktops/UpdateDesktopUseCase.cs
  21. 0 1
      RackPeek.Domain/Resources/Hardware/Models/Desktop.cs
  22. 1 1
      RackPeek.Domain/Resources/Hardware/Reports/DesktopHardwareReport.cs
  23. 3 1
      RackPeek.Domain/Resources/Hardware/Reports/ServerHardwareReport.cs
  24. 0 10
      RackPeek.Domain/Resources/Hardware/Server/GetServerUseCase.cs
  25. 0 10
      RackPeek.Domain/Resources/Hardware/Server/GetServersUseCase.cs
  26. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/AddServerUseCase.cs
  27. 5 3
      RackPeek.Domain/Resources/Hardware/Servers/Cpus/AddCpuUseCase.cs
  28. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/Cpus/RemoveCpuUseCase.cs
  29. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/Cpus/UpdateCpuUseCase.cs
  30. 1 1
      RackPeek.Domain/Resources/Hardware/Servers/DeleteServerUseCase.cs
  31. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/DescribeServerUseCase.cs
  32. 5 3
      RackPeek.Domain/Resources/Hardware/Servers/Drives/AddDriveUseCase.cs
  33. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/Drives/RemoveDriveUseCase.cs
  34. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/Drives/UpdateDriveUseCase.cs
  35. 5 4
      RackPeek.Domain/Resources/Hardware/Servers/GetServerSystemTreeUseCase.cs
  36. 12 0
      RackPeek.Domain/Resources/Hardware/Servers/GetServerUseCase.cs
  37. 12 0
      RackPeek.Domain/Resources/Hardware/Servers/GetServersUseCase.cs
  38. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Gpus/AddGpuUseCase.cs
  39. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/Gpus/RemoveGpuUseCase.cs
  40. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/Gpus/UpdateGpuUseCase.cs
  41. 5 3
      RackPeek.Domain/Resources/Hardware/Servers/Nics/AddNicUseCase.cs
  42. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/Nics/RemoveNicUseCase.cs
  43. 4 2
      RackPeek.Domain/Resources/Hardware/Servers/Nics/UpdateNicUseCase.cs
  44. 2 2
      RackPeek.Domain/Resources/Hardware/Servers/UpdateServerUseCase.cs
  45. 1 3
      RackPeek.Domain/Resources/SystemResources/ISystemRepository.cs
  46. 1 1
      RackPeek.Domain/Resources/SystemResources/UseCases/DescribeSystemUseCase.cs
  47. 1 1
      RackPeek.Domain/Resources/SystemResources/UseCases/GetSystemsUseCase.cs
  48. 1 1
      RackPeek.Domain/Resources/SystemResources/UseCases/SystemReportUseCase.cs
  49. 1 0
      RackPeek.Domain/Resources/SystemResources/UseCases/UpdateSystemUseCase.cs
  50. 505 0
      RackPeek/CliBootstrap.cs
  51. 3 1
      RackPeek/Commands/AccessPoints/AccessCommands.cs
  52. 3 1
      RackPeek/Commands/AccessPoints/AccessPointAddCommand.cs
  53. 1 1
      RackPeek/Commands/AccessPoints/AccessPointGetByNameCommand.cs
  54. 6 3
      RackPeek/Commands/AccessPoints/AccessPointSetCommand.cs
  55. 0 9
      RackPeek/Commands/Desktop/DesktopCommands.cs
  56. 2 2
      RackPeek/Commands/Desktops/Cpus/DesktopCpuAddCommand.cs
  57. 6 1
      RackPeek/Commands/Desktops/Cpus/DesktopCpuAddSettings.cs
  58. 2 2
      RackPeek/Commands/Desktops/Cpus/DesktopCpuRemoveCommand.cs
  59. 4 1
      RackPeek/Commands/Desktops/Cpus/DesktopCpuRemoveSettings.cs
  60. 2 2
      RackPeek/Commands/Desktops/Cpus/DesktopCpuSetCommand.cs
  61. 7 1
      RackPeek/Commands/Desktops/Cpus/DesktopCpuSetSettings.cs
  62. 2 2
      RackPeek/Commands/Desktops/DesktopAddCommand.cs
  63. 8 0
      RackPeek/Commands/Desktops/DesktopCommands.cs
  64. 2 2
      RackPeek/Commands/Desktops/DesktopDeleteCommand.cs
  65. 3 3
      RackPeek/Commands/Desktops/DesktopDescribeCommand.cs
  66. 2 2
      RackPeek/Commands/Desktops/DesktopGetByNameCommand.cs
  67. 2 4
      RackPeek/Commands/Desktops/DesktopGetCommand.cs
  68. 3 4
      RackPeek/Commands/Desktops/DesktopSetCommand.cs
  69. 3 4
      RackPeek/Commands/Desktops/Drive/DesktopDriveAddCommand.cs
  70. 5 1
      RackPeek/Commands/Desktops/Drive/DesktopDriveAddSettings.cs
  71. 2 2
      RackPeek/Commands/Desktops/Drive/DesktopDriveRemoveCommand.cs
  72. 4 1
      RackPeek/Commands/Desktops/Drive/DesktopDriveRemoveSettings.cs
  73. 3 4
      RackPeek/Commands/Desktops/Drive/DesktopDriveSetCommand.cs
  74. 6 1
      RackPeek/Commands/Desktops/Drive/DesktopDriveSetSettings.cs
  75. 3 3
      RackPeek/Commands/Desktops/Gpus/DesktopGpuAddCommand.cs
  76. 5 1
      RackPeek/Commands/Desktops/Gpus/DesktopGpuAddSettings.cs
  77. 2 2
      RackPeek/Commands/Desktops/Gpus/DesktopGpuRemoveCommand.cs
  78. 4 1
      RackPeek/Commands/Desktops/Gpus/DesktopGpuRemoveSettings.cs
  79. 3 3
      RackPeek/Commands/Desktops/Gpus/DesktopGpuSetCommand.cs
  80. 6 1
      RackPeek/Commands/Desktops/Gpus/DesktopGpuSetSettings.cs
  81. 2 2
      RackPeek/Commands/Desktops/Nics/DesktopNicAddCommand.cs
  82. 6 1
      RackPeek/Commands/Desktops/Nics/DesktopNicAddSettings.cs
  83. 2 2
      RackPeek/Commands/Desktops/Nics/DesktopNicRemoveCommand.cs
  84. 4 1
      RackPeek/Commands/Desktops/Nics/DesktopNicRemoveSettings.cs
  85. 2 2
      RackPeek/Commands/Desktops/Nics/DesktopNicSetCommand.cs
  86. 7 1
      RackPeek/Commands/Desktops/Nics/DesktopNicSetSettings.cs
  87. 2 2
      RackPeek/Commands/Servers/Cpus/ServerCpuAddCommand.cs
  88. 2 2
      RackPeek/Commands/Servers/Cpus/ServerCpuRemoveCommand.cs
  89. 2 2
      RackPeek/Commands/Servers/Cpus/ServerCpuSetCommand.cs
  90. 2 2
      RackPeek/Commands/Servers/Drives/ServerDriveAddCommand.cs
  91. 2 2
      RackPeek/Commands/Servers/Drives/ServerDriveRemoveCommand.cs
  92. 2 2
      RackPeek/Commands/Servers/Drives/ServerDriveUpdateCommand.cs
  93. 4 6
      RackPeek/Commands/Servers/Gpus/AddGpuUseCaseCommand.cs
  94. 3 4
      RackPeek/Commands/Servers/Gpus/RemoveGpuUseCaseCommand.cs
  95. 5 8
      RackPeek/Commands/Servers/Gpus/UpdateGpuUseCaseCommand.cs
  96. 2 2
      RackPeek/Commands/Servers/Nics/ServerNicAddCommand.cs
  97. 2 2
      RackPeek/Commands/Servers/Nics/ServerNicRemoveCommand.cs
  98. 2 2
      RackPeek/Commands/Servers/Nics/ServerNicUpdateCommand.cs
  99. 2 2
      RackPeek/Commands/Servers/ServerAddCommand.cs
  100. 1 1
      RackPeek/Commands/Servers/ServerCommands.cs

+ 653 - 24
COMMANDS.md

@@ -1,5 +1,92 @@
 # CLI Commands
 
+## Command Tree
+- [CLI Commands](#cli-commands)
+  - [Command Tree](#command-tree)
+  - [`rpk`](#rpk)
+  - [`rpk switches`](#rpk-switches)
+  - [`rpk switches summary`](#rpk-switches-summary)
+  - [`rpk switches add`](#rpk-switches-add)
+  - [`rpk switches list`](#rpk-switches-list)
+  - [`rpk switches get`](#rpk-switches-get)
+  - [`rpk switches describe`](#rpk-switches-describe)
+  - [`rpk switches set`](#rpk-switches-set)
+  - [`rpk switches del`](#rpk-switches-del)
+  - [`rpk systems`](#rpk-systems)
+  - [`rpk systems summary`](#rpk-systems-summary)
+  - [`rpk systems add`](#rpk-systems-add)
+  - [`rpk systems list`](#rpk-systems-list)
+  - [`rpk systems get`](#rpk-systems-get)
+  - [`rpk systems describe`](#rpk-systems-describe)
+  - [`rpk systems set`](#rpk-systems-set)
+  - [`rpk systems del`](#rpk-systems-del)
+  - [`rpk accesspoints`](#rpk-accesspoints)
+  - [`rpk accesspoints summary`](#rpk-accesspoints-summary)
+  - [`rpk accesspoints add`](#rpk-accesspoints-add)
+  - [`rpk accesspoints list`](#rpk-accesspoints-list)
+  - [`rpk accesspoints get`](#rpk-accesspoints-get)
+  - [`rpk accesspoints describe`](#rpk-accesspoints-describe)
+  - [`rpk accesspoints set`](#rpk-accesspoints-set)
+  - [`rpk accesspoints del`](#rpk-accesspoints-del)
+  - [`rpk ups`](#rpk-ups)
+  - [`rpk ups summary`](#rpk-ups-summary)
+  - [`rpk ups add`](#rpk-ups-add)
+  - [`rpk ups list`](#rpk-ups-list)
+  - [`rpk ups get`](#rpk-ups-get)
+  - [`rpk ups describe`](#rpk-ups-describe)
+  - [`rpk ups set`](#rpk-ups-set)
+  - [`rpk ups del`](#rpk-ups-del)
+  - [`rpk desktops`](#rpk-desktops)
+  - [`rpk desktops add`](#rpk-desktops-add)
+  - [`rpk desktops list`](#rpk-desktops-list)
+  - [`rpk desktops get`](#rpk-desktops-get)
+  - [`rpk desktops describe`](#rpk-desktops-describe)
+  - [`rpk desktops set`](#rpk-desktops-set)
+  - [`rpk desktops del`](#rpk-desktops-del)
+  - [`rpk desktops cpu`](#rpk-desktops-cpu)
+  - [`rpk desktops cpu add`](#rpk-desktops-cpu-add)
+  - [`rpk desktops cpu set`](#rpk-desktops-cpu-set)
+  - [`rpk desktops cpu del`](#rpk-desktops-cpu-del)
+  - [`rpk desktops drive`](#rpk-desktops-drive)
+  - [`rpk desktops drive add`](#rpk-desktops-drive-add)
+  - [`rpk desktops drive set`](#rpk-desktops-drive-set)
+  - [`rpk desktops drive del`](#rpk-desktops-drive-del)
+  - [`rpk desktops gpu`](#rpk-desktops-gpu)
+  - [`rpk desktops gpu add`](#rpk-desktops-gpu-add)
+  - [`rpk desktops gpu set`](#rpk-desktops-gpu-set)
+  - [`rpk desktops gpu del`](#rpk-desktops-gpu-del)
+  - [`rpk desktops nic`](#rpk-desktops-nic)
+  - [`rpk desktops nic add`](#rpk-desktops-nic-add)
+  - [`rpk desktops nic set`](#rpk-desktops-nic-set)
+  - [`rpk desktops nic del`](#rpk-desktops-nic-del)
+  - [`rpk ap`](#rpk-ap)
+  - [`rpk servers`](#rpk-servers)
+  - [`rpk servers summary`](#rpk-servers-summary)
+  - [`rpk servers add`](#rpk-servers-add)
+  - [`rpk servers get`](#rpk-servers-get)
+  - [`rpk servers describe`](#rpk-servers-describe)
+  - [`rpk servers set`](#rpk-servers-set)
+  - [`rpk servers del`](#rpk-servers-del)
+  - [`rpk servers tree`](#rpk-servers-tree)
+  - [`rpk servers cpu`](#rpk-servers-cpu)
+  - [`rpk servers cpu add`](#rpk-servers-cpu-add)
+  - [`rpk servers cpu set`](#rpk-servers-cpu-set)
+  - [`rpk servers cpu del`](#rpk-servers-cpu-del)
+  - [`rpk servers drive`](#rpk-servers-drive)
+  - [`rpk servers drive add`](#rpk-servers-drive-add)
+  - [`rpk servers drive set`](#rpk-servers-drive-set)
+  - [`rpk servers drive del`](#rpk-servers-drive-del)
+  - [`rpk servers gpu`](#rpk-servers-gpu)
+  - [`rpk servers gpu add`](#rpk-servers-gpu-add)
+  - [`rpk servers gpu set`](#rpk-servers-gpu-set)
+  - [`rpk servers gpu del`](#rpk-servers-gpu-del)
+  - [`rpk servers nic`](#rpk-servers-nic)
+  - [`rpk servers nic add`](#rpk-servers-nic-add)
+  - [`rpk servers nic set`](#rpk-servers-nic-set)
+  - [`rpk servers nic del`](#rpk-servers-nic-del)
+
+---
+
 ## `rpk`
 ```
 USAGE:
@@ -9,12 +96,15 @@ OPTIONS:
     -h, --help    Prints help information
 
 COMMANDS:
-    switches    Manage switches                  
-    systems     Manage systems                   
-    ap          Show access point hardware report
-    desktops    Show desktop hardware report     
-    ups         Show UPS hardware report         
-    servers     Manage servers                   
+    switches        Manage switches                  
+    systems         Manage systems                   
+    accesspoints    Manage access points             
+    ups             Manage UPS units                 
+    desktops                                         
+    ap              Show access point hardware report
+    desktops        Show desktop hardware report     
+    ups             Show UPS hardware report         
+    servers         Manage servers                   
 ```
 
 ## `rpk switches`
@@ -265,25 +355,123 @@ OPTIONS:
     -h, --help    Prints help information
 ```
 
-## `rpk ap`
+## `rpk accesspoints`
+```
+DESCRIPTION:
+Manage access points
+
+USAGE:
+    rpk accesspoints [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    summary            Show access point hardware report              
+    add <name>         Add a new access point                         
+    list               List access points                             
+    get <name>         Get an access point by name                    
+    describe <name>    Show detailed information about an access point
+    set <name>         Update access point properties                 
+    del <name>         Delete an access point                         
+```
+
+## `rpk accesspoints summary`
 ```
 DESCRIPTION:
 Show access point hardware report
 
 USAGE:
-    rpk ap [OPTIONS]
+    rpk accesspoints summary [OPTIONS]
 
 OPTIONS:
     -h, --help    Prints help information
 ```
 
-## `rpk desktops`
+## `rpk accesspoints add`
+```
+DESCRIPTION:
+Add a new access point
+
+USAGE:
+    rpk accesspoints add <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>    The access point name
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk accesspoints list`
 ```
 DESCRIPTION:
-Show desktop hardware report
+List access points
 
 USAGE:
-    rpk desktops [OPTIONS]
+    rpk accesspoints list [OPTIONS]
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk accesspoints get`
+```
+DESCRIPTION:
+Get an access point by name
+
+USAGE:
+    rpk accesspoints get <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>    The access point name
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk accesspoints describe`
+```
+DESCRIPTION:
+Show detailed information about an access point
+
+USAGE:
+    rpk accesspoints describe <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>    The access point name
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk accesspoints set`
+```
+DESCRIPTION:
+Update access point properties
+
+USAGE:
+    rpk accesspoints set <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help     Prints help information            
+        --model    The access point model name        
+        --speed    The speed of the access point in Gb
+```
+
+## `rpk accesspoints del`
+```
+DESCRIPTION:
+Delete an access point
+
+USAGE:
+    rpk accesspoints del <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>    The access point name
 
 OPTIONS:
     -h, --help    Prints help information
@@ -292,10 +480,451 @@ OPTIONS:
 ## `rpk ups`
 ```
 DESCRIPTION:
+Manage UPS units
+
+USAGE:
+    rpk ups [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    summary            Show UPS hardware report             
+    add <name>         Add a new UPS                        
+    list               List UPS units                       
+    get <name>         Get a UPS by name                    
+    describe <name>    Show detailed information about a UPS
+    set <name>         Update UPS properties                
+    del <name>         Delete a UPS                         
+```
+
+## `rpk ups summary`
+```
+DESCRIPTION:
 Show UPS hardware report
 
 USAGE:
-    rpk ups [OPTIONS]
+    rpk ups summary [OPTIONS]
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups add`
+```
+DESCRIPTION:
+Add a new UPS
+
+USAGE:
+    rpk ups add <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups list`
+```
+DESCRIPTION:
+List UPS units
+
+USAGE:
+    rpk ups list [OPTIONS]
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups get`
+```
+DESCRIPTION:
+Get a UPS by name
+
+USAGE:
+    rpk ups get <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups describe`
+```
+DESCRIPTION:
+Show detailed information about a UPS
+
+USAGE:
+    rpk ups describe <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups set`
+```
+DESCRIPTION:
+Update UPS properties
+
+USAGE:
+    rpk ups set <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help     Prints help information
+        --model                           
+        --va                              
+```
+
+## `rpk ups del`
+```
+DESCRIPTION:
+Delete a UPS
+
+USAGE:
+    rpk ups del <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops`
+```
+USAGE:
+    rpk desktops [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <name>          
+    list                
+    get <name>          
+    describe <name>     
+    set <name>          
+    del <name>          
+    cpu                 
+    drive               
+    gpu                 
+    nic                 
+```
+
+## `rpk desktops add`
+```
+USAGE:
+    rpk desktops add <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops list`
+```
+USAGE:
+    rpk desktops list [OPTIONS]
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops get`
+```
+USAGE:
+    rpk desktops get <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops describe`
+```
+USAGE:
+    rpk desktops describe <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops set`
+```
+USAGE:
+    rpk desktops set <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help     Prints help information
+        --model                           
+```
+
+## `rpk desktops del`
+```
+USAGE:
+    rpk desktops del <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops cpu`
+```
+USAGE:
+    rpk desktops cpu [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <desktop>             
+    set <desktop> <index>     
+    del <desktop> <index>     
+```
+
+## `rpk desktops cpu add`
+```
+USAGE:
+    rpk desktops cpu add <desktop> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name
+
+OPTIONS:
+    -h, --help       Prints help information  
+        --model      The model name           
+        --cores      The number of cpu cores  
+        --threads    The number of cpu threads
+```
+
+## `rpk desktops cpu set`
+```
+USAGE:
+    rpk desktops cpu set <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name            
+    <index>      The index of the desktop cpu
+
+OPTIONS:
+    -h, --help       Prints help information  
+        --model      The cpu model            
+        --cores      The number of cpu cores  
+        --threads    The number of cpu threads
+```
+
+## `rpk desktops cpu del`
+```
+USAGE:
+    rpk desktops cpu del <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The name of the desktop               
+    <index>      The index of the desktop cpu to remove
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops drive`
+```
+USAGE:
+    rpk desktops drive [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <desktop>             
+    set <desktop> <index>     
+    del <desktop> <index>     
+```
+
+## `rpk desktops drive add`
+```
+USAGE:
+    rpk desktops drive add <desktop> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The name of the desktop
+
+OPTIONS:
+    -h, --help    Prints help information     
+        --type    The drive type e.g hdd / ssd
+        --size    The drive capacity in Gb    
+```
+
+## `rpk desktops drive set`
+```
+USAGE:
+    rpk desktops drive set <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name         
+    <index>      The drive index to update
+
+OPTIONS:
+    -h, --help    Prints help information     
+        --type    The drive type e.g hdd / ssd
+        --size    The drive capacity in Gb    
+```
+
+## `rpk desktops drive del`
+```
+USAGE:
+    rpk desktops drive del <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The name of the desktop         
+    <index>      The index of the drive to remove
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops gpu`
+```
+USAGE:
+    rpk desktops gpu [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <desktop>             
+    set <desktop> <index>     
+    del <desktop> <index>     
+```
+
+## `rpk desktops gpu add`
+```
+USAGE:
+    rpk desktops gpu add <desktop> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The name of the desktop
+
+OPTIONS:
+    -h, --help     Prints help information     
+        --model    The Gpu model               
+        --vram     The amount of gpu vram in Gb
+```
+
+## `rpk desktops gpu set`
+```
+USAGE:
+    rpk desktops gpu set <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name              
+    <index>      The index of the gpu to update
+
+OPTIONS:
+    -h, --help     Prints help information     
+        --model    The gpu model name          
+        --vram     The amount of gpu vram in Gb
+```
+
+## `rpk desktops gpu del`
+```
+USAGE:
+    rpk desktops gpu del <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name              
+    <index>      The index of the Gpu to remove
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops nic`
+```
+USAGE:
+    rpk desktops nic [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <desktop>             
+    set <desktop> <index>     
+    del <desktop> <index>     
+```
+
+## `rpk desktops nic add`
+```
+USAGE:
+    rpk desktops nic add <desktop> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name
+
+OPTIONS:
+    -h, --help     Prints help information          
+        --type     The nic port type e.g rj45 / sfp+
+        --speed    The port speed                   
+        --ports    The number of ports              
+```
+
+## `rpk desktops nic set`
+```
+USAGE:
+    rpk desktops nic set <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name              
+    <index>      The index of the nic to remove
+
+OPTIONS:
+    -h, --help     Prints help information          
+        --type     The nic port type e.g rj45 / sfp+
+        --speed    The speed of the nic in Gb/s     
+        --ports    The number of ports              
+```
+
+## `rpk desktops nic del`
+```
+USAGE:
+    rpk desktops nic del <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name              
+    <index>      The index of the nic to remove
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ap`
+```
+DESCRIPTION:
+Show access point hardware report
+
+USAGE:
+    rpk ap [OPTIONS]
 
 OPTIONS:
     -h, --help    Prints help information
@@ -313,23 +942,23 @@ OPTIONS:
     -h, --help    Prints help information
 
 COMMANDS:
-    summary            Show server hardware report              
-    add <name>         Add a new server                         
-    get <name>         List servers or get a server by name     
-    describe <name>    Show detailed information about a server 
-    set <name>         Update server properties                 
-    del <name>         Delete a server                          
-    tree <name>        Displays a dependency tree for the server
-    cpu                Manage server CPUs                       
-    drive              Manage server drives                     
-    gpu                Manage server GPUs                       
-    nic                Manage server NICs                       
+    summary            Show a summarized hardware report for all servers
+    add <name>         Add a new server                                 
+    get <name>         List servers or get a server by name             
+    describe <name>    Show detailed information about a server         
+    set <name>         Update server properties                         
+    del <name>         Delete a server                                  
+    tree <name>        Displays a dependency tree for the server        
+    cpu                Manage server CPUs                               
+    drive              Manage server drives                             
+    gpu                Manage server GPUs                               
+    nic                Manage server NICs                               
 ```
 
 ## `rpk servers summary`
 ```
 DESCRIPTION:
-Show server hardware report
+Show a summarized hardware report for all servers
 
 USAGE:
     rpk servers summary [OPTIONS]

+ 655 - 24
README.md

@@ -3,6 +3,95 @@
 RackPeek is a lightweight CLI tool for managing and documenting your IT infrastructure and home lab.
 Track servers, switches, routers, desktops, access points, UPS systems, and more — including software systems, services, and networks — all from the command line.
 It’s designed to help you inventory, configure, and audit your environment in a consistent, reusable way.
+# CLI Commands
+
+## Command Tree
+
+- [RackPeek](#rackpeek)
+- [CLI Commands](#cli-commands)
+  - [Command Tree](#command-tree)
+  - [`rpk`](#rpk)
+  - [`rpk switches`](#rpk-switches)
+  - [`rpk switches summary`](#rpk-switches-summary)
+  - [`rpk switches add`](#rpk-switches-add)
+  - [`rpk switches list`](#rpk-switches-list)
+  - [`rpk switches get`](#rpk-switches-get)
+  - [`rpk switches describe`](#rpk-switches-describe)
+  - [`rpk switches set`](#rpk-switches-set)
+  - [`rpk switches del`](#rpk-switches-del)
+  - [`rpk systems`](#rpk-systems)
+  - [`rpk systems summary`](#rpk-systems-summary)
+  - [`rpk systems add`](#rpk-systems-add)
+  - [`rpk systems list`](#rpk-systems-list)
+  - [`rpk systems get`](#rpk-systems-get)
+  - [`rpk systems describe`](#rpk-systems-describe)
+  - [`rpk systems set`](#rpk-systems-set)
+  - [`rpk systems del`](#rpk-systems-del)
+  - [`rpk accesspoints`](#rpk-accesspoints)
+  - [`rpk accesspoints summary`](#rpk-accesspoints-summary)
+  - [`rpk accesspoints add`](#rpk-accesspoints-add)
+  - [`rpk accesspoints list`](#rpk-accesspoints-list)
+  - [`rpk accesspoints get`](#rpk-accesspoints-get)
+  - [`rpk accesspoints describe`](#rpk-accesspoints-describe)
+  - [`rpk accesspoints set`](#rpk-accesspoints-set)
+  - [`rpk accesspoints del`](#rpk-accesspoints-del)
+  - [`rpk ups`](#rpk-ups)
+  - [`rpk ups summary`](#rpk-ups-summary)
+  - [`rpk ups add`](#rpk-ups-add)
+  - [`rpk ups list`](#rpk-ups-list)
+  - [`rpk ups get`](#rpk-ups-get)
+  - [`rpk ups describe`](#rpk-ups-describe)
+  - [`rpk ups set`](#rpk-ups-set)
+  - [`rpk ups del`](#rpk-ups-del)
+  - [`rpk desktops`](#rpk-desktops)
+  - [`rpk desktops add`](#rpk-desktops-add)
+  - [`rpk desktops list`](#rpk-desktops-list)
+  - [`rpk desktops get`](#rpk-desktops-get)
+  - [`rpk desktops describe`](#rpk-desktops-describe)
+  - [`rpk desktops set`](#rpk-desktops-set)
+  - [`rpk desktops del`](#rpk-desktops-del)
+  - [`rpk desktops cpu`](#rpk-desktops-cpu)
+  - [`rpk desktops cpu add`](#rpk-desktops-cpu-add)
+  - [`rpk desktops cpu set`](#rpk-desktops-cpu-set)
+  - [`rpk desktops cpu del`](#rpk-desktops-cpu-del)
+  - [`rpk desktops drive`](#rpk-desktops-drive)
+  - [`rpk desktops drive add`](#rpk-desktops-drive-add)
+  - [`rpk desktops drive set`](#rpk-desktops-drive-set)
+  - [`rpk desktops drive del`](#rpk-desktops-drive-del)
+  - [`rpk desktops gpu`](#rpk-desktops-gpu)
+  - [`rpk desktops gpu add`](#rpk-desktops-gpu-add)
+  - [`rpk desktops gpu set`](#rpk-desktops-gpu-set)
+  - [`rpk desktops gpu del`](#rpk-desktops-gpu-del)
+  - [`rpk desktops nic`](#rpk-desktops-nic)
+  - [`rpk desktops nic add`](#rpk-desktops-nic-add)
+  - [`rpk desktops nic set`](#rpk-desktops-nic-set)
+  - [`rpk desktops nic del`](#rpk-desktops-nic-del)
+  - [`rpk ap`](#rpk-ap)
+  - [`rpk servers`](#rpk-servers)
+  - [`rpk servers summary`](#rpk-servers-summary)
+  - [`rpk servers add`](#rpk-servers-add)
+  - [`rpk servers get`](#rpk-servers-get)
+  - [`rpk servers describe`](#rpk-servers-describe)
+  - [`rpk servers set`](#rpk-servers-set)
+  - [`rpk servers del`](#rpk-servers-del)
+  - [`rpk servers tree`](#rpk-servers-tree)
+  - [`rpk servers cpu`](#rpk-servers-cpu)
+  - [`rpk servers cpu add`](#rpk-servers-cpu-add)
+  - [`rpk servers cpu set`](#rpk-servers-cpu-set)
+  - [`rpk servers cpu del`](#rpk-servers-cpu-del)
+  - [`rpk servers drive`](#rpk-servers-drive)
+  - [`rpk servers drive add`](#rpk-servers-drive-add)
+  - [`rpk servers drive set`](#rpk-servers-drive-set)
+  - [`rpk servers drive del`](#rpk-servers-drive-del)
+  - [`rpk servers gpu`](#rpk-servers-gpu)
+  - [`rpk servers gpu add`](#rpk-servers-gpu-add)
+  - [`rpk servers gpu set`](#rpk-servers-gpu-set)
+  - [`rpk servers gpu del`](#rpk-servers-gpu-del)
+  - [`rpk servers nic`](#rpk-servers-nic)
+  - [`rpk servers nic add`](#rpk-servers-nic-add)
+  - [`rpk servers nic set`](#rpk-servers-nic-set)
+  - [`rpk servers nic del`](#rpk-servers-nic-del)
+
 
 ## `rpk`
 ```
@@ -13,12 +102,15 @@ OPTIONS:
     -h, --help    Prints help information
 
 COMMANDS:
-    switches    Manage switches                  
-    systems     Manage systems                   
-    ap          Show access point hardware report
-    desktops    Show desktop hardware report     
-    ups         Show UPS hardware report         
-    servers     Manage servers                   
+    switches        Manage switches                  
+    systems         Manage systems                   
+    accesspoints    Manage access points             
+    ups             Manage UPS units                 
+    desktops                                         
+    ap              Show access point hardware report
+    desktops        Show desktop hardware report     
+    ups             Show UPS hardware report         
+    servers         Manage servers                   
 ```
 
 ## `rpk switches`
@@ -269,25 +361,123 @@ OPTIONS:
     -h, --help    Prints help information
 ```
 
-## `rpk ap`
+## `rpk accesspoints`
+```
+DESCRIPTION:
+Manage access points
+
+USAGE:
+    rpk accesspoints [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    summary            Show access point hardware report              
+    add <name>         Add a new access point                         
+    list               List access points                             
+    get <name>         Get an access point by name                    
+    describe <name>    Show detailed information about an access point
+    set <name>         Update access point properties                 
+    del <name>         Delete an access point                         
+```
+
+## `rpk accesspoints summary`
 ```
 DESCRIPTION:
 Show access point hardware report
 
 USAGE:
-    rpk ap [OPTIONS]
+    rpk accesspoints summary [OPTIONS]
 
 OPTIONS:
     -h, --help    Prints help information
 ```
 
-## `rpk desktops`
+## `rpk accesspoints add`
+```
+DESCRIPTION:
+Add a new access point
+
+USAGE:
+    rpk accesspoints add <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>    The access point name
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk accesspoints list`
 ```
 DESCRIPTION:
-Show desktop hardware report
+List access points
 
 USAGE:
-    rpk desktops [OPTIONS]
+    rpk accesspoints list [OPTIONS]
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk accesspoints get`
+```
+DESCRIPTION:
+Get an access point by name
+
+USAGE:
+    rpk accesspoints get <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>    The access point name
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk accesspoints describe`
+```
+DESCRIPTION:
+Show detailed information about an access point
+
+USAGE:
+    rpk accesspoints describe <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>    The access point name
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk accesspoints set`
+```
+DESCRIPTION:
+Update access point properties
+
+USAGE:
+    rpk accesspoints set <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help     Prints help information            
+        --model    The access point model name        
+        --speed    The speed of the access point in Gb
+```
+
+## `rpk accesspoints del`
+```
+DESCRIPTION:
+Delete an access point
+
+USAGE:
+    rpk accesspoints del <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>    The access point name
 
 OPTIONS:
     -h, --help    Prints help information
@@ -296,10 +486,451 @@ OPTIONS:
 ## `rpk ups`
 ```
 DESCRIPTION:
+Manage UPS units
+
+USAGE:
+    rpk ups [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    summary            Show UPS hardware report             
+    add <name>         Add a new UPS                        
+    list               List UPS units                       
+    get <name>         Get a UPS by name                    
+    describe <name>    Show detailed information about a UPS
+    set <name>         Update UPS properties                
+    del <name>         Delete a UPS                         
+```
+
+## `rpk ups summary`
+```
+DESCRIPTION:
 Show UPS hardware report
 
 USAGE:
-    rpk ups [OPTIONS]
+    rpk ups summary [OPTIONS]
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups add`
+```
+DESCRIPTION:
+Add a new UPS
+
+USAGE:
+    rpk ups add <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups list`
+```
+DESCRIPTION:
+List UPS units
+
+USAGE:
+    rpk ups list [OPTIONS]
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups get`
+```
+DESCRIPTION:
+Get a UPS by name
+
+USAGE:
+    rpk ups get <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups describe`
+```
+DESCRIPTION:
+Show detailed information about a UPS
+
+USAGE:
+    rpk ups describe <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ups set`
+```
+DESCRIPTION:
+Update UPS properties
+
+USAGE:
+    rpk ups set <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help     Prints help information
+        --model                           
+        --va                              
+```
+
+## `rpk ups del`
+```
+DESCRIPTION:
+Delete a UPS
+
+USAGE:
+    rpk ups del <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops`
+```
+USAGE:
+    rpk desktops [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <name>          
+    list                
+    get <name>          
+    describe <name>     
+    set <name>          
+    del <name>          
+    cpu                 
+    drive               
+    gpu                 
+    nic                 
+```
+
+## `rpk desktops add`
+```
+USAGE:
+    rpk desktops add <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops list`
+```
+USAGE:
+    rpk desktops list [OPTIONS]
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops get`
+```
+USAGE:
+    rpk desktops get <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops describe`
+```
+USAGE:
+    rpk desktops describe <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops set`
+```
+USAGE:
+    rpk desktops set <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help     Prints help information
+        --model                           
+```
+
+## `rpk desktops del`
+```
+USAGE:
+    rpk desktops del <name> [OPTIONS]
+
+ARGUMENTS:
+    <name>     
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops cpu`
+```
+USAGE:
+    rpk desktops cpu [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <desktop>             
+    set <desktop> <index>     
+    del <desktop> <index>     
+```
+
+## `rpk desktops cpu add`
+```
+USAGE:
+    rpk desktops cpu add <desktop> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name
+
+OPTIONS:
+    -h, --help       Prints help information  
+        --model      The model name           
+        --cores      The number of cpu cores  
+        --threads    The number of cpu threads
+```
+
+## `rpk desktops cpu set`
+```
+USAGE:
+    rpk desktops cpu set <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name            
+    <index>      The index of the desktop cpu
+
+OPTIONS:
+    -h, --help       Prints help information  
+        --model      The cpu model            
+        --cores      The number of cpu cores  
+        --threads    The number of cpu threads
+```
+
+## `rpk desktops cpu del`
+```
+USAGE:
+    rpk desktops cpu del <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The name of the desktop               
+    <index>      The index of the desktop cpu to remove
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops drive`
+```
+USAGE:
+    rpk desktops drive [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <desktop>             
+    set <desktop> <index>     
+    del <desktop> <index>     
+```
+
+## `rpk desktops drive add`
+```
+USAGE:
+    rpk desktops drive add <desktop> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The name of the desktop
+
+OPTIONS:
+    -h, --help    Prints help information     
+        --type    The drive type e.g hdd / ssd
+        --size    The drive capacity in Gb    
+```
+
+## `rpk desktops drive set`
+```
+USAGE:
+    rpk desktops drive set <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name         
+    <index>      The drive index to update
+
+OPTIONS:
+    -h, --help    Prints help information     
+        --type    The drive type e.g hdd / ssd
+        --size    The drive capacity in Gb    
+```
+
+## `rpk desktops drive del`
+```
+USAGE:
+    rpk desktops drive del <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The name of the desktop         
+    <index>      The index of the drive to remove
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops gpu`
+```
+USAGE:
+    rpk desktops gpu [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <desktop>             
+    set <desktop> <index>     
+    del <desktop> <index>     
+```
+
+## `rpk desktops gpu add`
+```
+USAGE:
+    rpk desktops gpu add <desktop> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The name of the desktop
+
+OPTIONS:
+    -h, --help     Prints help information     
+        --model    The Gpu model               
+        --vram     The amount of gpu vram in Gb
+```
+
+## `rpk desktops gpu set`
+```
+USAGE:
+    rpk desktops gpu set <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name              
+    <index>      The index of the gpu to update
+
+OPTIONS:
+    -h, --help     Prints help information     
+        --model    The gpu model name          
+        --vram     The amount of gpu vram in Gb
+```
+
+## `rpk desktops gpu del`
+```
+USAGE:
+    rpk desktops gpu del <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name              
+    <index>      The index of the Gpu to remove
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk desktops nic`
+```
+USAGE:
+    rpk desktops nic [OPTIONS] <COMMAND>
+
+OPTIONS:
+    -h, --help    Prints help information
+
+COMMANDS:
+    add <desktop>             
+    set <desktop> <index>     
+    del <desktop> <index>     
+```
+
+## `rpk desktops nic add`
+```
+USAGE:
+    rpk desktops nic add <desktop> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name
+
+OPTIONS:
+    -h, --help     Prints help information          
+        --type     The nic port type e.g rj45 / sfp+
+        --speed    The port speed                   
+        --ports    The number of ports              
+```
+
+## `rpk desktops nic set`
+```
+USAGE:
+    rpk desktops nic set <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name              
+    <index>      The index of the nic to remove
+
+OPTIONS:
+    -h, --help     Prints help information          
+        --type     The nic port type e.g rj45 / sfp+
+        --speed    The speed of the nic in Gb/s     
+        --ports    The number of ports              
+```
+
+## `rpk desktops nic del`
+```
+USAGE:
+    rpk desktops nic del <desktop> <index> [OPTIONS]
+
+ARGUMENTS:
+    <desktop>    The desktop name              
+    <index>      The index of the nic to remove
+
+OPTIONS:
+    -h, --help    Prints help information
+```
+
+## `rpk ap`
+```
+DESCRIPTION:
+Show access point hardware report
+
+USAGE:
+    rpk ap [OPTIONS]
 
 OPTIONS:
     -h, --help    Prints help information
@@ -317,23 +948,23 @@ OPTIONS:
     -h, --help    Prints help information
 
 COMMANDS:
-    summary            Show server hardware report              
-    add <name>         Add a new server                         
-    get <name>         List servers or get a server by name     
-    describe <name>    Show detailed information about a server 
-    set <name>         Update server properties                 
-    del <name>         Delete a server                          
-    tree <name>        Displays a dependency tree for the server
-    cpu                Manage server CPUs                       
-    drive              Manage server drives                     
-    gpu                Manage server GPUs                       
-    nic                Manage server NICs                       
+    summary            Show a summarized hardware report for all servers
+    add <name>         Add a new server                                 
+    get <name>         List servers or get a server by name             
+    describe <name>    Show detailed information about a server         
+    set <name>         Update server properties                         
+    del <name>         Delete a server                                  
+    tree <name>        Displays a dependency tree for the server        
+    cpu                Manage server CPUs                               
+    drive              Manage server drives                             
+    gpu                Manage server GPUs                               
+    nic                Manage server NICs                               
 ```
 
 ## `rpk servers summary`
 ```
 DESCRIPTION:
-Show server hardware report
+Show a summarized hardware report for all servers
 
 USAGE:
     rpk servers summary [OPTIONS]

+ 5 - 12
RackPeek.Domain/Resources/Hardware/Desktop/AddDesktopUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/AddDesktopUseCase.cs

@@ -1,23 +1,16 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops;
 
-public class AddDesktopUseCase
+public class AddDesktopUseCase(IHardwareRepository repository)
 {
-    private readonly IHardwareRepository _repository;
-
-    public AddDesktopUseCase(IHardwareRepository repository)
-    {
-        _repository = repository;
-    }
-
     public async Task ExecuteAsync(string name)
     {
-        var existing = await _repository.GetByNameAsync(name);
+        var existing = await repository.GetByNameAsync(name);
         if (existing != null)
             throw new InvalidOperationException($"Desktop '{name}' already exists.");
 
-        var desktop = new Models.Desktop
+        var desktop = new Desktop
         {
             Name = name,
             Cpus = new List<Cpu>(),
@@ -27,6 +20,6 @@ public class AddDesktopUseCase
             Ram = null
         };
 
-        await _repository.AddAsync(desktop);
+        await repository.AddAsync(desktop);
     }
 }

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Cpu/AddDesktopCpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Cpus/AddDesktopCpuUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 
 public class AddDesktopCpuUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, Cpu cpu)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         desktop.Cpus ??= new List<Cpu>();

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Cpu/RemoveDesktopCpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Cpus/RemoveDesktopCpuUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 
 public class RemoveDesktopCpuUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, int index)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         if (desktop.Cpus == null || index < 0 || index >= desktop.Cpus.Count)

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Cpu/UpdateDesktopCpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Cpus/UpdateDesktopCpuUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 
 public class UpdateDesktopCpuUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, int index, Cpu updated)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         if (desktop.Cpus == null || index < 0 || index >= desktop.Cpus.Count)

+ 1 - 3
RackPeek.Domain/Resources/Hardware/Desktop/DeleteDesktopUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/DeleteDesktopUseCase.cs

@@ -1,6 +1,4 @@
-using RackPeek.Domain.Resources.Hardware.Models;
-
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops;
 
 public class DeleteDesktopUseCase
 {

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/DescribeDesktopUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/DescribeDesktopUseCase.cs

@@ -1,6 +1,6 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops;
 
 public record DesktopDescription(
     string Name,
@@ -16,7 +16,7 @@ public class DescribeDesktopUseCase(IHardwareRepository repository)
 {
     public async Task<DesktopDescription?> ExecuteAsync(string name)
     {
-        var desktop = await repository.GetByNameAsync(name) as Models.Desktop;
+        var desktop = await repository.GetByNameAsync(name) as Desktop;
         if (desktop == null)
             return null;
 

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Drive/AddDesktopDriveUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Drives/AddDesktopDriveUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 
 public class AddDesktopDriveUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, Drive drive)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         desktop.Drives ??= new List<Drive>();

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Drive/RemoveDesktopDriveUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Drives/RemoveDesktopDriveUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 
 public class RemoveDesktopDriveUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, int index)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         if (desktop.Drives == null || index < 0 || index >= desktop.Drives.Count)

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Drive/UpdateDesktopDriveUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Drives/UpdateDesktopDriveUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 
 public class UpdateDesktopDriveUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, int index, Drive updated)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         if (desktop.Drives == null || index < 0 || index >= desktop.Drives.Count)

+ 3 - 3
RackPeek.Domain/Resources/Hardware/Desktop/GetDesktopUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/GetDesktopUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops;
 
 public class GetDesktopUseCase(IHardwareRepository repository)
 {
-    public async Task<Models.Desktop?> ExecuteAsync(string name)
+    public async Task<Desktop?> ExecuteAsync(string name)
     {
         var hardware = await repository.GetByNameAsync(name);
-        return hardware as Models.Desktop;
+        return hardware as Desktop;
     }
 }

+ 3 - 3
RackPeek.Domain/Resources/Hardware/Desktop/GetDesktopsUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/GetDesktopsUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops;
 
 public class GetDesktopsUseCase(IHardwareRepository repository)
 {
-    public async Task<IReadOnlyList<Models.Desktop>> ExecuteAsync()
+    public async Task<IReadOnlyList<Desktop>> ExecuteAsync()
     {
         var hardware = await repository.GetAllAsync();
-        return hardware.OfType<Models.Desktop>().ToList();
+        return hardware.OfType<Desktop>().ToList();
     }
 }

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Gpu/AddDesktopGpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Gpus/AddDesktopGpuUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 
 public class AddDesktopGpuUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, Gpu gpu)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         desktop.Gpus ??= new List<Gpu>();

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Gpu/RemoveDesktopGpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Gpus/RemoveDesktopGpuUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 
 public class RemoveDesktopGpuUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, int index)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         if (desktop.Gpus == null || index < 0 || index >= desktop.Gpus.Count)

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Gpu/UpdateDesktopGpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Gpus/UpdateDesktopGpuUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 
 public class UpdateDesktopGpuUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, int index, Gpu updated)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         if (desktop.Gpus == null || index < 0 || index >= desktop.Gpus.Count)

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Nic/AddDesktopNicUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Nics/AddDesktopNicUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 
 public class AddDesktopNicUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, Nic nic)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         desktop.Nics ??= new List<Nic>();

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Nic/RemoveDesktopNicUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Nics/RemoveDesktopNicUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 
 public class RemoveDesktopNicUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, int index)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         if (desktop.Nics == null || index < 0 || index >= desktop.Nics.Count)

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/Nic/UpdateDesktopNicUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/Nics/UpdateDesktopNicUseCase.cs

@@ -1,12 +1,12 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 
 public class UpdateDesktopNicUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string desktopName, int index, Nic updated)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Models.Desktop
+        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
                       ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
 
         if (desktop.Nics == null || index < 0 || index >= desktop.Nics.Count)

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Desktop/UpdateDesktopUseCase.cs → RackPeek.Domain/Resources/Hardware/Desktops/UpdateDesktopUseCase.cs

@@ -1,6 +1,6 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Desktop;
+namespace RackPeek.Domain.Resources.Hardware.Desktops;
 
 public class UpdateDesktopUseCase(IHardwareRepository repository)
 {
@@ -9,7 +9,7 @@ public class UpdateDesktopUseCase(IHardwareRepository repository)
         string? model = null
     )
     {
-        var desktop = await repository.GetByNameAsync(name) as Models.Desktop;
+        var desktop = await repository.GetByNameAsync(name) as Desktop;
         if (desktop == null)
             throw new InvalidOperationException($"Desktop '{name}' not found.");
 

+ 0 - 1
RackPeek.Domain/Resources/Hardware/Models/Desktop.cs

@@ -8,5 +8,4 @@ public class Desktop : Hardware
     public List<Nic>? Nics { get; set; }
     public List<Gpu>? Gpus { get; set; }
     public string Model { get; set; }
-
 }

+ 1 - 1
RackPeek.Domain/Resources/Hardware/Reports/DesktopHardwareReport.cs

@@ -24,7 +24,7 @@ public class DesktopHardwareReportUseCase(IHardwareRepository repository)
     public async Task<DesktopHardwareReport> ExecuteAsync()
     {
         var hardware = await repository.GetAllAsync();
-        var desktops = hardware.OfType<Models.Desktop>();
+        var desktops = hardware.OfType<Desktop>();
 
         var rows = desktops.Select(desktop =>
         {

+ 3 - 1
RackPeek.Domain/Resources/Hardware/Reports/ServerHardwareReport.cs

@@ -1,3 +1,5 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
 namespace RackPeek.Domain.Resources.Hardware.Reports;
 
 public record ServerHardwareReport(
@@ -26,7 +28,7 @@ public class ServerHardwareReportUseCase(IHardwareRepository repository)
     public async Task<ServerHardwareReport> ExecuteAsync()
     {
         var hardware = await repository.GetAllAsync();
-        var servers = hardware.OfType<Models.Server>();
+        var servers = hardware.OfType<Server>();
 
         var rows = servers.Select(server =>
         {

+ 0 - 10
RackPeek.Domain/Resources/Hardware/Server/GetServerUseCase.cs

@@ -1,10 +0,0 @@
-namespace RackPeek.Domain.Resources.Hardware.Server;
-
-public class GetServerUseCase(IHardwareRepository repository)
-{
-    public async Task<Models.Server?> ExecuteAsync(string name)
-    {
-        var hardware = await repository.GetByNameAsync(name);
-        return hardware as Models.Server;
-    }
-}

+ 0 - 10
RackPeek.Domain/Resources/Hardware/Server/GetServersUseCase.cs

@@ -1,10 +0,0 @@
-namespace RackPeek.Domain.Resources.Hardware.Server;
-
-public class GetServersUseCase(IHardwareRepository repository)
-{
-    public async Task<IReadOnlyList<Models.Server>> ExecuteAsync()
-    {
-        var hardware = await repository.GetAllAsync();
-        return hardware.OfType<Models.Server>().ToList();
-    }
-}

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/AddServerUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/AddServerUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers;
 
 public class AddServerUseCase(IHardwareRepository repository)
 {
@@ -9,7 +11,7 @@ public class AddServerUseCase(IHardwareRepository repository)
         if (existing != null)
             throw new InvalidOperationException($"Server '{name}' already exists.");
 
-        var server = new Models.Server
+        var server = new Server
         {
             Name = name
         };

+ 5 - 3
RackPeek.Domain/Resources/Hardware/Server/Cpu/AddCpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Cpus/AddCpuUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Cpu;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 
 public class AddCpuUseCase(IHardwareRepository repository)
 {
@@ -10,11 +12,11 @@ public class AddCpuUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server) return;
+        if (hardware is not Server server) return;
 
         server.Cpus ??= [];
 
-        server.Cpus.Add(new Models.Cpu
+        server.Cpus.Add(new Cpu
         {
             Model = model,
             Cores = cores,

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/Cpu/RemoveCpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Cpus/RemoveCpuUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Cpu;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 
 public class RemoveCpuUseCase(IHardwareRepository repository)
 {
@@ -7,7 +9,7 @@ public class RemoveCpuUseCase(IHardwareRepository repository)
         int index)
     {
         var hardware = await repository.GetByNameAsync(serverName);
-        if (hardware is not Models.Server server) return;
+        if (hardware is not Server server) return;
 
         server.Cpus ??= [];
 

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/Cpu/UpdateCpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Cpus/UpdateCpuUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Cpu;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 
 public class UpdateCpuUseCase(IHardwareRepository repository)
 {
@@ -11,7 +13,7 @@ public class UpdateCpuUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server) return;
+        if (hardware is not Server server) return;
 
         server.Cpus ??= [];
 

+ 1 - 1
RackPeek.Domain/Resources/Hardware/Server/DeleteServerUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/DeleteServerUseCase.cs

@@ -1,4 +1,4 @@
-namespace RackPeek.Domain.Resources.Hardware.Server;
+namespace RackPeek.Domain.Resources.Hardware.Servers;
 
 public class DeleteServerUseCase(IHardwareRepository repository)
 {

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/DescribeServerUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/DescribeServerUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers;
 
 public record ServerDescription(
     string Name,
@@ -15,7 +17,7 @@ public class DescribeServerUseCase(IHardwareRepository repository)
 {
     public async Task<ServerDescription?> ExecuteAsync(string name)
     {
-        var server = await repository.GetByNameAsync(name) as Models.Server;
+        var server = await repository.GetByNameAsync(name) as Server;
         if (server == null)
             return null;
 

+ 5 - 3
RackPeek.Domain/Resources/Hardware/Server/Drive/AddDriveUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Drives/AddDriveUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Drive;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Drives;
 
 public class AddDrivesUseCase(IHardwareRepository repository)
 {
@@ -9,11 +11,11 @@ public class AddDrivesUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server) return;
+        if (hardware is not Server server) return;
 
         server.Drives ??= [];
 
-        server.Drives.Add(new Models.Drive
+        server.Drives.Add(new Drive
         {
             Type = type,
             Size = size

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/Drive/RemoveDriveUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Drives/RemoveDriveUseCase.cs

@@ -1,11 +1,13 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Drive;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Drives;
 
 public class RemoveDriveUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string serverName, int index)
     {
         var hardware = await repository.GetByNameAsync(serverName);
-        if (hardware is not Models.Server server) return;
+        if (hardware is not Server server) return;
         server.Drives ??= [];
         if (index < 0 || index >= server.Drives.Count)
             throw new ArgumentOutOfRangeException(nameof(index), "Drive index out of range.");

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/Drive/UpdateDriveUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Drives/UpdateDriveUseCase.cs

@@ -1,11 +1,13 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Drive;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Drives;
 
 public class UpdateDriveUseCase(IHardwareRepository repository)
 {
     public async Task ExecuteAsync(string serverName, int index, string type, int size)
     {
         var hardware = await repository.GetByNameAsync(serverName);
-        if (hardware is not Models.Server server) return;
+        if (hardware is not Server server) return;
 
         server.Drives ??= [];
         if (index < 0 || index >= server.Drives.Count)

+ 5 - 4
RackPeek.Domain/Resources/Hardware/Server/GetServerSystemTreeUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/GetServerSystemTreeUseCase.cs

@@ -1,6 +1,7 @@
+using RackPeek.Domain.Resources.Hardware.Models;
 using RackPeek.Domain.Resources.SystemResources;
 
-namespace RackPeek.Domain.Resources.Hardware.Server;
+namespace RackPeek.Domain.Resources.Hardware.Servers;
 
 public class GetServerSystemTreeUseCase(
     IHardwareRepository hardwareRepository,
@@ -8,7 +9,7 @@ public class GetServerSystemTreeUseCase(
 {
     public async Task<HardwareDependencyTree?> ExecuteAsync(string hardwareName)
     {
-        var server = await hardwareRepository.GetByNameAsync(hardwareName) as Models.Server;
+        var server = await hardwareRepository.GetByNameAsync(hardwareName) as Server;
         if (server is null) return null;
 
         var systems = await systemRepository.GetByPhysicalHostAsync(hardwareName);
@@ -17,8 +18,8 @@ public class GetServerSystemTreeUseCase(
     }
 }
 
-public sealed class HardwareDependencyTree(Models.Server hardware, IReadOnlyList<SystemResource> systems)
+public sealed class HardwareDependencyTree(Server hardware, IReadOnlyList<SystemResource> systems)
 {
-    public Models.Server Hardware { get; } = hardware;
+    public Server Hardware { get; } = hardware;
     public IReadOnlyList<SystemResource> Systems { get; } = systems;
 }

+ 12 - 0
RackPeek.Domain/Resources/Hardware/Servers/GetServerUseCase.cs

@@ -0,0 +1,12 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers;
+
+public class GetServerUseCase(IHardwareRepository repository)
+{
+    public async Task<Server?> ExecuteAsync(string name)
+    {
+        var hardware = await repository.GetByNameAsync(name);
+        return hardware as Server;
+    }
+}

+ 12 - 0
RackPeek.Domain/Resources/Hardware/Servers/GetServersUseCase.cs

@@ -0,0 +1,12 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers;
+
+public class GetServersUseCase(IHardwareRepository repository)
+{
+    public async Task<IReadOnlyList<Server>> ExecuteAsync()
+    {
+        var hardware = await repository.GetAllAsync();
+        return hardware.OfType<Server>().ToList();
+    }
+}

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Server/Gpu/AddGpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Gpus/AddGpuUseCase.cs

@@ -1,5 +1,6 @@
+using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Server.Gpu;
+namespace RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 
 public class AddGpuUseCase(IHardwareRepository repository)
 {
@@ -10,12 +11,12 @@ public class AddGpuUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server) 
+        if (hardware is not Server server)
             return;
 
         server.Gpus ??= [];
 
-        server.Gpus.Add(new Models.Gpu
+        server.Gpus.Add(new Gpu
         {
             Model = model,
             Vram = vram

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/Gpu/RemoveGpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Gpus/RemoveGpuUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Gpu;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 
 public class RemoveGpuUseCase(IHardwareRepository repository)
 {
@@ -6,7 +8,7 @@ public class RemoveGpuUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server) 
+        if (hardware is not Server server)
             return;
 
         server.Gpus ??= [];

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/Gpu/UpdateGpuUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Gpus/UpdateGpuUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Gpu;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 
 public class UpdateGpuUseCase(IHardwareRepository repository)
 {
@@ -10,7 +12,7 @@ public class UpdateGpuUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server) 
+        if (hardware is not Server server)
             return;
 
         server.Gpus ??= [];

+ 5 - 3
RackPeek.Domain/Resources/Hardware/Server/Nic/AddNicUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Nics/AddNicUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Nic;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Nics;
 
 public class AddNicUseCase(IHardwareRepository repository)
 {
@@ -10,12 +12,12 @@ public class AddNicUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server)
+        if (hardware is not Server server)
             return;
 
         server.Nics ??= [];
 
-        server.Nics.Add(new Models.Nic
+        server.Nics.Add(new Nic
         {
             Type = type,
             Speed = speed,

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/Nic/RemoveNicUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Nics/RemoveNicUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Nic;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Nics;
 
 public class RemoveNicUseCase(IHardwareRepository repository)
 {
@@ -6,7 +8,7 @@ public class RemoveNicUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server)
+        if (hardware is not Server server)
             return;
 
         server.Nics ??= [];

+ 4 - 2
RackPeek.Domain/Resources/Hardware/Server/Nic/UpdateNicUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/Nics/UpdateNicUseCase.cs

@@ -1,4 +1,6 @@
-namespace RackPeek.Domain.Resources.Hardware.Server.Nic;
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers.Nics;
 
 public class UpdateNicUseCase(IHardwareRepository repository)
 {
@@ -11,7 +13,7 @@ public class UpdateNicUseCase(IHardwareRepository repository)
     {
         var hardware = await repository.GetByNameAsync(serverName);
 
-        if (hardware is not Models.Server server)
+        if (hardware is not Server server)
             return;
 
         server.Nics ??= [];

+ 2 - 2
RackPeek.Domain/Resources/Hardware/Server/UpdateServerUseCase.cs → RackPeek.Domain/Resources/Hardware/Servers/UpdateServerUseCase.cs

@@ -1,6 +1,6 @@
 using RackPeek.Domain.Resources.Hardware.Models;
 
-namespace RackPeek.Domain.Resources.Hardware.Server;
+namespace RackPeek.Domain.Resources.Hardware.Servers;
 
 public class UpdateServerUseCase(IHardwareRepository repository)
 {
@@ -10,7 +10,7 @@ public class UpdateServerUseCase(IHardwareRepository repository)
         bool? ipmi = null
     )
     {
-        var server = await repository.GetByNameAsync(name) as Models.Server;
+        var server = await repository.GetByNameAsync(name) as Server;
         if (server == null)
             throw new InvalidOperationException($"Server '{name}' not found.");
 

+ 1 - 3
RackPeek.Domain/Resources/SystemResources/ISystemRepository.cs

@@ -8,6 +8,4 @@ public interface ISystemRepository
     Task DeleteAsync(string name);
     Task<SystemResource?> GetByNameAsync(string name);
     Task<IReadOnlyList<SystemResource>> GetByPhysicalHostAsync(string name);
-
-}
-
+}

+ 1 - 1
RackPeek.Domain/Resources/SystemResources/UseCases/DescribeSystemUseCase.cs

@@ -28,4 +28,4 @@ public class DescribeSystemUseCase(ISystemRepository repository)
             system.RunsOn
         );
     }
-}
+}

+ 1 - 1
RackPeek.Domain/Resources/SystemResources/UseCases/GetSystemsUseCase.cs

@@ -6,4 +6,4 @@ public class GetSystemsUseCase(ISystemRepository repository)
     {
         return await repository.GetAllAsync();
     }
-}
+}

+ 1 - 1
RackPeek.Domain/Resources/SystemResources/UseCases/SystemReportUseCase.cs

@@ -37,4 +37,4 @@ public class SystemReportUseCase(ISystemRepository repository)
 
         return new SystemReport(rows);
     }
-}
+}

+ 1 - 0
RackPeek.Domain/Resources/SystemResources/UseCases/UpdateSystemUseCase.cs

@@ -1,4 +1,5 @@
 namespace RackPeek.Domain.Resources.SystemResources.UseCases;
+
 public class UpdateSystemUseCase(ISystemRepository repository)
 {
     public async Task ExecuteAsync(

+ 505 - 0
RackPeek/CliBootstrap.cs

@@ -0,0 +1,505 @@
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using RackPeek.Commands;
+using RackPeek.Commands.AccessPoints;
+using RackPeek.Commands.Desktops;
+using RackPeek.Commands.Desktops.Cpus;
+using RackPeek.Commands.Desktops.Drive;
+using RackPeek.Commands.Desktops.Gpus;
+using RackPeek.Commands.Desktops.Nics;
+using RackPeek.Commands.Servers;
+using RackPeek.Commands.Servers.Cpus;
+using RackPeek.Commands.Servers.Drives;
+using RackPeek.Commands.Servers.Gpus;
+using RackPeek.Commands.Servers.Nics;
+using RackPeek.Commands.Switches;
+using RackPeek.Commands.Systems;
+using RackPeek.Commands.Ups;
+using RackPeek.Domain.Resources.Hardware;
+using RackPeek.Domain.Resources.Hardware.AccessPoints;
+using RackPeek.Domain.Resources.Hardware.Desktops;
+using RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
+using RackPeek.Domain.Resources.Hardware.Desktops.Drives;
+using RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
+using RackPeek.Domain.Resources.Hardware.Desktops.Nics;
+using RackPeek.Domain.Resources.Hardware.Reports;
+using RackPeek.Domain.Resources.Hardware.Servers;
+using RackPeek.Domain.Resources.Hardware.Servers.Cpus;
+using RackPeek.Domain.Resources.Hardware.Servers.Drives;
+using RackPeek.Domain.Resources.Hardware.Servers.Gpus;
+using RackPeek.Domain.Resources.Hardware.Servers.Nics;
+using RackPeek.Domain.Resources.Hardware.Switches;
+using RackPeek.Domain.Resources.Hardware.UpsUnits;
+using RackPeek.Domain.Resources.SystemResources;
+using RackPeek.Domain.Resources.SystemResources.UseCases;
+using RackPeek.Yaml;
+using Spectre.Console.Cli;
+
+namespace RackPeek;
+
+public static class CliBootstrap
+{
+    public static void BuildApp(
+        CommandApp app,
+        IServiceCollection services,
+        IConfiguration configuration,
+        string[] yamlFiles
+    )
+    {
+        services.AddSingleton<IConfiguration>(configuration);
+
+        var collection = new YamlResourceCollection();
+        var basePath = configuration["HardwarePath"] ?? Directory.GetCurrentDirectory();
+
+        collection.LoadFiles(yamlFiles.Select(f => Path.Combine(basePath, f)));
+
+        // Infrastructure
+        services.AddScoped<IHardwareRepository>(_ => new YamlHardwareRepository(collection));
+        services.AddScoped<ISystemRepository>(_ => new YamlSystemRepository(collection));
+
+        // Application
+        services.AddScoped<ServerHardwareReportUseCase>();
+        services.AddScoped<ServerReportCommand>();
+        services.AddScoped<AccessPointHardwareReportUseCase>();
+        services.AddScoped<AccessPointReportCommand>();
+        services.AddScoped<SwitchHardwareReportUseCase>();
+        services.AddScoped<SwitchReportCommand>();
+        services.AddScoped<UpsHardwareReportUseCase>();
+        services.AddScoped<UpsReportCommand>();
+        services.AddScoped<DesktopHardwareReportUseCase>();
+        services.AddScoped<DesktopReportCommand>();
+
+        services.AddScoped<AddServerUseCase>();
+        services.AddScoped<ServerAddCommand>();
+
+        services.AddScoped<DeleteServerUseCase>();
+        services.AddScoped<ServerDeleteCommand>();
+
+        services.AddScoped<DescribeServerUseCase>();
+        services.AddScoped<ServerDescribeCommand>();
+
+        services.AddScoped<GetServerUseCase>();
+        services.AddScoped<ServerGetByNameCommand>();
+
+        services.AddScoped<UpdateServerUseCase>();
+        services.AddScoped<ServerSetCommand>();
+        services.AddScoped<GetServerSystemTreeUseCase>();
+        services.AddScoped<ServerTreeCommand>();
+
+        // CPU use cases
+        services.AddScoped<AddCpuUseCase>();
+        services.AddScoped<UpdateCpuUseCase>();
+        services.AddScoped<RemoveCpuUseCase>();
+
+        // Drive use cases
+        services.AddScoped<AddDrivesUseCase>();
+        services.AddScoped<UpdateDriveUseCase>();
+        services.AddScoped<RemoveDriveUseCase>();
+
+        // GPU use cases
+        services.AddScoped<AddGpuUseCase>();
+        services.AddScoped<UpdateGpuUseCase>();
+        services.AddScoped<RemoveGpuUseCase>();
+
+
+        // CPU commands
+        services.AddScoped<ServerCpuAddCommand>();
+        services.AddScoped<ServerCpuSetCommand>();
+        services.AddScoped<ServerCpuRemoveCommand>();
+
+        // Switch commands
+        services.AddScoped<SwitchAddCommand>();
+        services.AddScoped<SwitchDeleteCommand>();
+        services.AddScoped<SwitchDescribeCommand>();
+        services.AddScoped<SwitchGetByNameCommand>();
+        services.AddScoped<SwitchGetCommand>();
+        services.AddScoped<SwitchSetCommand>();
+
+        // Switch Usecases
+        services.AddScoped<AddSwitchUseCase>();
+        services.AddScoped<DeleteSwitchUseCase>();
+        services.AddScoped<GetSwitchUseCase>();
+        services.AddScoped<GetSwitchesUseCase>();
+        services.AddScoped<UpdateSwitchUseCase>();
+        services.AddScoped<DescribeSwitchUseCase>();
+
+        // NIC use cases
+        services.AddScoped<AddNicUseCase>();
+        services.AddScoped<UpdateNicUseCase>();
+        services.AddScoped<RemoveNicUseCase>();
+
+        // NIC commands
+        services.AddScoped<ServerNicAddCommand>();
+        services.AddScoped<ServerNicUpdateCommand>();
+        services.AddScoped<ServerNicRemoveCommand>();
+
+        // Drive commands
+        services.AddScoped<ServerDriveAddCommand>();
+        services.AddScoped<ServerDriveUpdateCommand>();
+        services.AddScoped<ServerDriveRemoveCommand>();
+
+        // GPU commands
+        services.AddScoped<ServerGpuAddCommand>();
+        services.AddScoped<ServerGpuUpdateCommand>();
+        services.AddScoped<ServerGpuRemoveCommand>();
+
+        // System use cases
+        services.AddScoped<AddSystemUseCase>();
+        services.AddScoped<DeleteSystemUseCase>();
+        services.AddScoped<DescribeSystemUseCase>();
+        services.AddScoped<GetSystemsUseCase>();
+        services.AddScoped<GetSystemUseCase>();
+        services.AddScoped<UpdateSystemUseCase>();
+        services.AddScoped<SystemReportUseCase>();
+
+
+        // System commands
+        services.AddScoped<SystemSetCommand>();
+        services.AddScoped<SystemGetCommand>();
+        services.AddScoped<SystemGetByNameCommand>();
+        services.AddScoped<SystemDescribeCommand>();
+        services.AddScoped<SystemDeleteCommand>();
+        services.AddScoped<SystemAddCommand>();
+        services.AddScoped<SystemReportCommand>();
+
+        // AccessPoint use cases
+        services.AddScoped<AddAccessPointUseCase>();
+        services.AddScoped<DeleteAccessPointUseCase>();
+        services.AddScoped<GetAccessPointUseCase>();
+        services.AddScoped<GetAccessPointsUseCase>();
+        services.AddScoped<UpdateAccessPointUseCase>();
+        services.AddScoped<DescribeAccessPointUseCase>();
+
+        // AccessPoint commands
+        services.AddScoped<AccessPointAddCommand>();
+        services.AddScoped<AccessPointDeleteCommand>();
+        services.AddScoped<AccessPointDescribeCommand>();
+        services.AddScoped<AccessPointGetByNameCommand>();
+        services.AddScoped<AccessPointGetCommand>();
+        services.AddScoped<AccessPointSetCommand>();
+
+        // UPS use cases
+        services.AddScoped<AddUpsUseCase>();
+        services.AddScoped<DeleteUpsUseCase>();
+        services.AddScoped<GetUpsUnitUseCase>();
+        services.AddScoped<GetUpsUseCase>();
+        services.AddScoped<UpdateUpsUseCase>();
+        services.AddScoped<DescribeUpsUseCase>();
+
+        // UPS commands
+        services.AddScoped<UpsAddCommand>();
+        services.AddScoped<UpsDeleteCommand>();
+        services.AddScoped<UpsDescribeCommand>();
+        services.AddScoped<UpsGetByNameCommand>();
+        services.AddScoped<UpsGetCommand>();
+        services.AddScoped<UpsSetCommand>();
+
+        // Desktop use cases
+        services.AddScoped<AddDesktopUseCase>();
+        services.AddScoped<DeleteDesktopUseCase>();
+        services.AddScoped<DescribeDesktopUseCase>();
+        services.AddScoped<GetDesktopUseCase>();
+        services.AddScoped<GetDesktopsUseCase>();
+        services.AddScoped<UpdateDesktopUseCase>();
+
+// Desktop CPU use cases
+        services.AddScoped<AddDesktopCpuUseCase>();
+        services.AddScoped<UpdateDesktopCpuUseCase>();
+        services.AddScoped<RemoveDesktopCpuUseCase>();
+
+// Desktop Drive use cases
+        services.AddScoped<AddDesktopDriveUseCase>();
+        services.AddScoped<UpdateDesktopDriveUseCase>();
+        services.AddScoped<RemoveDesktopDriveUseCase>();
+
+// Desktop GPU use cases
+        services.AddScoped<AddDesktopGpuUseCase>();
+        services.AddScoped<UpdateDesktopGpuUseCase>();
+        services.AddScoped<RemoveDesktopGpuUseCase>();
+
+// Desktop NIC use cases
+        services.AddScoped<AddDesktopNicUseCase>();
+        services.AddScoped<UpdateDesktopNicUseCase>();
+        services.AddScoped<RemoveDesktopNicUseCase>();
+
+// Desktop CRUD commands
+        services.AddScoped<DesktopAddCommand>();
+        services.AddScoped<DesktopDeleteCommand>();
+        services.AddScoped<DesktopDescribeCommand>();
+        services.AddScoped<DesktopGetByNameCommand>();
+        services.AddScoped<DesktopGetCommand>();
+        services.AddScoped<DesktopSetCommand>();
+
+// Desktop CPU commands
+        services.AddScoped<DesktopCpuAddCommand>();
+        services.AddScoped<DesktopCpuSetCommand>();
+        services.AddScoped<DesktopCpuRemoveCommand>();
+
+// Desktop Drive commands
+        services.AddScoped<DesktopDriveAddCommand>();
+        services.AddScoped<DesktopDriveSetCommand>();
+        services.AddScoped<DesktopDriveRemoveCommand>();
+
+// Desktop GPU commands
+        services.AddScoped<DesktopGpuAddCommand>();
+        services.AddScoped<DesktopGpuSetCommand>();
+        services.AddScoped<DesktopGpuRemoveCommand>();
+
+// Desktop NIC commands
+        services.AddScoped<DesktopNicAddCommand>();
+        services.AddScoped<DesktopNicSetCommand>();
+        services.AddScoped<DesktopNicRemoveCommand>();
+
+
+        // Spectre bootstrap
+        app.Configure(config =>
+        {
+            config.SetApplicationName("rpk");
+
+            // ----------------------------
+            // Server commands (CRUD-style)
+            // ----------------------------
+            config.AddBranch("servers", server =>
+            {
+                server.SetDescription("Manage servers");
+
+                server.AddCommand<ServerReportCommand>("summary")
+                    .WithDescription("Show a summarized hardware report for all servers");
+
+                server.AddCommand<ServerAddCommand>("add")
+                    .WithDescription("Add a new server");
+
+                server.AddCommand<ServerGetByNameCommand>("get")
+                    .WithDescription("List servers or get a server by name");
+
+                server.AddCommand<ServerDescribeCommand>("describe")
+                    .WithDescription("Show detailed information about a server");
+
+                server.AddCommand<ServerSetCommand>("set")
+                    .WithDescription("Update server properties");
+
+                server.AddCommand<ServerDeleteCommand>("del")
+                    .WithDescription("Delete a server");
+
+                server.AddCommand<ServerTreeCommand>("tree")
+                    .WithDescription("Displays a dependency tree for the server.");
+
+                server.AddBranch("cpu", cpu =>
+                {
+                    cpu.SetDescription("Manage server CPUs");
+
+                    cpu.AddCommand<ServerCpuAddCommand>("add")
+                        .WithDescription("Add a CPU to a server");
+
+                    cpu.AddCommand<ServerCpuSetCommand>("set")
+                        .WithDescription("Update a CPU on a server");
+
+                    cpu.AddCommand<ServerCpuRemoveCommand>("del")
+                        .WithDescription("Remove a CPU from a server");
+                });
+
+                server.AddBranch("nic", nic =>
+                {
+                    nic.SetDescription("Manage server NICs");
+
+                    nic.AddCommand<ServerNicAddCommand>("add")
+                        .WithDescription("Add a NIC to a server");
+
+                    nic.AddCommand<ServerNicUpdateCommand>("set")
+                        .WithDescription("Update a NIC on a server");
+
+                    nic.AddCommand<ServerNicRemoveCommand>("del")
+                        .WithDescription("Remove a NIC from a server");
+                    server.AddBranch("drive", drive =>
+                    {
+                        drive.SetDescription("Manage server drives");
+
+                        drive.AddCommand<ServerDriveAddCommand>("add")
+                            .WithDescription("Add a drive to a server");
+
+                        drive.AddCommand<ServerDriveUpdateCommand>("set")
+                            .WithDescription("Update a drive on a server");
+
+                        drive.AddCommand<ServerDriveRemoveCommand>("del")
+                            .WithDescription("Remove a drive from a server");
+                    });
+                    server.AddBranch("gpu", gpu =>
+                    {
+                        gpu.SetDescription("Manage server GPUs");
+
+                        gpu.AddCommand<ServerGpuAddCommand>("add")
+                            .WithDescription("Add a GPU to a server");
+
+                        gpu.AddCommand<ServerGpuUpdateCommand>("set")
+                            .WithDescription("Update a GPU on a server");
+
+                        gpu.AddCommand<ServerGpuRemoveCommand>("del")
+                            .WithDescription("Remove a GPU from a server");
+                    });
+                });
+
+                config.AddBranch("switches", server =>
+                {
+                    server.SetDescription("Manage switches");
+
+                    server.AddCommand<SwitchReportCommand>("summary")
+                        .WithDescription("Show switch hardware report");
+
+                    server.AddCommand<SwitchAddCommand>("add")
+                        .WithDescription("Add a new switch");
+
+                    server.AddCommand<SwitchGetCommand>("list")
+                        .WithDescription("List switches");
+
+                    server.AddCommand<SwitchGetByNameCommand>("get")
+                        .WithDescription("Get a switches by name");
+
+                    server.AddCommand<SwitchDescribeCommand>("describe")
+                        .WithDescription("Show detailed information about a switch");
+
+                    server.AddCommand<SwitchSetCommand>("set")
+                        .WithDescription("Update switch properties");
+
+                    server.AddCommand<SwitchDeleteCommand>("del")
+                        .WithDescription("Delete a switch");
+                });
+
+                config.AddBranch("systems", system =>
+                {
+                    system.SetDescription("Manage systems");
+
+                    system.AddCommand<SystemReportCommand>("summary")
+                        .WithDescription("Show system report");
+
+                    system.AddCommand<SystemAddCommand>("add")
+                        .WithDescription("Add a new system");
+
+                    system.AddCommand<SystemGetCommand>("list")
+                        .WithDescription("List systems");
+
+                    system.AddCommand<SystemGetByNameCommand>("get")
+                        .WithDescription("Get a system by name");
+
+                    system.AddCommand<SystemDescribeCommand>("describe")
+                        .WithDescription("Show detailed information about a system");
+
+                    system.AddCommand<SystemSetCommand>("set")
+                        .WithDescription("Update system properties");
+
+                    system.AddCommand<SystemDeleteCommand>("del")
+                        .WithDescription("Delete a system");
+                });
+
+                config.AddBranch("accesspoints", ap =>
+                {
+                    ap.SetDescription("Manage access points");
+
+                    ap.AddCommand<AccessPointReportCommand>("summary")
+                        .WithDescription("Show access point hardware report");
+
+                    ap.AddCommand<AccessPointAddCommand>("add")
+                        .WithDescription("Add a new access point");
+
+                    ap.AddCommand<AccessPointGetCommand>("list")
+                        .WithDescription("List access points");
+
+                    ap.AddCommand<AccessPointGetByNameCommand>("get")
+                        .WithDescription("Get an access point by name");
+
+                    ap.AddCommand<AccessPointDescribeCommand>("describe")
+                        .WithDescription("Show detailed information about an access point");
+
+                    ap.AddCommand<AccessPointSetCommand>("set")
+                        .WithDescription("Update access point properties");
+
+                    ap.AddCommand<AccessPointDeleteCommand>("del")
+                        .WithDescription("Delete an access point");
+                });
+
+                config.AddBranch("ups", ups =>
+                {
+                    ups.SetDescription("Manage UPS units");
+
+                    ups.AddCommand<UpsReportCommand>("summary")
+                        .WithDescription("Show UPS hardware report");
+
+                    ups.AddCommand<UpsAddCommand>("add")
+                        .WithDescription("Add a new UPS");
+
+                    ups.AddCommand<UpsGetCommand>("list")
+                        .WithDescription("List UPS units");
+
+                    ups.AddCommand<UpsGetByNameCommand>("get")
+                        .WithDescription("Get a UPS by name");
+
+                    ups.AddCommand<UpsDescribeCommand>("describe")
+                        .WithDescription("Show detailed information about a UPS");
+
+                    ups.AddCommand<UpsSetCommand>("set")
+                        .WithDescription("Update UPS properties");
+
+                    ups.AddCommand<UpsDeleteCommand>("del")
+                        .WithDescription("Delete a UPS");
+                });
+
+                config.AddBranch("desktops", desktops =>
+                {
+                    // CRUD
+                    desktops.AddCommand<DesktopAddCommand>("add");
+                    desktops.AddCommand<DesktopGetCommand>("list");
+                    desktops.AddCommand<DesktopGetByNameCommand>("get");
+                    desktops.AddCommand<DesktopDescribeCommand>("describe");
+                    desktops.AddCommand<DesktopSetCommand>("set");
+                    desktops.AddCommand<DesktopDeleteCommand>("del");
+
+                    // CPU
+                    desktops.AddBranch("cpu", cpu =>
+                    {
+                        cpu.AddCommand<DesktopCpuAddCommand>("add");
+                        cpu.AddCommand<DesktopCpuSetCommand>("set");
+                        cpu.AddCommand<DesktopCpuRemoveCommand>("del");
+                    });
+
+                    // Drives
+                    desktops.AddBranch("drive", drive =>
+                    {
+                        drive.AddCommand<DesktopDriveAddCommand>("add");
+                        drive.AddCommand<DesktopDriveSetCommand>("set");
+                        drive.AddCommand<DesktopDriveRemoveCommand>("del");
+                    });
+
+                    // GPUs
+                    desktops.AddBranch("gpu", gpu =>
+                    {
+                        gpu.AddCommand<DesktopGpuAddCommand>("add");
+                        gpu.AddCommand<DesktopGpuSetCommand>("set");
+                        gpu.AddCommand<DesktopGpuRemoveCommand>("del");
+                    });
+
+                    // NICs
+                    desktops.AddBranch("nic", nic =>
+                    {
+                        nic.AddCommand<DesktopNicAddCommand>("add");
+                        nic.AddCommand<DesktopNicSetCommand>("set");
+                        nic.AddCommand<DesktopNicRemoveCommand>("del");
+                    });
+                });
+
+
+                // ----------------------------
+                // Reports (read-only summaries)
+                // ----------------------------
+                config.AddCommand<AccessPointReportCommand>("ap")
+                    .WithDescription("Show access point hardware report");
+
+                config.AddCommand<DesktopReportCommand>("desktops")
+                    .WithDescription("Show desktop hardware report");
+
+                config.AddCommand<UpsReportCommand>("ups")
+                    .WithDescription("Show UPS hardware report");
+
+                config.ValidateExamples();
+            });
+        });
+    }
+}

+ 3 - 1
RackPeek/Commands/AccessPoints/AccessCommands.cs

@@ -1,9 +1,11 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
 namespace RackPeek.Commands.AccessPoints;
 
 public class AccessPointNameSettings : CommandSettings
 {
-    [CommandArgument(0, "<name>")] 
+    [CommandArgument(0, "<name>")]
+    [Description("The access point name.")]
     public string Name { get; set; } = default!;
 }

+ 3 - 1
RackPeek/Commands/AccessPoints/AccessPointAddCommand.cs

@@ -1,3 +1,4 @@
+using System.ComponentModel;
 using Microsoft.Extensions.DependencyInjection;
 using RackPeek.Domain.Resources.Hardware.AccessPoints;
 using Spectre.Console;
@@ -7,7 +8,8 @@ namespace RackPeek.Commands.AccessPoints;
 
 public class AccessPointAddSettings : CommandSettings
 {
-    [CommandArgument(0, "<name>")] 
+    [CommandArgument(0, "<name>")]
+    [Description("The access point name.")]
     public string Name { get; set; } = default!;
 }
 

+ 1 - 1
RackPeek/Commands/AccessPoints/AccessPointGetByNameCommand.cs

@@ -26,7 +26,7 @@ public class AccessPointGetByNameCommand(
         }
 
         AnsiConsole.MarkupLine(
-            $"[green]{ap.Name}[/]  Model: {ap.Model ?? "Unknown"}, Speed: {(ap.Speed?.ToString() ?? "Unknown")} Gbps");
+            $"[green]{ap.Name}[/]  Model: {ap.Model ?? "Unknown"}, Speed: {ap.Speed?.ToString() ?? "Unknown"} Gbps");
 
         return 0;
     }

+ 6 - 3
RackPeek/Commands/AccessPoints/AccessPointSetCommand.cs

@@ -1,5 +1,6 @@
+using System.ComponentModel;
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Commands.Server;
+using RackPeek.Commands.Servers;
 using RackPeek.Domain.Resources.Hardware.AccessPoints;
 using Spectre.Console;
 using Spectre.Console.Cli;
@@ -8,10 +9,12 @@ namespace RackPeek.Commands.AccessPoints;
 
 public class AccessPointSetSettings : ServerNameSettings
 {
-    [CommandOption("--model")] 
+    [CommandOption("--model")]
+    [Description("The access point model name.")]
     public string? Model { get; set; }
 
-    [CommandOption("--speed")] 
+    [CommandOption("--speed")]
+    [Description("The speed of the access point in Gb.")]
     public double? Speed { get; set; }
 }
 

+ 0 - 9
RackPeek/Commands/Desktop/DesktopCommands.cs

@@ -1,9 +0,0 @@
-using Spectre.Console.Cli;
-
-namespace RackPeek.Commands.Desktop;
-
-public class DesktopNameSettings : CommandSettings
-{
-    [CommandArgument(0, "<name>")]
-    public string Name { get; set; } = default!;
-}

+ 2 - 2
RackPeek/Commands/Desktop/Cpu/DesktopCpuAddCommand.cs → RackPeek/Commands/Desktops/Cpus/DesktopCpuAddCommand.cs

@@ -1,10 +1,10 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 using RackPeek.Domain.Resources.Hardware.Models;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Cpus;
+namespace RackPeek.Commands.Desktops.Cpus;
 
 public class DesktopCpuAddCommand(IServiceProvider provider)
     : AsyncCommand<DesktopCpuAddSettings>

+ 6 - 1
RackPeek/Commands/Desktop/Cpu/DesktopCpuAddSettings.cs → RackPeek/Commands/Desktops/Cpus/DesktopCpuAddSettings.cs

@@ -1,18 +1,23 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Cpus;
+namespace RackPeek.Commands.Desktops.Cpus;
 
 public class DesktopCpuAddSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The desktop name.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandOption("--model")]
+    [Description("The model name.")]
     public string? Model { get; set; }
 
     [CommandOption("--cores")]
+    [Description("The number of cpu cores.")]
     public int? Cores { get; set; }
 
     [CommandOption("--threads")]
+    [Description("The number of cpu threads.")]
     public int? Threads { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Desktop/Cpu/DesktopCpuRemoveCommand.cs → RackPeek/Commands/Desktops/Cpus/DesktopCpuRemoveCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Cpus;
+namespace RackPeek.Commands.Desktops.Cpus;
 
 public class DesktopCpuRemoveCommand(IServiceProvider provider)
     : AsyncCommand<DesktopCpuRemoveSettings>

+ 4 - 1
RackPeek/Commands/Desktop/Cpu/DesktopCpuRemoveSettings.cs → RackPeek/Commands/Desktops/Cpus/DesktopCpuRemoveSettings.cs

@@ -1,12 +1,15 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Cpus;
+namespace RackPeek.Commands.Desktops.Cpus;
 
 public class DesktopCpuRemoveSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The name of the desktop.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandArgument(1, "<index>")]
+    [Description("The index of the desktop cpu to remove.")]
     public int Index { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Desktop/Cpu/DesktopCpuSetCommand.cs → RackPeek/Commands/Desktops/Cpus/DesktopCpuSetCommand.cs

@@ -1,10 +1,10 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 using RackPeek.Domain.Resources.Hardware.Models;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Cpus;
+namespace RackPeek.Commands.Desktops.Cpus;
 
 public class DesktopCpuSetCommand(IServiceProvider provider)
     : AsyncCommand<DesktopCpuSetSettings>

+ 7 - 1
RackPeek/Commands/Desktop/Cpu/DesktopCpuSetSettings.cs → RackPeek/Commands/Desktops/Cpus/DesktopCpuSetSettings.cs

@@ -1,21 +1,27 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Cpus;
+namespace RackPeek.Commands.Desktops.Cpus;
 
 public class DesktopCpuSetSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The desktop name.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandArgument(1, "<index>")]
+    [Description("The index of the desktop cpu.")]
     public int Index { get; set; }
 
     [CommandOption("--model")]
+    [Description("The cpu model.")]
     public string? Model { get; set; }
 
     [CommandOption("--cores")]
+    [Description("The number of cpu cores.")]
     public int? Cores { get; set; }
 
     [CommandOption("--threads")]
+    [Description("The number of cpu threads.")]
     public int? Threads { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Desktop/DesktopAddCommand.cs → RackPeek/Commands/Desktops/DesktopAddCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop;
+namespace RackPeek.Commands.Desktops;
 
 public class DesktopAddCommand(IServiceProvider provider)
     : AsyncCommand<DesktopNameSettings>

+ 8 - 0
RackPeek/Commands/Desktops/DesktopCommands.cs

@@ -0,0 +1,8 @@
+using Spectre.Console.Cli;
+
+namespace RackPeek.Commands.Desktops;
+
+public class DesktopNameSettings : CommandSettings
+{
+    [CommandArgument(0, "<name>")] public string Name { get; set; } = default!;
+}

+ 2 - 2
RackPeek/Commands/Desktop/DesktopDeleteCommand.cs → RackPeek/Commands/Desktops/DesktopDeleteCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop;
+namespace RackPeek.Commands.Desktops;
 
 public class DesktopDeleteCommand(IServiceProvider provider)
     : AsyncCommand<DesktopNameSettings>

+ 3 - 3
RackPeek/Commands/Desktop/DesktopDescribeCommand.cs → RackPeek/Commands/Desktops/DesktopDescribeCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop;
+namespace RackPeek.Commands.Desktops;
 
 public class DesktopDescribeCommand(IServiceProvider provider)
     : AsyncCommand<DesktopNameSettings>
@@ -38,4 +38,4 @@ public class DesktopDescribeCommand(IServiceProvider provider)
 
         return 0;
     }
-}
+}

+ 2 - 2
RackPeek/Commands/Desktop/DesktopGetByNameCommand.cs → RackPeek/Commands/Desktops/DesktopGetByNameCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop;
+namespace RackPeek.Commands.Desktops;
 
 public class DesktopGetByNameCommand(IServiceProvider provider)
     : AsyncCommand<DesktopNameSettings>

+ 2 - 4
RackPeek/Commands/Desktop/DesktopGetCommand.cs → RackPeek/Commands/Desktops/DesktopGetCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop;
+namespace RackPeek.Commands.Desktops;
 
 public class DesktopGetCommand(IServiceProvider provider)
     : AsyncCommand
@@ -34,7 +34,6 @@ public class DesktopGetCommand(IServiceProvider provider)
             .AddColumn("GPUs");
 
         foreach (var d in desktops)
-        {
             table.AddRow(
                 d.Name,
                 d.Model ?? "Unknown",
@@ -44,7 +43,6 @@ public class DesktopGetCommand(IServiceProvider provider)
                 (d.Nics?.Count ?? 0).ToString(),
                 (d.Gpus?.Count ?? 0).ToString()
             );
-        }
 
         AnsiConsole.Write(table);
         return 0;

+ 3 - 4
RackPeek/Commands/Desktop/DesktopSetCommand.cs → RackPeek/Commands/Desktops/DesktopSetCommand.cs

@@ -1,14 +1,13 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop;
+namespace RackPeek.Commands.Desktops;
 
 public class DesktopSetSettings : DesktopNameSettings
 {
-    [CommandOption("--model")]
-    public string? Model { get; set; }
+    [CommandOption("--model")] public string? Model { get; set; }
 }
 
 public class DesktopSetCommand(IServiceProvider provider)

+ 3 - 4
RackPeek/Commands/Desktop/Drive/DesktopDriveAddCommand.cs → RackPeek/Commands/Desktops/Drive/DesktopDriveAddCommand.cs

@@ -1,10 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
-using RackPeek.Domain.Resources.Hardware.Models;
+using RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Drives;
+namespace RackPeek.Commands.Desktops.Drive;
 
 public class DesktopDriveAddCommand(IServiceProvider provider)
     : AsyncCommand<DesktopDriveAddSettings>
@@ -17,7 +16,7 @@ public class DesktopDriveAddCommand(IServiceProvider provider)
         using var scope = provider.CreateScope();
         var useCase = scope.ServiceProvider.GetRequiredService<AddDesktopDriveUseCase>();
 
-        var drive = new Drive
+        var drive = new Domain.Resources.Hardware.Models.Drive
         {
             Type = settings.Type,
             Size = settings.Size

+ 5 - 1
RackPeek/Commands/Desktop/Drive/DesktopDriveAddSettings.cs → RackPeek/Commands/Desktops/Drive/DesktopDriveAddSettings.cs

@@ -1,15 +1,19 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Drives;
+namespace RackPeek.Commands.Desktops.Drive;
 
 public class DesktopDriveAddSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The name of the desktop.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandOption("--type")]
+    [Description("The drive type e.g hdd / ssd.")]
     public string? Type { get; set; }
 
     [CommandOption("--size")]
+    [Description("The drive capacity in Gb.")]
     public int? Size { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Desktop/Drive/DesktopDriveRemoveCommand.cs → RackPeek/Commands/Desktops/Drive/DesktopDriveRemoveCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Drives;
+namespace RackPeek.Commands.Desktops.Drive;
 
 public class DesktopDriveRemoveCommand(IServiceProvider provider)
     : AsyncCommand<DesktopDriveRemoveSettings>

+ 4 - 1
RackPeek/Commands/Desktop/Drive/DesktopDriveRemoveSettings.cs → RackPeek/Commands/Desktops/Drive/DesktopDriveRemoveSettings.cs

@@ -1,12 +1,15 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Drives;
+namespace RackPeek.Commands.Desktops.Drive;
 
 public class DesktopDriveRemoveSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The name of the desktop.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandArgument(1, "<index>")]
+    [Description("The index of the drive to remove.")]
     public int Index { get; set; }
 }

+ 3 - 4
RackPeek/Commands/Desktop/Drive/DesktopDriveSetCommand.cs → RackPeek/Commands/Desktops/Drive/DesktopDriveSetCommand.cs

@@ -1,10 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
-using RackPeek.Domain.Resources.Hardware.Models;
+using RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Drives;
+namespace RackPeek.Commands.Desktops.Drive;
 
 public class DesktopDriveSetCommand(IServiceProvider provider)
     : AsyncCommand<DesktopDriveSetSettings>
@@ -17,7 +16,7 @@ public class DesktopDriveSetCommand(IServiceProvider provider)
         using var scope = provider.CreateScope();
         var useCase = scope.ServiceProvider.GetRequiredService<UpdateDesktopDriveUseCase>();
 
-        var drive = new Drive
+        var drive = new Domain.Resources.Hardware.Models.Drive
         {
             Type = settings.Type,
             Size = settings.Size

+ 6 - 1
RackPeek/Commands/Desktop/Drive/DesktopDriveSetSettings.cs → RackPeek/Commands/Desktops/Drive/DesktopDriveSetSettings.cs

@@ -1,18 +1,23 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Drives;
+namespace RackPeek.Commands.Desktops.Drive;
 
 public class DesktopDriveSetSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The desktop name.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandArgument(1, "<index>")]
+    [Description("The drive index to update.")]
     public int Index { get; set; }
 
     [CommandOption("--type")]
+    [Description("The drive type e.g hdd / ssd.")]
     public string? Type { get; set; }
 
     [CommandOption("--size")]
+    [Description("The drive capacity in Gb.")]
     public int? Size { get; set; }
 }

+ 3 - 3
RackPeek/Commands/Desktop/Gpu/DesktopGpuAddCommand.cs → RackPeek/Commands/Desktops/Gpus/DesktopGpuAddCommand.cs

@@ -1,10 +1,10 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 using RackPeek.Domain.Resources.Hardware.Models;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Gpu;
+namespace RackPeek.Commands.Desktops.Gpus;
 
 public class DesktopGpuAddCommand(IServiceProvider provider)
     : AsyncCommand<DesktopGpuAddSettings>
@@ -17,7 +17,7 @@ public class DesktopGpuAddCommand(IServiceProvider provider)
         using var scope = provider.CreateScope();
         var useCase = scope.ServiceProvider.GetRequiredService<AddDesktopGpuUseCase>();
 
-        var gpu = new Domain.Resources.Hardware.Models.Gpu
+        var gpu = new Gpu
         {
             Model = settings.Model,
             Vram = settings.Vram

+ 5 - 1
RackPeek/Commands/Desktop/Gpu/DesktopGpuAddSettings.cs → RackPeek/Commands/Desktops/Gpus/DesktopGpuAddSettings.cs

@@ -1,15 +1,19 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Gpu;
+namespace RackPeek.Commands.Desktops.Gpus;
 
 public class DesktopGpuAddSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The name of the desktop.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandOption("--model")]
+    [Description("The Gpu model.")]
     public string? Model { get; set; }
 
     [CommandOption("--vram")]
+    [Description("The amount of gpu vram in Gb.")]
     public int? Vram { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Desktop/Gpu/DesktopGpuRemoveCommand.cs → RackPeek/Commands/Desktops/Gpus/DesktopGpuRemoveCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Gpu;
+namespace RackPeek.Commands.Desktops.Gpus;
 
 public class DesktopGpuRemoveCommand(IServiceProvider provider)
     : AsyncCommand<DesktopGpuRemoveSettings>

+ 4 - 1
RackPeek/Commands/Desktop/Gpu/DesktopGpuRemoveSettings.cs → RackPeek/Commands/Desktops/Gpus/DesktopGpuRemoveSettings.cs

@@ -1,12 +1,15 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Gpu;
+namespace RackPeek.Commands.Desktops.Gpus;
 
 public class DesktopGpuRemoveSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The desktop name.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandArgument(1, "<index>")]
+    [Description("The index of the Gpu to remove.")]
     public int Index { get; set; }
 }

+ 3 - 3
RackPeek/Commands/Desktop/Gpu/DesktopGpuSetCommand.cs → RackPeek/Commands/Desktops/Gpus/DesktopGpuSetCommand.cs

@@ -1,10 +1,10 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 using RackPeek.Domain.Resources.Hardware.Models;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Gpu;
+namespace RackPeek.Commands.Desktops.Gpus;
 
 public class DesktopGpuSetCommand(IServiceProvider provider)
     : AsyncCommand<DesktopGpuSetSettings>
@@ -17,7 +17,7 @@ public class DesktopGpuSetCommand(IServiceProvider provider)
         using var scope = provider.CreateScope();
         var useCase = scope.ServiceProvider.GetRequiredService<UpdateDesktopGpuUseCase>();
 
-        var gpu = new Domain.Resources.Hardware.Models.Gpu
+        var gpu = new Gpu
         {
             Model = settings.Model,
             Vram = settings.Vram

+ 6 - 1
RackPeek/Commands/Desktop/Gpu/DesktopGpuSetSettings.cs → RackPeek/Commands/Desktops/Gpus/DesktopGpuSetSettings.cs

@@ -1,18 +1,23 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Gpu;
+namespace RackPeek.Commands.Desktops.Gpus;
 
 public class DesktopGpuSetSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The desktop name.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandArgument(1, "<index>")]
+    [Description("The index of the gpu to update.")]
     public int Index { get; set; }
 
     [CommandOption("--model")]
+    [Description("The gpu model name.")]
     public string? Model { get; set; }
 
     [CommandOption("--vram")]
+    [Description("The amount of gpu vram in Gb.")]
     public int? Vram { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Desktop/Nic/DesktopNicAddCommand.cs → RackPeek/Commands/Desktops/Nics/DesktopNicAddCommand.cs

@@ -1,10 +1,10 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 using RackPeek.Domain.Resources.Hardware.Models;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Nics;
+namespace RackPeek.Commands.Desktops.Nics;
 
 public class DesktopNicAddCommand(IServiceProvider provider)
     : AsyncCommand<DesktopNicAddSettings>

+ 6 - 1
RackPeek/Commands/Desktop/Nic/DesktopNicAddSettings.cs → RackPeek/Commands/Desktops/Nics/DesktopNicAddSettings.cs

@@ -1,18 +1,23 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Nics;
+namespace RackPeek.Commands.Desktops.Nics;
 
 public class DesktopNicAddSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The desktop name.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandOption("--type")]
+    [Description("The nic port type e.g rj45 / sfp+")]
     public string? Type { get; set; }
 
     [CommandOption("--speed")]
+    [Description("The port speed.")]
     public int? Speed { get; set; }
 
     [CommandOption("--ports")]
+    [Description("The number of ports.")]
     public int? Ports { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Desktop/Nic/DesktopNicRemoveCommand.cs → RackPeek/Commands/Desktops/Nics/DesktopNicRemoveCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Nics;
+namespace RackPeek.Commands.Desktops.Nics;
 
 public class DesktopNicRemoveCommand(IServiceProvider provider)
     : AsyncCommand<DesktopNicRemoveSettings>

+ 4 - 1
RackPeek/Commands/Desktop/Nic/DesktopNicRemoveSettings.cs → RackPeek/Commands/Desktops/Nics/DesktopNicRemoveSettings.cs

@@ -1,12 +1,15 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Nics;
+namespace RackPeek.Commands.Desktops.Nics;
 
 public class DesktopNicRemoveSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The desktop name.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandArgument(1, "<index>")]
+    [Description("The index of the nic to remove.")]
     public int Index { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Desktop/Nic/DesktopNicSetCommand.cs → RackPeek/Commands/Desktops/Nics/DesktopNicSetCommand.cs

@@ -1,10 +1,10 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Desktop;
+using RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 using RackPeek.Domain.Resources.Hardware.Models;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Nics;
+namespace RackPeek.Commands.Desktops.Nics;
 
 public class DesktopNicSetCommand(IServiceProvider provider)
     : AsyncCommand<DesktopNicSetSettings>

+ 7 - 1
RackPeek/Commands/Desktop/Nic/DesktopNicSetSettings.cs → RackPeek/Commands/Desktops/Nics/DesktopNicSetSettings.cs

@@ -1,21 +1,27 @@
+using System.ComponentModel;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Desktop.Nics;
+namespace RackPeek.Commands.Desktops.Nics;
 
 public class DesktopNicSetSettings : CommandSettings
 {
     [CommandArgument(0, "<desktop>")]
+    [Description("The desktop name.")]
     public string DesktopName { get; set; } = default!;
 
     [CommandArgument(1, "<index>")]
+    [Description("The index of the nic to remove.")]
     public int Index { get; set; }
 
     [CommandOption("--type")]
+    [Description("The nic port type e.g rj45 / sfp+")]
     public string? Type { get; set; }
 
     [CommandOption("--speed")]
+    [Description("The speed of the nic in Gb/s.")]
     public int? Speed { get; set; }
 
     [CommandOption("--ports")]
+    [Description("The number of ports.")]
     public int? Ports { get; set; }
 }

+ 2 - 2
RackPeek/Commands/Server/Cpus/ServerCpuAddCommand.cs → RackPeek/Commands/Servers/Cpus/ServerCpuAddCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Cpu;
+using RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Cpus;
+namespace RackPeek.Commands.Servers.Cpus;
 
 public class ServerCpuAddSettings : ServerNameSettings
 {

+ 2 - 2
RackPeek/Commands/Server/Cpus/ServerCpuRemoveCommand.cs → RackPeek/Commands/Servers/Cpus/ServerCpuRemoveCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Cpu;
+using RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Cpus;
+namespace RackPeek.Commands.Servers.Cpus;
 
 public class ServerCpuRemoveSettings : ServerNameSettings
 {

+ 2 - 2
RackPeek/Commands/Server/Cpus/ServerCpuSetCommand.cs → RackPeek/Commands/Servers/Cpus/ServerCpuSetCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Cpu;
+using RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Cpus;
+namespace RackPeek.Commands.Servers.Cpus;
 
 public class ServerCpuSetSettings : ServerNameSettings
 {

+ 2 - 2
RackPeek/Commands/Server/Drives/ServerDriveAddCommand.cs → RackPeek/Commands/Servers/Drives/ServerDriveAddCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Drive;
+using RackPeek.Domain.Resources.Hardware.Servers.Drives;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Drives;
+namespace RackPeek.Commands.Servers.Drives;
 
 public class ServerDriveAddSettings : ServerNameSettings
 {

+ 2 - 2
RackPeek/Commands/Server/Drives/ServerDriveRemoveCommand.cs → RackPeek/Commands/Servers/Drives/ServerDriveRemoveCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Drive;
+using RackPeek.Domain.Resources.Hardware.Servers.Drives;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Drives;
+namespace RackPeek.Commands.Servers.Drives;
 
 public class ServerDriveRemoveSettings : ServerNameSettings
 {

+ 2 - 2
RackPeek/Commands/Server/Drives/ServerDriveUpdateCommand.cs → RackPeek/Commands/Servers/Drives/ServerDriveUpdateCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Drive;
+using RackPeek.Domain.Resources.Hardware.Servers.Drives;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Drives;
+namespace RackPeek.Commands.Servers.Drives;
 
 public class ServerDriveUpdateSettings : ServerNameSettings
 {

+ 4 - 6
RackPeek/Commands/Server/Gpu/AddGpuUseCaseCommand.cs → RackPeek/Commands/Servers/Gpus/AddGpuUseCaseCommand.cs

@@ -1,17 +1,15 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Gpu;
+using RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Gpu;
+namespace RackPeek.Commands.Servers.Gpus;
 
 public class ServerGpuAddSettings : ServerNameSettings
 {
-    [CommandOption("--model <MODEL>")] 
-    public string Model { get; set; }
+    [CommandOption("--model <MODEL>")] public string Model { get; set; }
 
-    [CommandOption("--vram <VRAM>")] 
-    public int Vram { get; set; }
+    [CommandOption("--vram <VRAM>")] public int Vram { get; set; }
 }
 
 public class ServerGpuAddCommand(IServiceProvider serviceProvider)

+ 3 - 4
RackPeek/Commands/Server/Gpu/RemoveGpuUseCaseCommand.cs → RackPeek/Commands/Servers/Gpus/RemoveGpuUseCaseCommand.cs

@@ -1,14 +1,13 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Gpu;
+using RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Gpu;
+namespace RackPeek.Commands.Servers.Gpus;
 
 public class ServerGpuRemoveSettings : ServerNameSettings
 {
-    [CommandOption("--index <INDEX>")] 
-    public int Index { get; set; }
+    [CommandOption("--index <INDEX>")] public int Index { get; set; }
 }
 
 public class ServerGpuRemoveCommand(IServiceProvider serviceProvider)

+ 5 - 8
RackPeek/Commands/Server/Gpu/UpdateGpuUseCaseCommand.cs → RackPeek/Commands/Servers/Gpus/UpdateGpuUseCaseCommand.cs

@@ -1,20 +1,17 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Gpu;
+using RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Gpu;
+namespace RackPeek.Commands.Servers.Gpus;
 
 public class ServerGpuUpdateSettings : ServerNameSettings
 {
-    [CommandOption("--index <INDEX>")] 
-    public int Index { get; set; }
+    [CommandOption("--index <INDEX>")] public int Index { get; set; }
 
-    [CommandOption("--model <MODEL>")] 
-    public string Model { get; set; }
+    [CommandOption("--model <MODEL>")] public string Model { get; set; }
 
-    [CommandOption("--vram <VRAM>")] 
-    public int Vram { get; set; }
+    [CommandOption("--vram <VRAM>")] public int Vram { get; set; }
 }
 
 public class ServerGpuUpdateCommand(IServiceProvider serviceProvider)

+ 2 - 2
RackPeek/Commands/Server/Nics/ServerNicAddCommand.cs → RackPeek/Commands/Servers/Nics/ServerNicAddCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Nic;
+using RackPeek.Domain.Resources.Hardware.Servers.Nics;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Nics;
+namespace RackPeek.Commands.Servers.Nics;
 
 public class ServerNicAddSettings : ServerNameSettings
 {

+ 2 - 2
RackPeek/Commands/Server/Nics/ServerNicRemoveCommand.cs → RackPeek/Commands/Servers/Nics/ServerNicRemoveCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Nic;
+using RackPeek.Domain.Resources.Hardware.Servers.Nics;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Nics;
+namespace RackPeek.Commands.Servers.Nics;
 
 public class ServerNicRemoveSettings : ServerNameSettings
 {

+ 2 - 2
RackPeek/Commands/Server/Nics/ServerNicUpdateCommand.cs → RackPeek/Commands/Servers/Nics/ServerNicUpdateCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server.Nic;
+using RackPeek.Domain.Resources.Hardware.Servers.Nics;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server.Nics;
+namespace RackPeek.Commands.Servers.Nics;
 
 public class ServerNicUpdateSettings : ServerNameSettings
 {

+ 2 - 2
RackPeek/Commands/Server/ServerAddCommand.cs → RackPeek/Commands/Servers/ServerAddCommand.cs

@@ -1,9 +1,9 @@
 using Microsoft.Extensions.DependencyInjection;
-using RackPeek.Domain.Resources.Hardware.Server;
+using RackPeek.Domain.Resources.Hardware.Servers;
 using Spectre.Console;
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server;
+namespace RackPeek.Commands.Servers;
 
 public class ServerAddSettings : CommandSettings
 {

+ 1 - 1
RackPeek/Commands/Server/ServerCommands.cs → RackPeek/Commands/Servers/ServerCommands.cs

@@ -1,6 +1,6 @@
 using Spectre.Console.Cli;
 
-namespace RackPeek.Commands.Server;
+namespace RackPeek.Commands.Servers;
 
 public class ServerNameSettings : CommandSettings
 {

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff