Identity NomalizeName

This commit is contained in:
Sedat Öztürk 2026-06-02 23:24:06 +03:00
parent d161e0f4b9
commit a9e1a15183
4 changed files with 59 additions and 54 deletions

View file

@ -18,6 +18,7 @@ using Volo.Abp.Identity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Identity;
namespace Sozsoft.Platform.Intranet;
@ -27,7 +28,7 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
private readonly ICurrentTenant _currentTenant;
private readonly BlobManager _blobContainer;
private readonly IConfiguration _configuration;
private readonly ILookupNormalizer _lookupNormalizer;
private readonly IRepository<Event, Guid> _eventRepository;
private readonly IIdentityUserAppService _identityUserAppService;
private readonly IIdentityUserRepository _identityUserRepository;
@ -49,6 +50,7 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
ICurrentTenant currentTenant,
BlobManager blobContainer,
IConfiguration configuration,
ILookupNormalizer lookupNormalizer,
IRepository<Event, Guid> eventRepository,
IIdentityUserAppService identityUserAppService,
@ -71,6 +73,7 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
_currentTenant = currentTenant;
_blobContainer = blobContainer;
_configuration = configuration;
_lookupNormalizer = lookupNormalizer;
_eventRepository = eventRepository;
_identityUserAppService = identityUserAppService;
_identityUserRepository = identityUserRepository;
@ -114,12 +117,12 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
}
private UserInfoViewModel MapUserInfoViewModel(
IdentityUser user,
Volo.Abp.Identity.IdentityUser user,
IReadOnlyDictionary<Guid, string> departmentDict,
IReadOnlyDictionary<Guid, JobPosition> jobPositionDict)
{
return ObjectMapper
.Map<IdentityUser, UserInfoViewModel>(user)
.Map<Volo.Abp.Identity.IdentityUser, UserInfoViewModel>(user)
.MapDepartmentAndJobPositionAssignments(departmentDict, jobPositionDict);
}
@ -127,9 +130,8 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
IReadOnlyDictionary<Guid, string> departmentDict,
IReadOnlyDictionary<Guid, JobPosition> jobPositionDict)
{
var normalizedAdmin = PlatformConsts.AbpIdentity.User.AdminEmailDefaultValue;
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(normalizedAdmin)
?? await _identityUserRepository.FindByNormalizedEmailAsync(normalizedAdmin);
var normalizedAdmin = _lookupNormalizer.NormalizeName(PlatformConsts.AbpIdentity.User.AdminEmailDefaultValue);
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(normalizedAdmin);
if (user == null && CurrentUser.Id.HasValue)
{

View file

@ -162,7 +162,7 @@ public static class PlatformConsts
public const string AdminRoleName = "admin";
public const string AdminNameDefaultValue = "Sedat";
public const string AdminSurNameDefaultValue = "ÖZTÜRK";
public const string AdminEmailDefaultValue = "SYSTEM@SOZSOFT.COM";
public const string AdminEmailDefaultValue = "system@sozsoft.com";
public const string AdminPasswordDefaultValue = "1q2w3E*";
public const string AdminPhoneNumberDefaultValue = "05449476346";
public const string AdminRocketUsernameDefaultValue = "sedat.ozturk";

View file

@ -202,7 +202,7 @@
"Summary": "blog.posts.ai.excerpt",
"CoverImage": "https://images.pexels.com/photos/8386434/pexels-photo-8386434.jpeg?auto=compress&cs=tinysrgb&w=1920",
"CategoryName": "blog.categories.technology",
"Author": "SYSTEM@SOZSOFT.COM"
"Author": "system@sozsoft.com"
},
{
"Title": "blog.posts.web.title",
@ -213,7 +213,7 @@
"Summary": "blog.posts.web.excerpt",
"CoverImage": "https://images.pexels.com/photos/11035471/pexels-photo-11035471.jpeg?auto=compress&cs=tinysrgb&w=1920",
"CategoryName": "blog.categories.webdev",
"Author": "SYSTEM@SOZSOFT.COM"
"Author": "system@sozsoft.com"
},
{
"Title": "blog.posts.security.title",
@ -224,7 +224,7 @@
"Summary": "blog.posts.security.excerpt",
"CoverImage": "https://images.pexels.com/photos/5380642/pexels-photo-5380642.jpeg?auto=compress&cs=tinysrgb&w=1920",
"CategoryName": "blog.categories.security",
"Author": "SYSTEM@SOZSOFT.COM"
"Author": "system@sozsoft.com"
},
{
"Title": "blog.posts.mobile.title",
@ -235,7 +235,7 @@
"ReadTime": "4 dk",
"CoverImage": "https://images.pexels.com/photos/13017583/pexels-photo-13017583.jpeg?auto=compress&cs=tinysrgb&w=1920",
"CategoryName": "blog.categories.mobile",
"Author": "SYSTEM@SOZSOFT.COM"
"Author": "system@sozsoft.com"
},
{
"Title": "blog.posts.database.title",
@ -246,7 +246,7 @@
"ReadTime": "8 dk",
"CoverImage": "https://images.pexels.com/photos/325229/pexels-photo-325229.jpeg?auto=compress&cs=tinysrgb&w=1920",
"CategoryName": "blog.categories.database",
"Author": "SYSTEM@SOZSOFT.COM"
"Author": "system@sozsoft.com"
},
{
"Title": "blog.posts.digital.title",
@ -257,7 +257,7 @@
"ReadTime": "6 dk",
"CoverImage": "https://images.pexels.com/photos/7681091/pexels-photo-7681091.jpeg?auto=compress&cs=tinysrgb&w=1920",
"CategoryName": "blog.categories.digital",
"Author": "SYSTEM@SOZSOFT.COM"
"Author": "system@sozsoft.com"
}
],
"GlobalSearch": [
@ -341,7 +341,7 @@
"PermissionsJson": [
{
"ResourceType": "User",
"ResourceId": "SYSTEM@SOZSOFT.COM"
"ResourceId": "system@sozsoft.com"
}
]
}
@ -1464,7 +1464,7 @@
"content": "Ankara ofisimiz 1 Kasım tarihinde hizmete başlıyor! Tüm çalışanlarımızıılış törenimize davet ediyoruz.",
"excerpt": "Ankara ofisimiz 1 Kasım tarihinde hizmete başlıyor!",
"category": "general",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"publishDate": "12-10-2024",
"isPinned": true,
"viewCount": 0,
@ -1475,7 +1475,7 @@
"content": "Yıl sonu performans değerlendirmelerimiz 20 Ekim - 5 Kasım tarihleri arasında gerçekleştirilecektir. Lütfen formları zamanında doldurunuz.",
"excerpt": "Yıl sonu performans değerlendirmeleri başlıyor.",
"category": "event",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"publishDate": "08-10-2024",
"expiryDate": "05-11-2024",
"isPinned": true,
@ -1486,7 +1486,7 @@
"content": "Bu Cumartesi saat 02: 00 - 06: 00 arası sistemlerimizde bakım çalışması yapılacaktır. Bu süre içinde sistemlere erişim sağlanamayacaktır.",
"excerpt": "Cumartesi gecesi planlı bakım çalışması",
"category": "urgent",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"publishDate": "08-10-2024",
"isPinned": false,
"viewCount": 0
@ -1496,7 +1496,7 @@
"content": "Yazılım Geliştirme ekibimiz için React İleri Seviye eğitimi 25-26 Ekim tarihlerinde düzenlenecektir. Katılım için IK birimine başvurunuz.",
"excerpt": "React İleri Seviye eğitimi kayıtları başladı",
"category": "event",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"publishDate": "09-10-2024",
"isPinned": false,
"viewCount": 0
@ -1506,7 +1506,7 @@
"content": "Bilgi güvenliği politikamız güncellenmiştir. Tüm çalışanlarımızın yeni politikayı okuması ve onaylaması gerekmektedir.",
"excerpt": "Güvenlik politikası güncellendi - Onay gerekli",
"category": "urgent",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"publishDate": "04-10-2024",
"isPinned": true,
"viewCount": 0
@ -1680,42 +1680,42 @@
"SocialPosts": [
{
"content": "Yeni proje üzerinde çalışıyoruz! React ve TypeScript ile harika bir deneyim oluşturuyoruz. Ekip çalışması harika gidiyor! 🚀",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"likeCount": 0,
"isLiked": false,
"isOwnPost": true
},
{
"content": "Bu hafta sprint planlamasını yaptık. Ekibimizle birlikte yeni özellikleri değerlendirdik. Heyecan verici bir hafta olacak!",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"likeCount": 0,
"isLiked": false,
"isOwnPost": true
},
{
"content": "Yeni tasarım sistemimizin ilk prototipini hazırladık! Kullanıcı deneyimini iyileştirmek için çok çalıştık. Geri bildirimlerinizi bekliyorum! 🎨",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"likeCount": 0,
"isLiked": false,
"isOwnPost": true
},
{
"content": "CI/CD pipeline güncellememiz tamamlandı! Deployment süremiz %40 azaldı. Otomasyonun gücü 💪",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"likeCount": 0,
"isLiked": false,
"isOwnPost": true
},
{
"content": "Ekip üyelerimize yeni eğitim programımızı duyurmak istiyorum! 🎓 React, TypeScript ve Modern Web Geliştirme konularında kapsamlı bir program hazırladık.",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"likeCount": 0,
"isLiked": false,
"isOwnPost": true
},
{
"content": "Bugün müşteri ile harika bir toplantı yaptık! Yeni projenin detaylarını konuştuk. 🎯",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"likeCount": 0,
"isLiked": false,
"isOwnPost": true
@ -1801,53 +1801,53 @@
"SocialComments": [
{
"postContent": "Yeni proje üzerinde çalışıyoruz! React ve TypeScript ile harika bir deneyim oluşturuyoruz. Ekip çalışması harika gidiyor! 🚀",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"content": "Harika görünüyor! Başarılar 👏"
},
{
"postContent": "Yeni proje üzerinde çalışıyoruz! React ve TypeScript ile harika bir deneyim oluşturuyoruz. Ekip çalışması harika gidiyor! 🚀",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"content": "TypeScript gerçekten fark yaratıyor!"
},
{
"postContent": "Bu hafta sprint planlamasını yaptık. Ekibimizle birlikte yeni özellikleri değerlendirdik. Heyecan verici bir hafta olacak!",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"content": "Mesajlaşma özelliğine kesinlikle ihtiyacımız var!"
},
{
"postContent": "Yeni tasarım sistemimizin ilk prototipini hazırladık! Kullanıcı deneyimini iyileştirmek için çok çalıştık. Geri bildirimlerinizi bekliyorum! 🎨",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"content": "Tasarımlar çok şık! Renk paleti özellikle güzel 😍"
},
{
"postContent": "Yeni tasarım sistemimizin ilk prototipini hazırladık! Kullanıcı deneyimini iyileştirmek için çok çalıştık. Geri bildirimlerinizi bekliyorum! 🎨",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"content": "Dark mode opsiyonu da olacak mı?"
},
{
"postContent": "CI/CD pipeline güncellememiz tamamlandı! Deployment süremiz %40 azaldı. Otomasyonun gücü 💪",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"content": "Harika iş! Detayları paylaşabilir misin?"
},
{
"postContent": "Ekip üyelerimize yeni eğitim programımızı duyurmak istiyorum! 🎓 React, TypeScript ve Modern Web Geliştirme konularında kapsamlı bir program hazırladık.",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"content": "Ne zaman başlıyor?"
},
{
"postContent": "Ekip üyelerimize yeni eğitim programımızı duyurmak istiyorum! 🎓 React, TypeScript ve Modern Web Geliştirme konularında kapsamlı bir program hazırladık.",
"userName": "SYSTEM@SOZSOFT.COM",
"userName": "system@sozsoft.com",
"content": "Gelecek hafta başlıyoruz! Kayıt linki mail ile paylaşılacak."
}
],
"SocialLikes": [
{
"postContent": "Yeni proje üzerinde çalışıyoruz! React ve TypeScript ile harika bir deneyim oluşturuyoruz. Ekip çalışması harika gidiyor! 🚀",
"userName": "SYSTEM@SOZSOFT.COM"
"userName": "system@sozsoft.com"
},
{
"postContent": "Yeni tasarım sistemimizin ilk prototipini hazırladık! Kullanıcı deneyimini iyileştirmek için çok çalıştık. Geri bildirimlerinizi bekliyorum! 🎨",
"userName": "SYSTEM@SOZSOFT.COM"
"userName": "system@sozsoft.com"
}
],
"EventTypes": [
@ -2028,7 +2028,7 @@
"Description": "Tüm departmanların katılımıyla düzenlenen geleneksel yaz futbol turnuvası.",
"Place": "Şirket Kampüsü Spor Alanı",
"Status": "published",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"ParticipantsCount": 64,
"IsPublished": true,
"Likes": 0,
@ -2043,7 +2043,7 @@
"Description": "Çalışanlarımıza özel, rehber eşliğinde 2 günlük kültürel gezi.",
"Place": "Kapadokya, Nevşehir",
"Status": "published",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"ParticipantsCount": 25,
"IsPublished": true,
"Likes": 0,
@ -2058,7 +2058,7 @@
"Description": "Caz müziğinin en güzel örneklerinin canlı performanslarla sunulacağı özel akşam.",
"Place": "Şirket Konferans Salonu",
"Status": "published",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"ParticipantsCount": 40,
"IsPublished": true,
"Likes": 0,
@ -2069,55 +2069,55 @@
"EventComments": [
{
"EventName": "Yaz Futbol Turnuvası 2025",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "Muhteşem bir gündü! Yılın en güzel etkinliği 🎉",
"Likes": 12
},
{
"EventName": "Yaz Futbol Turnuvası 2025",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "Voleybol turnuvası harikaydı, gelecek yıl yine yapalım!",
"Likes": 8
},
{
"EventName": "Kültür Gezisi: Kapadokya",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "Ekibimiz 2. oldu! Çok gurur duydum herkesle 💪",
"Likes": 15
},
{
"EventName": "Kültür Gezisi: Kapadokya",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "Gece boyunca kod yazmak ve pizza yemek priceless! 🍕",
"Likes": 10
},
{
"EventName": "Müzik Dinletisi: Jazz Akşamı",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "İT departmanı şampiyon oldu! Gelecek sene kupayı koruyacağız 🏆",
"Likes": 18
},
{
"EventName": "Müzik Dinletisi: Jazz Akşamı",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "Yılın en şık gecesi! Organizasyon mükemmeldi 👏",
"Likes": 25
},
{
"EventName": "Müzik Dinletisi: Jazz Akşamı",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "Tombala hediyelerim harika, çok teşekkürler! 🎁",
"Likes": 14
},
{
"EventName": "Müzik Dinletisi: Jazz Akşamı",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "Müzik grubunuz süperdi, dans pistinden ayrılamadık! 🎵",
"Likes": 19
},
{
"EventName": "Müzik Dinletisi: Jazz Akşamı",
"UserName": "SYSTEM@SOZSOFT.COM",
"UserName": "system@sozsoft.com",
"Content": "İlk defa ebru yaptım, çok huzurlu bir deneyimdi 🎨",
"Likes": 11
}

View file

@ -14,9 +14,9 @@ using Volo.Abp.Identity;
using Volo.Abp.Timing;
using System.Collections.Generic;
using Volo.Abp.MultiTenancy;
using Sozsoft.Platform.Extensions;
using System.Linq;
using Sozsoft.Platform.Enums;
using Microsoft.AspNetCore.Identity;
namespace Sozsoft.Platform.Data.Seeds;
@ -485,6 +485,7 @@ public class ProductSeedDto
public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
{
private readonly IClock _clock;
private readonly ILookupNormalizer _lookupNormalizer;
private readonly IRepository<Branch, Guid> _branchRepository;
private readonly IRepository<GlobalSearch, int> _globalSearch;
private readonly IRepository<CustomEndpoint, Guid> _customEndpointRepository;
@ -534,6 +535,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
public TenantDataSeeder(
IClock clock,
ILookupNormalizer lookupNormalizer,
IIdentityUserRepository repositoryUser,
IRepository<Branch, Guid> branchRepository,
IRepository<GlobalSearch, int> globalSearch,
@ -583,6 +585,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
)
{
_clock = clock;
_lookupNormalizer = lookupNormalizer;
_repositoryUser = repositoryUser;
_branchRepository = branchRepository;
_globalSearch = globalSearch;
@ -1071,7 +1074,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
if (exists)
continue;
var user = await _repositoryUser.FindByNormalizedUserNameAsync(item.UserName);
var user = await _repositoryUser.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName(item.UserName));
await _announcementRepository.InsertAsync(new Announcement
{
Title = item.Title,
@ -1145,7 +1148,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
if (exists)
continue;
var user = await _repositoryUser.FindByNormalizedUserNameAsync(item.UserName);
var user = await _repositoryUser.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName(item.UserName));
await _socialPostRepository.InsertAsync(new SocialPost(Guid.NewGuid())
{
@ -1235,7 +1238,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
if (exists)
continue;
var user = await _repositoryUser.FindByNormalizedUserNameAsync(item.UserName);
var user = await _repositoryUser.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName(item.UserName));
await _socialCommentRepository.InsertAsync(new SocialComment(Guid.NewGuid())
{
UserId = user != null ? user.Id : null,
@ -1255,7 +1258,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
if (exists)
continue;
var user = await _repositoryUser.FindByNormalizedUserNameAsync(item.UserName);
var user = await _repositoryUser.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName(item.UserName));
await _socialLikeRepository.InsertAsync(new SocialLike(Guid.NewGuid())
{
SocialPostId = post != null ? post.Id : Guid.Empty,
@ -1296,7 +1299,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
{
var category = await _eventCategoryRepository.FirstOrDefaultAsync(x => x.Name == item.CategoryName);
var type = await _eventTypeRepository.FirstOrDefaultAsync(x => x.Name == item.TypeName);
var user = await _repositoryUser.FindByNormalizedUserNameAsync(item.UserName);
var user = await _repositoryUser.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName(item.UserName));
if (category != null && type != null)
{