using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Managing.Common; using Microsoft.EntityFrameworkCore; using static Managing.Common.Enums; namespace Managing.Infrastructure.Databases.PostgreSql.Entities; [Table("Users")] [Index(nameof(Name), IsUnique = true)] public class UserEntity { [Key] public int Id { get; set; } [Required] [MaxLength(255)] public required string Name { get; set; } [MaxLength(255)] public string? AgentName { get; set; } public string? AvatarUrl { get; set; } public string? TelegramChannel { get; set; } public string? OwnerWalletAddress { get; set; } public DateTimeOffset? LastConnectionDate { get; set; } public bool IsAdmin { get; set; } // User Settings - Trading Configuration [Column(TypeName = "decimal(18,8)")] public decimal? LowEthAmountAlert { get; set; } = 1.5m; // Default: MinimumTradeEthBalanceUsd public bool EnableAutoswap { get; set; } = false; [Column(TypeName = "decimal(18,8)")] public decimal? AutoswapAmount { get; set; } = 3m; // Default: AutoSwapAmount public int? MaxWaitingTimeForPositionToGetFilledSeconds { get; set; } = 600; // Default: 10 minutes (600 seconds) [Column(TypeName = "decimal(18,8)")] public decimal? MaxTxnGasFeePerPosition { get; set; } = 1.5m; // Default: MaximumGasFeeUsd public bool IsGmxEnabled { get; set; } = false; [Column(TypeName = "decimal(5,2)")] public decimal? GmxSlippage { get; set; } = 0.5m; // Default: 0.5% slippage for GMX trades // User Settings - Indicator Combo Configuration public Confidence? MinimumConfidence { get; set; } = Confidence.Medium; // Default: Medium confidence for context indicators [Column(TypeName = "decimal(5,4)")] public decimal? TrendStrongAgreementThreshold { get; set; } = 0.66m; // Default: 66% agreement required [Column(TypeName = "decimal(5,4)")] public decimal? SignalAgreementThreshold { get; set; } = 0.5m; // Default: 50% agreement required public bool? AllowSignalTrendOverride { get; set; } = true; // Default: Allow signal strategies to override trends public TradingExchanges? DefaultExchange { get; set; } = TradingExchanges.GmxV2; // Default exchange // Navigation properties public virtual ICollection Accounts { get; set; } = new List(); }