using System.ComponentModel.DataAnnotations; namespace BewerbungsSeite.Models.SiteContent; /// Startbereich der Seite (section id="hero"). public class HeroSection : IValidatableObject { [StringLength(ContentLimits.Kicker, ErrorMessage = ContentLimits.TooLongMessage)] public string Kicker { get; set; } = string.Empty; /// Grosse Titelzeilen. Die letzte Zeile wird farblich hervorgehoben. public List TitleLines { get; set; } = new(); [StringLength(ContentLimits.ParagraphText, ErrorMessage = ContentLimits.TooLongMessage)] public string Intro { get; set; } = string.Empty; public LinkItem PrimaryButton { get; set; } = new(); public LinkItem SecondaryButton { get; set; } = new(); /// Kleine Links unter den Buttons (LinkedIn, E-Mail, ...). public List SocialLinks { get; set; } = new(); [StringLength(ContentLimits.Url, ErrorMessage = ContentLimits.TooLongMessage)] public string PortraitImage { get; set; } = string.Empty; [StringLength(ContentLimits.AltText, ErrorMessage = ContentLimits.TooLongMessage)] public string PortraitAlt { get; set; } = string.Empty; /// /// Prueft die Titelzeilen einzeln: [StringLength] laesst sich nicht direkt /// auf eine List<string> anwenden, deshalb hier von Hand. /// public IEnumerable Validate(ValidationContext validationContext) { for (var i = 0; i < TitleLines.Count; i++) { if (TitleLines[i]?.Length > ContentLimits.Heading) { yield return new ValidationResult( $"Titelzeile {i + 1} darf höchstens {ContentLimits.Heading} Zeichen lang sein.", [nameof(TitleLines)]); } } } }