using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace AutoServiceApp.Models
{
/// <summary>
/// Модель транспортного средства
/// </summary>
public class Vehicle
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required(ErrorMessage = "VIN номер обязателен")]
[Display(Name = "VIN номер")]
[StringLength(17, MinimumLength = 17, ErrorMessage = "VIN номер должен содержать ровно 17 символов")]
[RegularExpression(@"^[A-HJ-NPR-Z0-9]{17}$", ErrorMessage = "Неверный формат VIN номера")]
public string Vin { get; set; } = string.Empty;
[Required(ErrorMessage = "Государственный номер обязателен")]
[Display(Name = "Государственный номер")]
[StringLength(15, ErrorMessage = "Госномер не должен превышать 15 символов")]
public string LicensePlate { get; set; } = string.Empty;
[Required(ErrorMessage = "Марка обязательна")]
[Display(Name = "Марка")]
[StringLength(50, ErrorMessage = "Марка не должна превышать 50 символов")]
public string Brand { get; set; } = string.Empty;
[Required(ErrorMessage = "Модель обязательна")]
[Display(Name = "Модель")]
[StringLength(50, ErrorMessage = "Модель не должна превышать 50 символов")]
public string Model { get; set; } = string.Empty;
[Display(Name = "Год выпуска")]
[Range(1900, 2099, ErrorMessage = "Неверный год выпуска")]
public int? Year { get; set; }
[Display(Name = "Пробег (км)")]
[Range(0, 9999999, ErrorMessage = "Неверное значение пробега")]
public int? Mileage { get; set; }
[Display(Name = "Цвет")]
[StringLength(30, ErrorMessage = "Цвет не должен превышать 30 символов")]
public string? Color { get; set; }
// Внешний ключ
[Required(ErrorMessage = "Клиент обязателен")]
[Display(Name = "Клиент")]
public int ClientId { get; set; }
// Навигационные свойства
[ForeignKey("ClientId")]
public virtual Client? Client { get; set; }
public virtual ICollection<ServiceRequest>? ServiceRequests { get; set; }
// Метод для отображения
public override string ToString()
{
return $"{Brand} {Model} ({LicensePlate})";
}
}
}