@using System.Security.Claims @using Microsoft.EntityFrameworkCore @inject JobsMedical.Web.Services.NotificationService Notifications @inject JobsMedical.Web.Data.AppDbContext Db @{ var title = ViewData["Title"] as string; int unreadCount = 0; int meId = 0; string? meName = null; bool meHasAvatar = false; if (User.Identity?.IsAuthenticated == true && int.TryParse(User.FindFirstValue(ClaimTypes.NameIdentifier), out meId)) { unreadCount = await Notifications.UnreadCountAsync(meId); var info = await Db.Users.Where(u => u.Id == meId) .Select(u => new { u.FullName, u.Phone, HasAvatar = u.Avatar != null }).FirstOrDefaultAsync(); meName = string.IsNullOrWhiteSpace(info?.FullName) ? info?.Phone : info!.FullName; meHasAvatar = info?.HasAvatar ?? false; } var meInitial = string.IsNullOrWhiteSpace(meName) ? "؟" : meName!.Trim().Substring(0, 1); // --- SEO context --- var baseUrl = $"{Context.Request.Scheme}://{Context.Request.Host}"; var path = Context.Request.Path.Value ?? "/"; var canonical = baseUrl + (path == "/" ? "" : path); // canonical ignores query string var pageDesc = ViewData["Description"] as string ?? "همکادر؛ سامانه یافتن شیفت و موقعیت استخدامی برای کادر درمان (پزشک، پرستار، ماما و تکنسین) در بیمارستانها و کلینیکهای تهران."; var pageTitle = title is null ? "همکادر | شیفت و استخدام کادر درمان" : title + " | همکادر"; var ogImage = ViewData["OgImage"] as string ?? baseUrl + "/icons/icon-512.png"; // Private/applicant areas must never be indexed. string[] noindexPrefixes = { "/Admin", "/Me", "/Employer", "/Account", "/Preferences" }; var noIndex = (ViewData["NoIndex"] as bool? ?? false) || noindexPrefixes.Any(p => path.StartsWith(p, StringComparison.OrdinalIgnoreCase)); }