TASK-SRV-001 — InfocadServer repository inventory (service/business tier)
- Repo:
/Users/leonardo/GitHub/Documentation/InfocadServer - Solution:
InfocadServer.sln(2329 lines) - Mode: READ-ONLY mechanical inventory (parse
.sln+ project files, targeted grep for markers). No source modified, nothing built/run. - Generated JSON:
/Users/leonardo/GitHub/Documentation/docs/_generated/inventory-server.json - Backend ground truth (confirmed): Oracle via ODP.NET (
Oracle.DataAccess/Oracle.ManagedDataAccess), stored procedures through DALExecute*StoredProcedurewrappers. No ORM, no SQL Server / T-SQL, no Web API.
Method / tooling caveat
The interactive shell grep is a wrapper function (ugrep -G --ignore-files) that forces
basic-regex and honors ignore files, which under-counts -E alternation patterns.
All counts in the JSON were produced with real POSIX /usr/bin/grep -E (via a Python
subprocess using /bin/sh), excluding bin/ obj/ packages/ node_modules/ .git/ per the
safety brief. Where the two disagreed (e.g. SP-wrapper files 238 vs wrapper's 214) the
/usr/bin/grep value is authoritative.
Projects
- 193
Project(...)entries in the.sln= 34 solution folders (type GUID{2150E333-...-DE8}) + 159 real projects. - Languages: 83 C# (
.csproj), 76 VB.NET (.vbproj). - Project style: 155 classic (MSBuild), 4 SDK-style.
- Target frameworks:
v4.8-> 139;net8.0-> 19;net8.0-windows-> 1. (20 net8 total.) - XNET / .NET 8 migration: exactly the 20
*XNET-named projects are the net8 targets (1:1 correspondence). These are side-by-side .NET 8 re-targets of legacy 4.8 libraries (Common, Configuration, Resources, LogManager, and the BIM/IEM/Property/Global/Booking/Extension shared/interface/DAL/manager slices).
Domains (project counts, top)
IEM 10 - Global 8 - Property 8 - BIM 8 - Energy 6 - ECM 6 - Booking 6 - Accounting/Check/Document/Maintenance/ServiceDesk/Stock/WorkerKit/Census/QualityCheck/Book/WorkAccounting/Project/Cde 5 each - BulkLoader/Report/ExportService 4 - then Extension, Configuration, ArchiveManager, LogManager, Common, Resources (2) and singletons (Plugin_SAPPM, Business, DatabaseInstaller.Oracle, JobScheduler, ULM, PlanBot, FullTextIndexer, Property{XML,SVG}Export, PropertyGeoLib, InfocadServer, InfocadTester, WindowService, UpdateService, ConnectionsService, SQLScript).
Layers (vertical-slice pattern <Domain>{SharedObjects,Interface,DAL,BL,Controllers})
Interface 27 - SharedObjects 26 - Controllers 23 - DAL 20 - BL 18 - Manager 12 - Service 5 - Server 3 - Other 25 (hosts, tools, XML/SVG exporters, GeoLib, Common/Resources/Configuration, etc.).
WCF surface (thin)
[ServiceContract]interfaces: 4 files —EnergyService/Services/{IDashBoardService,IDssDashBoardService,IPolicyRetriever}.csand the generatedPropertyServiceIoT/Connected Services/NiagaraService/Reference.cs(a WCF client proxy).[OperationContract]: 4 files.System.ServiceModelreferenced in 14 files.*.svchosts: 0. NoServiceHost(...)self-hosting found. WCF here is essentially the EnergyService dashboard contracts (self/IIS-hosted elsewhere) plus one generated external client — not a broad service bus.
Windows Services
- NT-service hosts (
ServiceBase-derived, each with aProjectInstaller):InfocadServer(VB,Inherits ServiceProcess.ServiceBase) — the main server service.ECMServer(C#,: ServiceBase).IEMServer(VB,Inherits ...ServiceBase).
- Companion executables (OutputType Exe/WinExe; manage or launch the above, not
ServiceBasethemselves):ConnectionsService&UpdateService(C#, useServiceControllerto start/stop the services),IEMService(C#, launchesStartIEM.Main),WindowService(VB WinExe,Start.vb),InfocadTester(VB WinExe). - 8 projects total have
Exe/WinExeOutputType (4 Exe + 4 WinExe). - Note:
JobSchedulerandGlobalManagerare Library projects (engine/manager libraries), not standalone service hosts.
Data access — "stored procedures via ODP.NET, no ORM"
- Raw
CommandType.StoredProcedure: 1 file only (ArchiveManager/DataLayer.cs). - The real pattern is a DAL helper wrapper:
ExecuteNonQueryStoredProcedure(~1310 call sites),ExecuteQueryStoredProcedure(~942),ExecuteReaderStoredProcedure(~440), plusExecuteScalar/...Tablevariants. 238 files use these wrappers, passing bare SP names (e.g."STK_GETMEASURE","BOOKING_PHYSICALDELETEBOOK_AVA"). - Per-project concentration: GlobalManager 36, BookingManagerXNET 29, PropertyManager 27, BookManager 23, then the
*DALprojects (Stock 15, Energy 11, WorkerKit/Maintenance/Document 10 each). Full map in JSONdata_access.sp_wrapper_by_project. - ODP.NET: 251 files reference
Oracle.DataAccess/Oracle.ManagedDataAccess(classic + managed +.Client/.Types). - No ORM / no Web API confirmed:
ApiController= 0 files. (3 files referenceSystem.Web.Http—Common/CommonXNETconfig helpers andPropertyManager/DAO_Viewer30.vb— but define noApiController, so this is not a Web API surface.)
Customization / plug-in projects
- Only
Plugin_SAPPM(VB) is present in this solution. EntityLayer<Customer>,ServiceJob.*,TicketLoader*,ExternalAuth.*,ExternalDocSave.*— absent from this repo (per-customer / external plug-ins delivered outsideInfocadServer.sln).
Confidence
- Verified (mechanical): project counts & languages & TFMs; XNET<->net8 1:1;
.svc=0;ApiController=0; ServiceBase host list; SP-wrapper vs CommandType counts; ODP.NET file count. - Inferred: domain/layer classification is prefix/suffix-based (25 projects in "Other" layer — hosts/tools/exporters that don't follow the 5-layer suffix convention); WCF hosting location (contracts exist but hosting is external/IIS, not in-repo
.svc). - Not attempted: build, runtime, DB connectivity (out of scope / forbidden).