# Changelog 2024

## December 2024

### New Features

#### Metadata Lookups (#381)

* Added metadata lookup system
* Better data relationships and lookups

#### Query Enhancements

* Added ColumnOverride.IncludeAllContent
* Include all content in query results

#### [Courier ](../../v6/documentation/courier-feature)Options

* Added option to disable courier and inform if no recipients
* Better message handling control

#### User Creation

* Added CreateForUser with OriginalUser
* Track original user in impersonation scenarios

### Fixes

* TimeZone America/Nuuk was renamed
* TimeZone Europe/Kyiv was renamed
* KeyValueList distincts wrong when text search is used

## November 2024

### New Features

#### .NET 9.0 Migration

* **BREAKING**: Migrated to .NET 9.0, removed .NET 6.0 support
* Take advantage of latest performance improvements

#### InitializeByCtorAttribute

* Added InitializeByCtorAttribute
* Support for constructor-based initialization

#### [Courier Enhancements](../../v6/documentation/courier-feature)

* Idempotent courier messages (RavenDB)
* Prevent duplicate message processing

#### Performance Optimizations

* Optimize .Run for non-enumerables
* LeastRecentlyUsedCache/Set implementation
* Builder optimizations
* Convert Language to ILookupKeyValueData

### Fixes

* Typo in SynchronizeBlacklist
* Certificate loading on .NET 9 (RavenDB)
* Keep POAWR casts logic in sync with FromServiceString

### Maintenance

* Updated packages
* Builder marked as disposable with lazy scope creation
* Use LINQ and collection expressions

## October 2024

### New Features

#### [Courier Messaging System ](../../v6/documentation/courier-feature)(RavenDB)

* Added Courier for message queuing
* Support for delayed messages
* MessageType hook for custom handling
* Reliable async messaging

#### .NET 9.0 Support

* Added .NET 9.0 support
* Prepare for next LTS release

#### TranslatedString Improvements

* Added TranslatedString.DefaultGetLanguages
* Various TranslatedString improvements
* Better multilingual support

#### CLI Enhancements

* Added vidyano-synchronize-schema CLI option
* Easier schema synchronization

#### Authentication Extensions

* Expose HttpContext on ForgotPasswordArgs
* Add hook for GetExpressionForUserGuidColumn

### Fixes

* Report warning for minimum level was wrong

### Breaking Changes

* Keep semicolon in To field as single MailMessage
* Changes email parsing behavior

### Maintenance

* AppHarbor no longer exists (removed references)
* Consistent Tag properties across system
* Provide explicit cast to PO\[] for AsDetail attributes

## September 2024

### New Features

#### ExecuteBatch API

* Initial ExecuteBatch and split ExecuteQuery implementation
* Handle GetPersistentObject, GetQuery, and ExecuteAction in batch
* Handle step assignments with DynamicAssignment
* Major performance improvement for bulk operations

#### TranslatedString Enhancements

* Added TranslatedString.IsValid
* Better validation for translations

#### LabelHelper

* Added LabelHelper for consistent label management
* Centralized label generation

#### RavenDB Source Generator

* Provide attributes for the source generator
* Better code generation support

### Fixes

* Detail attribute loading after save of new object
* Handle invalid sorting in .NET Core
* Fixed issue #356

### Maintenance

* Performance: Prefer JsonPoolConvert usage
* Compiler optimize unused ApplicationInsights
* Updated packages
* Show tooltip for locked settings

## August 2024

### New Features

#### Repeating Jobs

* Expose IRepeatingJobManager
* Added RegisterJobAsync method

#### DataType Support

* Support \[DataType] attribute
* Better validation and UI hints

#### Settings Builder Extensions

* Added ISettingsBuilder.MultiString/Custom
* More flexible settings configuration

#### Updatable Logs

* Added IUpdatableLog.Delete
* Better log management

#### Web Application Integration

* Added UseVidyano directly on WebApplication
* Simplified startup configuration

#### Query Column Overrides

* Added ColumnOverrides for GetQuery request
* Customize query result columns

### Fixes

* AsReadOnly setting didn't work for DataType Password
* Missing DataMember attributes
* Missing reserved web2 words

### Maintenance

* Expose StartupErrors for manual invocation
* Updated documentation
* Updated packages

## July 2024

### New Features

#### Memory Diagnostics (#374)

* Add memory information to diagnostics
* Better monitoring of application memory usage

#### Log Hashing (RavenDB) (#375)

* **BREAKING**: Added MessageHash to Raven logs
* Enables deduplication and better log analysis

#### Query Sorting (#377)

* Allow SortOptions to be passed to GetQuery
* More flexible query result ordering

#### Date Handling (#376)

* Improved invalid date handling with tests
* More robust date parsing

#### Description Attributes

* Read \[Description] attribute for custom actions
* Better auto-documentation

### Fixes

* **BREAKING**: Logs\_Search index was wrong
* Missing alias in SQL statement for IsUserAuthTokenRevoked (PostgreSQL)

### Maintenance

* Updated packages
* Performance: Prefer lockless access in Optimizer
* Trim and normalize line endings for Description

## June 2024

### New Features

#### RavenDB Database Check

