namespace Core.Services; /// /// Implementation of INoteNamingService that provides note naming conventions. /// Uses "#" as the prefix for page notes and meeting notes. /// public class NoteNamingService : INoteNamingService { private const string PageNotePrefix = "#"; private const string MeetingNotePrefix = "#Meeting Notes"; private const string StudentNotePrefix = "#Student:"; /// public string GetMeetingNoteTitle(DateTime meetingDate) { return $"{MeetingNotePrefix} {meetingDate:MM/dd/yyyy}"; } /// public string GetPageNoteTitle(string pageIdentifier) { if (string.IsNullOrWhiteSpace(pageIdentifier)) { throw new ArgumentException("Page identifier cannot be null or empty", nameof(pageIdentifier)); } return $"{PageNotePrefix}{pageIdentifier}"; } /// public bool IsPageNote(string noteTitle) { if (string.IsNullOrWhiteSpace(noteTitle)) { return false; } return noteTitle.StartsWith(PageNotePrefix, StringComparison.Ordinal); } /// public bool IsMeetingNote(string noteTitle) { if (string.IsNullOrWhiteSpace(noteTitle)) { return false; } return noteTitle.StartsWith(MeetingNotePrefix, StringComparison.Ordinal); } /// public string GetStudentNoteTitle(int studentId) => $"{StudentNotePrefix}{studentId}"; /// public bool IsStudentNote(string? noteTitle) { if (string.IsNullOrWhiteSpace(noteTitle)) return false; return noteTitle.StartsWith(StudentNotePrefix, StringComparison.Ordinal); } /// public bool TryParseStudentNoteId(string? noteTitle, out int studentId) { studentId = 0; if (!IsStudentNote(noteTitle)) return false; return int.TryParse(noteTitle.AsSpan(StudentNotePrefix.Length), out studentId); } }