diff --git a/api/src/Sozsoft.Platform.Application/Intranet/IntranetAppService.cs b/api/src/Sozsoft.Platform.Application/Intranet/IntranetAppService.cs index f3f35f2..d60fd9b 100644 --- a/api/src/Sozsoft.Platform.Application/Intranet/IntranetAppService.cs +++ b/api/src/Sozsoft.Platform.Application/Intranet/IntranetAppService.cs @@ -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 _eventRepository; private readonly IIdentityUserAppService _identityUserAppService; private readonly IIdentityUserRepository _identityUserRepository; @@ -49,7 +50,8 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService ICurrentTenant currentTenant, BlobManager blobContainer, IConfiguration configuration, - + ILookupNormalizer lookupNormalizer, + IRepository eventRepository, IIdentityUserAppService identityUserAppService, IIdentityUserRepository identityUserRepository, @@ -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 departmentDict, IReadOnlyDictionary jobPositionDict) { return ObjectMapper - .Map(user) + .Map(user) .MapDepartmentAndJobPositionAssignments(departmentDict, jobPositionDict); } @@ -127,9 +130,8 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService IReadOnlyDictionary departmentDict, IReadOnlyDictionary 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) { diff --git a/api/src/Sozsoft.Platform.Domain.Shared/PlatformConsts.cs b/api/src/Sozsoft.Platform.Domain.Shared/PlatformConsts.cs index b874e59..da4282b 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/PlatformConsts.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/PlatformConsts.cs @@ -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"; diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/Seeds/TenantData.json b/api/src/Sozsoft.Platform.EntityFrameworkCore/Seeds/TenantData.json index 7e1e2a1..4a07c17 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/Seeds/TenantData.json +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/Seeds/TenantData.json @@ -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ı açı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 } diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/Seeds/TenantDataSeeder.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/Seeds/TenantDataSeeder.cs index 0e56505..2d06abd 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/Seeds/TenantDataSeeder.cs +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/Seeds/TenantDataSeeder.cs @@ -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 _branchRepository; private readonly IRepository _globalSearch; private readonly IRepository _customEndpointRepository; @@ -534,6 +535,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency public TenantDataSeeder( IClock clock, + ILookupNormalizer lookupNormalizer, IIdentityUserRepository repositoryUser, IRepository branchRepository, IRepository 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) {