* Added default enabled RavenDBOptions.CheckDatabaseExists
* Automatic database existence verification

#### Settings Improvements

* TrackLastLoginDateWithTime setting
* Decode Settings ID if not found
* Better settings management

#### Logging Enhancements

* Allow verbose logs on GetApplication
* Log more data if ExecuteAction throws exception
* Handle Language before user exists (e.g., invalid password)

#### Performance

* Use Environment.WorkingSet for showing memory usage
* Removed lock for GetCachedEntityModel

### Fixes

* Fixed cacheupdate reloading loop
* Handle issue where user has a group ID that no longer exists

### Maintenance

* Dropped .NET 7 support (end of life)
* Updated packages to .NET 8
* Updated Web3 for test projects

## May 2024

### New Features

#### Query Optimizations

* Added TryGetChildCollectionAsQueryable
* Makes detail queries use database queries for better performance

#### Caching Improvements

* Use byte array directly for cache set
* Better performance for cache operations

#### IgnoreProperty Extensions

* Allow IgnorePropertyAttribute on Context as well
* More flexible property ignoring

#### Proxy Support

* Added GetClientIpFromProxiedRequest hook
* Better support for applications behind proxies

### Fixes

* Fixed issue with HasGlobalSearch not being set
* Made verbose log more fault resilient

### Maintenance

* Updated packages
* Publish artifacts for release pipeline

## April 2024

### New Features

#### Advanced Hooks

* Added Advanced.PreUserSettings
* Customize user settings before loading

#### KeyValueListHandler

* Added KeyValueListHandler for custom key-value processing
* More flexible data handling

#### Two-Factor Authentication

* Integrate TwoFactor with IDistributedCache to prevent replay attacks
* More secure authentication flow

### Fixes

* Reordering program units does not sort items correctly
* Handle RequestUri when HttpContext is disposed

### Maintenance

* Removed obsolete code for DocumentFormat
* Updated packages
* Added mail documentation
* NonNullable consistency improvements

## March 2024

### New Features

#### LazySessionOperations Helper (RavenDB)

* Added LazySessionOperationsEx.NullLoad helper
* Optimizes null checking in lazy operations

#### Array Helpers

* Added AsArray helper
* Fixed GetEntities bugs

#### Report Improvements

* Prefer keys by default in GetReport
* Added Advanced.IsReportAllowed hook

#### Authentication Enhancements

* Added AuthenticatorService.GetAuthTokenExpiration
* Better token management

### Fixes

* Handle IsAllowed on AsyncStreamingAction
* Fixed issue on New with shadow FK in Entity Framework Core (#372)

### Maintenance

* Updated demo JSON files
* Switch demo to Web3
* Added mode to only update JSON files
* Manager.GetGroup nullability improvements

## February 2024

### New Features

#### ISplittedValueObjectHandler Interface (#369, #370)

* New interface for handling split value objects
* Enables custom value object splitting logic

#### Caching Improvements

* Added and implemented AggressivelyCacheForAnHour
* Better performance for frequently accessed data

#### Manager Helpers

* Added Manager.HasCorrectTimeZoneOffset helpers
* Better timezone handling in applications

#### OpenOperation Extensions

* Added OpenOperation.WithPreClient
* Allows pre-processing before client operations

#### KeyValueList Enhancements

* Added generic KeyValueListAttribute
* More flexible key-value list handling

#### Virtual Entity Loading

* Better handling of loading virtual entities
* Improved performance for virtual entity operations

#### Extension Methods

* Added CloneAndAdd extension method (#367)
* Simplifies collection manipulation

### Fixes

* Don't use AsNoTracking if not optimized
* Fixed Abstractions using wrong XML file
* Fixed Web2 vulcanize call without path
* Missing dialog translations

### Maintenance

* Security updates for packages
* Removed unused CommonMark package
* Updated packages
* Prefer Attribute IsDefined for better performance
* Prefer User Name instead of DisplayName in logs

## January 2024

### New Features

#### Entity Helper Methods

* Added PO/POA GetEntity/GetRequiredEntity helper methods
* Simplifies entity retrieval with null safety

#### Azure Storage Enhancements

* Added AzureStorageAccount HasKey/GetContainer methods
* Better Azure blob storage integration

#### BinaryFile Improvements

* Added BinaryFile implicit cast to string and TryParse
* Easier file handling and conversion

#### RavenDB Query Helpers

* Added IRavenQueryable GetSum helper
* Simplifies aggregate queries in RavenDB

#### PersistentObject Enhancements

* Added PersistentObjectTypeName helper
* Added POA.Actions for accessing available actions
* Hide Edit/New/Delete lines on PO Rights detail query when not needed

### Fixes

* Ignored disposed DatabaseConnectionState for RavenDB
* Ignored ConnectionResetException in custom API methods
* Fixed calling RefreshOperation with only type name
* Fixed bulk construct on POA/PUI/Settings using disposed actions
* Fixed POA.Actions implementation

### Maintenance

* Updated copyright year to 2024
* Updated NuGet packages
* Added XML documentation comments

***

_Note: Commits marked with (test) have been excluded from this changelog as they are internal testing commits._
