diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..773758f --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,130 @@ +# ReachOutVeevaPromoMats +Windows Service application that integrates with Veeva Vault promotional materials API and ReachOut platform. The service polls Veeva for document updates or processes dropped CSV files and forwards the data to ReachOut for synchronization. + +**ALWAYS reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.** + +## Working Effectively + +### Build Requirements - CRITICAL LIMITATION +**This application CANNOT be built on Linux.** The solution requires Windows with .NET Framework 4.8 SDK due to: +- Main project targets .NET Framework 4.8 (not supported on Linux) +- Mixed architecture with .NET Standard 2.0 models library +- Missing .NET Framework 4.8 reference assemblies on Linux + +### What DOES work on Linux: +- Package restoration: `mono nuget.exe restore ReachOutVeevaPromoMats.sln` -- takes 3 seconds (cached) to 45 seconds (first time). NEVER CANCEL. +- Building Models library only: `cd ReachOutAuth.Models && dotnet build` -- takes 1-2 seconds. +- Code analysis, exploration, and editing + +### Windows Build Commands (for reference): +- Restore packages: `nuget restore ReachOutVeevaPromoMats.sln` +- Build solution: `msbuild ReachOutVeevaPromoMats.sln /p:Configuration=Debug` -- estimated 30-60 seconds. NEVER CANCEL. +- Build release: `msbuild ReachOutVeevaPromoMats.sln /p:Configuration=Release` + +## Validation Scenarios + +**Since building requires Windows, validation on Linux is limited to:** + +### Configuration Validation +- Review `App.config` for correct settings: + - `veevaapienabled` should be `false` for development + - `dropfileenabled` can be `true` for testing file processing + - `debug` should be `true` to prevent actual API calls during development + - Drop file directory should exist: `D:\Development\ReachOut\VeevaDrop` (Windows path) + +#### Example validation commands: +```bash +# Check key configuration values +grep -n "veevaapienabled\|dropfileenabled\|debug" App.config + +# Verify logging configuration exists +ls -la NLog.config + +# Ensure required directories exist in project +ls -la API/ Models/ Configurations/ +``` + +### Code Quality Validation +- Ensure all `using` statements are properly referenced +- Verify configuration keys in `TenantConfiguration.cs` match `App.config` +- Check that logging is properly configured in `NLog.config` +- Validate API endpoints and authentication settings + +### Manual Testing Scenarios (Windows Only) +When building on Windows, test these scenarios: + +#### Interactive Console Mode: +1. Run `ReachOutVeevaPromoMats.exe` from command line +2. Verify it runs `BrokerService.doWork()` once and exits +3. Check log files are created in `./logs/` directory +4. Confirm no exceptions in logs + +#### Service Mode Testing: +1. Install as Windows Service: `sc create ReachOutVeevaPromoMats binPath= "C:\path\to\ReachOutVeevaPromoMats.exe"` +2. Start service: `sc start ReachOutVeevaPromoMats` +3. Verify service starts without errors +4. Check logs for proper timer initialization +5. Stop service: `sc stop ReachOutVeevaPromoMats` + +#### File Drop Testing: +1. Enable file drop: set `dropfileenabled="true"` in App.config +2. Create drop directory if it doesn't exist +3. Place test CSV file in drop directory +4. Run application and verify file is processed and archived +5. Check ReachOut API receives the data (if not in debug mode) + +## Repository Structure + +### Key Projects: +- **ReachOutVeevaPromoMats** (.NET Framework 4.8): Main Windows Service application +- **ReachOutAuth.Models** (.NET Standard 2.0): Shared models and data contracts + +### Important Files: +- `Program.cs`: Entry point - detects interactive vs service mode +- `BrokerService.cs`: Windows Service implementation with timers +- `BusinessLogic.cs`: Core business logic for API and file processing +- `Configurations/TenantConfiguration.cs`: Configuration management +- `App.config`: Application configuration (connection strings, API settings, file paths) +- `NLog.config`: Logging configuration +- `packages.config`: NuGet package dependencies + +### Key Directories: +- `API/`: Veeva API integration classes +- `Models/`: API response models and authentication +- `Lib/`: Third-party libraries +- `ReachOutAuth.Models/`: Shared models project + +## Common Tasks + +### Package Management: +- Download NuGet: `wget https://dist.nuget.org/win-x86-commandline/latest/nuget.exe` +- Restore packages: `mono nuget.exe restore ReachOutVeevaPromoMats.sln` -- takes 3 seconds (cached) to 45 seconds (first time). NEVER CANCEL. + +### Development Workflow: +1. Always work in Debug mode with `debug="true"` in App.config +2. Make code changes using any text editor +3. If on Windows: Build and test interactively first, then as service +4. If on Linux: Validate configuration and code quality only +5. Check logs in `./logs/` directory for any issues + +### Configuration Management: +- Application settings are in `App.config` +- Tenant-specific settings handled in `TenantConfiguration.cs` +- Always validate configuration keys exist and have correct types +- Debug mode prevents actual API calls to external services + +### Security Notes: +- Contains API credentials in `App.config` (in production, use secure configuration) +- Uses Bearer token authentication with ReachOut platform +- Basic authentication with Veeva API + +## Known Issues and Limitations: +- Cannot build on Linux due to .NET Framework 4.8 dependency +- Some NuGet packages have security vulnerabilities (RestSharp, System.Text.Json) - documented for future updates +- Mono xbuild is deprecated and doesn't support .NET Framework 4.8 +- Mixed framework targeting (4.8 + Standard 2.0) causes compatibility issues with older tooling + +## Testing: +- No automated unit tests currently exist in the repository +- Testing is manual through interactive console mode or Windows Service installation +- Validation focuses on configuration correctness and log file analysis \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9491a2f..941ffcf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,363 +1,15 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore +# Build artifacts +bin/ +obj/ +packages/ -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Oo]ut/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets +# Temporary files +nuget.exe -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ +# Visual Studio files +*.user +*.suo +*.cache -# Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file +# Logs +logs/