//----------------------------------------------------------------------- // // Copyright (c) aliasvault. All rights reserved. // Licensed under the AGPLv3 license. See LICENSE.md file in the project root for full license information. // //----------------------------------------------------------------------- namespace AliasClientDb; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using AliasClientDb.Abstracts; /// /// FieldValue entity that stores encrypted field values. /// Supports both system fields (with FieldKey) and custom fields (with FieldDefinitionId). /// public class FieldValue : SyncableEntity { /// /// Gets or sets the field value ID. /// [Key] public Guid Id { get; set; } /// /// Gets or sets the item ID. /// [Required] public Guid ItemId { get; set; } /// /// Gets or sets the item object. /// [ForeignKey("ItemId")] public virtual Item Item { get; set; } = null!; /// /// Gets or sets the field definition ID for custom (user-defined) fields. /// NULL for system fields (which use FieldKey instead). /// public Guid? FieldDefinitionId { get; set; } /// /// Gets or sets the field definition object for custom fields. /// NULL for system fields. /// [ForeignKey("FieldDefinitionId")] public virtual FieldDefinition? FieldDefinition { get; set; } /// /// Gets or sets the system field key for predefined fields (e.g., 'login.username'). /// NULL for custom (user-defined) fields (which use FieldDefinitionId instead). /// System field metadata (label, type, etc.) is defined in code (SystemFieldRegistry), /// not in the database. /// Note: Exactly one of FieldKey or FieldDefinitionId must be non-null. /// [StringLength(100)] public string? FieldKey { get; set; } /// /// Gets or sets the encrypted value. /// public string? Value { get; set; } /// /// Gets or sets the weight for sorting field values in the UI. /// public int Weight { get; set; } = 0; }