/
IVEinzelstreife
/
ProgrammerResume
Обзор
Документация
Войти
/
IVEinzelstreife
/
ProgrammerResume
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Models/Project.cs
82 строки
3 KB
Илья Куракин
Загрузить файлы в «Models»
05 июл 2026, 09:35
Верифицирован
05 июл 2026, 09:35
8473abd
Код
Авторство
О чём код?
using ProgrammerResume.Models.Enums; using ProgrammerResume.Models.Interfaces; namespace ProgrammerResume.Models { public class Project : ISummarizable, IValitable { public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public DateTime StartDate { get; set; } public DateTime? EndDate { get; set; } public ProjectRole Role { get; set; } public string Technologies { get; set; } = string.Empty; public string? ProjectUrl { get; set; } public bool IsSuccessful { get; set; } = true; public int DurationInMonths { get { var endDate = EndDate ?? DateTime.Now; var months = (endDate.Year - StartDate.Year) * 12 + (endDate.Month - StartDate.Month); return Math.Max(0, months); } } public bool IsOngoing => !EndDate.HasValue; // Конструктор по-умолчанию public Project() { StartDate = DateTime.Now; } // Конструктор с параметрами public Project(string title, string description, DateTime startDate, ProjectRole role) { Title = title ?? throw new ArgumentNullException(nameof(title)); Description = description ?? string.Empty; StartDate = startDate; Role = role; } // Методы public string[] GetTechnologiesArray() { if (string.IsNullOrWhiteSpace(Technologies)) return Array.Empty<string>(); return Technologies .Split('.', StringSplitOptions.RemoveEmptyEntries) .Select(t => t.Trim()) .ToArray(); } // Реализация интерфейсов public string GetSummary() { var status = IsOngoing ? "В процессе" : "Завершен"; return $"{Title} ({Role}, {status}, {DurationInMonths} мес.)"; } public bool IsValid() { return !GetValidationErrors().Any(); } public IEnumerable<string> GetValidationErrors() { var errors = new List<string>(); if (string.IsNullOrWhiteSpace(Title)) errors.Add("Название проекта указать обязательно"); if (StartDate > DateTime.Now.AddYears(1)) errors.Add("Дата начала указана в будущем"); if (EndDate.HasValue && EndDate.Value < StartDate) errors.Add("Дата окончания раньше времени начала"); return errors; } // Переопределение наследованного метода public override string ToString() { return GetSummary(); } } }