diff --git a/DadmehrGostar.sln b/DadmehrGostar.sln
index 358d6d87..f31d5bcb 100644
--- a/DadmehrGostar.sln
+++ b/DadmehrGostar.sln
@@ -104,6 +104,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GozareshgirProgramManager.D
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GozareshgirProgramManager.Infrastructure", "ProgramManager\src\Infrastructure\GozareshgirProgramManager.Infrastructure\GozareshgirProgramManager.Infrastructure.csproj", "{408281FE-615F-4CBE-BD95-2E86F5ACC6C3}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared.Contracts", "Shared.Contracts\Shared.Contracts.csproj", "{08B234B6-783B-44E9-9961-4F97EAD16308}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -226,6 +228,10 @@ Global
{408281FE-615F-4CBE-BD95-2E86F5ACC6C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{408281FE-615F-4CBE-BD95-2E86F5ACC6C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{408281FE-615F-4CBE-BD95-2E86F5ACC6C3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {08B234B6-783B-44E9-9961-4F97EAD16308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {08B234B6-783B-44E9-9961-4F97EAD16308}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {08B234B6-783B-44E9-9961-4F97EAD16308}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {08B234B6-783B-44E9-9961-4F97EAD16308}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/GozareshgirProgramManager.Application.csproj b/ProgramManager/src/Application/GozareshgirProgramManager.Application/GozareshgirProgramManager.Application.csproj
index e20615bf..41ec592d 100644
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/GozareshgirProgramManager.Application.csproj
+++ b/ProgramManager/src/Application/GozareshgirProgramManager.Application/GozareshgirProgramManager.Application.csproj
@@ -14,6 +14,7 @@
+
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Checkouts/Commands/CreateCheckout/CreateOrEditCheckoutCommandHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Checkouts/Commands/CreateCheckout/CreateOrEditCheckoutCommandHandler.cs
index d7704b1f..3536ad0e 100644
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Checkouts/Commands/CreateCheckout/CreateOrEditCheckoutCommandHandler.cs
+++ b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Checkouts/Commands/CreateCheckout/CreateOrEditCheckoutCommandHandler.cs
@@ -15,6 +15,7 @@ using MediatR;
using PersianTools.Core;
using System.Runtime.InteropServices;
using Microsoft.EntityFrameworkCore;
+using Shared.Contracts.Holidays;
namespace GozareshgirProgramManager.Application.Modules.Checkouts.Commands.CreateCheckout;
@@ -25,16 +26,18 @@ public class CreateOrEditCheckoutCommandHandler : IBaseCommandHandler Handle(CreateOrEditCheckoutCommand request, CancellationToken cancellationToken)
@@ -182,9 +185,7 @@ public class CreateOrEditCheckoutCommandHandler : IBaseCommandHandlerx.Holidaydate >= start && x.Holidaydate <= end).ToListAsync();
-
-
+ var holidays = await _holidayQueryService.GetHolidaysInDates(start, end) ;
int mandatoryHours = 0;
for (var currentDay = persianStart; currentDay <= persianEnd; currentDay = currentDay.AddDays(1))
{
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/LoginUser/LoginUserCommand.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/LoginUser/LoginUserCommand.cs
deleted file mode 100644
index 80d51cb2..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/LoginUser/LoginUserCommand.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-using MediatR;
-
-namespace GozareshgirProgramManager.Application.Modules.Users.Commands.LoginUser;
-
-///
-/// دستور ورود کاربر به سیستم
-///
-public record LoginUserCommand(long UserId) : IBaseCommand;
-
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/LoginUser/LoginUserCommandHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/LoginUser/LoginUserCommandHandler.cs
deleted file mode 100644
index cb284fd0..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/LoginUser/LoginUserCommandHandler.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-using GozareshgirProgramManager.Domain._Common;
-using GozareshgirProgramManager.Domain.UserAgg.Entities;
-using GozareshgirProgramManager.Domain.UserAgg.Repositories;
-using MediatR;
-using Microsoft.EntityFrameworkCore;
-
-namespace GozareshgirProgramManager.Application.Modules.Users.Commands.LoginUser;
-
-///
-/// Handler برای ورود کاربر به سیستم
-///
-public class LoginUserCommandHandler : IRequestHandler>
-{
- private readonly IUserRepository _userRepository;
- private readonly IUserRefreshTokenRepository _refreshTokenRepository;
- private readonly IAuthHelper _authHelper;
- private readonly IUnitOfWork _unitOfWork;
-
- public LoginUserCommandHandler(
- IUserRepository userRepository,
- IAuthHelper authHelper,
- IUnitOfWork unitOfWork, IUserRefreshTokenRepository refreshTokenRepository)
- {
- _userRepository = userRepository;
- _authHelper = authHelper;
- _unitOfWork = unitOfWork;
- _refreshTokenRepository = refreshTokenRepository;
- }
-
- public async Task> Handle(LoginUserCommand request, CancellationToken cancellationToken)
- {
- // اعتبارسنجی
- if (request.UserId <= 0)
- {
- return OperationResult.Failure("شناسه کاربری معتبر نیست", ErrorType.BadRequest);
- }
-
- // یافتن کاربر
- var user = await _userRepository.GetUserWithRolesByIdAsync(request.UserId, cancellationToken);
-
- if (user == null)
- {
- return OperationResult.Failure("کاربر یافت نشد", ErrorType.NotFound);
- }
-
- // بررسی فعال بودن کاربر
- if (!user.IsActive)
- {
- return OperationResult.Failure("حساب کاربری غیرفعال است", ErrorType.Unauthorized);
- }
-
- // تولید توکنها با استفاده از AuthHelper
- var roles = user.RoleUser
- .Select(r => r.RoleId.ToString()).ToList();
-
- var session = _authHelper.SignIn(
- user.Id,
- user.UserName,
- user.FullName,
- user.AccountId??0,
- roles);
- // دریافت اطلاعات درخواست با استفاده از AuthHelper
- var ipAddress = _authHelper.GetClientIpAddress();
- var userAgent = _authHelper.GetUserAgent();
-
- // ذخیره Refresh Token در دیتابیس
- //user.AddRefreshToken(refreshToken, refreshTokenExpiration, ipAddress, userAgent);
-
- var refreshTokenEntity = new UserRefreshToken(
- user.Id,
- session.RefreshToken,
- session.RefreshTokenExpiration,
- ipAddress,
- userAgent);
-
- await _refreshTokenRepository.CreateAsync(refreshTokenEntity);
-
-
- await _unitOfWork.SaveChangesAsync(cancellationToken);
-
-
- // ساخت پاسخ (RefreshToken به فرانت داده نمیشود)
- var response = new LoginResponse
- {
- AccessToken = session.AccessToken,
- ExpiresAt = session.AccessTokenExpiration,
- UserId = user.Id,
- FullName = user.FullName,
- UserName = user.UserName,
- Roles = user.RoleUser.Select(r => r.RoleId).ToList()
- };
-
- return OperationResult.Success(response);
- }
-}
-
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/RefreshUserToken/RefreshUserTokenCommand.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/RefreshUserToken/RefreshUserTokenCommand.cs
deleted file mode 100644
index 31cf5838..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/RefreshUserToken/RefreshUserTokenCommand.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-using MediatR;
-
-namespace GozareshgirProgramManager.Application.Modules.Users.Commands.RefreshUserToken;
-
-///
-/// دستور تازهسازی توکن دسترسی کاربر
-///
-public record RefreshUserTokenCommand() : IBaseCommand;
-
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/RefreshUserToken/RefreshUserTokenCommandHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/RefreshUserToken/RefreshUserTokenCommandHandler.cs
deleted file mode 100644
index 12bfb62b..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/RefreshUserToken/RefreshUserTokenCommandHandler.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-using GozareshgirProgramManager.Domain._Common;
-using Microsoft.EntityFrameworkCore;
-using MediatR;
-
-namespace GozareshgirProgramManager.Application.Modules.Users.Commands.RefreshUserToken;
-
-///
-/// Handler برای تازهسازی توکن دسترسی
-///
-public class RefreshUserTokenCommandHandler : IBaseCommandHandler
-{
- private readonly IAuthHelper _authHelper;
- private readonly IProgramManagerDbContext _context;
-
- public RefreshUserTokenCommandHandler(
- IAuthHelper authHelper,
- IProgramManagerDbContext context)
- {
- _authHelper = authHelper;
- _context = context;
- }
-
- public async Task Handle(RefreshUserTokenCommand request, CancellationToken cancellationToken)
- {
-
- var refreshToken = _authHelper.GetRefreshTokenFromCookie();
-
- // یافتن کاربر و Refresh Token فعال از دیتابیس
- var user = await _context.Users
- .Include(u => u.RefreshTokens)
- .Include(u => u.RoleUser)
- .FirstOrDefaultAsync(u => u.RefreshTokens.Any(r=>r.Token ==refreshToken), cancellationToken);
-
- if (user == null)
- {
- return OperationResult.Failure("کاربر یافت نشد", ErrorType.NotFound);
- }
-
- // بررسی فعال بودن کاربر
- if (!user.IsActive)
- {
- return OperationResult.Failure("حساب کاربری غیرفعال است", ErrorType.Unauthorized);
- }
-
- // پیدا کردن Refresh Token فعال
- var activeRefreshToken = user.RefreshTokens
- .FirstOrDefault(rt => rt.Token == refreshToken && rt.IsActive);
-
- if (activeRefreshToken == null)
- {
- return OperationResult.Failure(
- "نشست شما منقضی شده است. لطفاً دوباره وارد شوید",
- ErrorType.Unauthorized);
- }
-
- if (!activeRefreshToken.IsActive|| activeRefreshToken.IsRevoked||activeRefreshToken.IsExpired)
- {
- return OperationResult.Failure(
- "نشست شما منقضی شده است. لطفاً دوباره وارد شوید",
- ErrorType.Unauthorized);
- }
-
- // تولید Access Token جدید با استفاده از AuthHelper
- var roles = user.RoleUser.Select(r => r.RoleId.ToString()).ToList();
- var newAccessToken = _authHelper.GenerateAccessToken(
- user.Id,
- user.UserName,
- user.FullName,
- user.AccountId,
- roles);
-
- var response = new AccessTokenResponse
- {
- AccessToken = newAccessToken,
- ExpiresAt = DateTime.UtcNow.AddMinutes(30),
- UserId = user.Id,
- FullName = user.FullName,
- UserName = user.UserName
- };
-
- return OperationResult.Success(response);
- }
-}
-
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SignOutUser/SignOutUserCommand.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SignOutUser/SignOutUserCommand.cs
deleted file mode 100644
index 7c9c6bda..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SignOutUser/SignOutUserCommand.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-using MediatR;
-
-namespace GozareshgirProgramManager.Application.Modules.Users.Commands.SignOutUser;
-
-///
-/// دستور خروج کاربر از سیستم
-///
-public record SignOutUserCommand(string RefreshToken) : IBaseCommand;
-
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SignOutUser/SignOutUserCommandHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SignOutUser/SignOutUserCommandHandler.cs
deleted file mode 100644
index 92c69fcf..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SignOutUser/SignOutUserCommandHandler.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-using GozareshgirProgramManager.Domain._Common;
-using MediatR;
-using Microsoft.EntityFrameworkCore;
-
-namespace GozareshgirProgramManager.Application.Modules.Users.Commands.SignOutUser;
-
-///
-/// Handler برای خروج کاربر از سیستم
-///
-public class SignOutUserCommandHandler : IBaseCommandHandler
-{
- private readonly IAuthHelper _authHelper;
- private readonly IProgramManagerDbContext _context;
- private readonly IUnitOfWork _unitOfWork;
-
- public SignOutUserCommandHandler(
- IAuthHelper _authHelper,
- IProgramManagerDbContext context,
- IUnitOfWork unitOfWork)
- {
- this._authHelper = _authHelper;
- _context = context;
- _unitOfWork = unitOfWork;
- }
-
- public async Task Handle(SignOutUserCommand request, CancellationToken cancellationToken)
- {
- // دریافت UserId از Claims با استفاده از AuthHelper
- var userId = _authHelper.GetCurrentUserId();
-
- if (!userId.HasValue)
- {
- return OperationResult.Failure("کاربر احراز هویت نشده است", ErrorType.Unauthorized);
- }
-
- if (string.IsNullOrEmpty(request.RefreshToken))
- {
- return OperationResult.Failure("توکن تازهسازی یافت نشد", ErrorType.BadRequest);
- }
-
- // یافتن کاربر
- var user = await _context.Users
- .Include(u => u.RefreshTokens)
- .FirstOrDefaultAsync(u => u.Id == userId.Value, cancellationToken);
-
- if (user == null)
- {
- return OperationResult.Failure("کاربر یافت نشد", ErrorType.NotFound);
- }
-
- try
- {
- // لغو Refresh Token
- user.RevokeRefreshToken(request.RefreshToken);
- await _unitOfWork.SaveChangesAsync(cancellationToken);
- _authHelper.SignOut();
-
- return OperationResult.Success();
- }
- catch (InvalidOperationException ex)
- {
- return OperationResult.Failure(ex.Message, ErrorType.BadRequest);
- }
- }
-}
-
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SsoLogin/SsoLoginCommand.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SsoLogin/SsoLoginCommand.cs
deleted file mode 100644
index 0c6d5a33..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SsoLogin/SsoLoginCommand.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-
-namespace GozareshgirProgramManager.Application.Modules.Users.Commands.SsoLogin;
-
-///
-/// دستور ورود از طریق SSO با استفاده از توکن JWT
-///
-public record SsoLoginCommand(string Token) : IBaseCommand;
-
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SsoLogin/SsoLoginCommandHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SsoLogin/SsoLoginCommandHandler.cs
deleted file mode 100644
index 3e638729..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Users/Commands/SsoLogin/SsoLoginCommandHandler.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-using GozareshgirProgramManager.Domain._Common;
-using GozareshgirProgramManager.Domain.UserAgg.Entities;
-using GozareshgirProgramManager.Domain.UserAgg.Repositories;
-using MediatR;
-
-namespace GozareshgirProgramManager.Application.Modules.Users.Commands.SsoLogin;
-
-///
-/// Handler برای ورود از طریق SSO با استفاده از JWT Token
-///
-public class SsoLoginCommandHandler : IRequestHandler>
-{
- private readonly IUserRepository _userRepository;
- private readonly IUserRefreshTokenRepository _refreshTokenRepository;
- private readonly IAuthHelper _authHelper;
- private readonly IUnitOfWork _unitOfWork;
-
- public SsoLoginCommandHandler(
- IUserRepository userRepository,
- IAuthHelper authHelper,
- IUnitOfWork unitOfWork,
- IUserRefreshTokenRepository refreshTokenRepository)
- {
- _userRepository = userRepository;
- _authHelper = authHelper;
- _unitOfWork = unitOfWork;
- _refreshTokenRepository = refreshTokenRepository;
- }
-
- public async Task> Handle(SsoLoginCommand request, CancellationToken cancellationToken)
- {
- // اعتبارسنجی
- if (string.IsNullOrWhiteSpace(request.Token))
- {
- return OperationResult.Failure("توکن SSO معتبر نیست", ErrorType.BadRequest);
- }
-
- // اعتبارسنجی توکن و استخراج Claims
- var principal = _authHelper.ValidateToken(request.Token);
- if (principal == null)
- {
- return OperationResult.Failure("توکن SSO نامعتبر یا منقضی شده است", ErrorType.Unauthorized);
- }
-
- // استخراج AccountId از Claims
- var accountIdClaim = principal.FindFirst("AccountId")?.Value;
- if (string.IsNullOrEmpty(accountIdClaim) || !long.TryParse(accountIdClaim, out var accountId))
- {
- return OperationResult.Failure("AccountId در توکن یافت نشد", ErrorType.BadRequest);
- }
-
- // یافتن کاربر بر اساس AccountId
- var user = await _userRepository.GetByGozareshgirAccountId(accountId);
-
- if (user == null)
- {
- return OperationResult.Failure("کاربر با AccountId مشخص شده یافت نشد", ErrorType.NotFound);
- }
-
- // بررسی فعال بودن کاربر
- if (!user.IsActive)
- {
- return OperationResult.Failure("حساب کاربری غیرفعال است", ErrorType.Unauthorized);
- }
-
- // بارگذاری نقشهای کاربر
- user = await _userRepository.GetUserWithRolesByIdAsync(user.Id, cancellationToken);
- if (user == null)
- {
- return OperationResult.Failure("خطا در بارگذاری اطلاعات کاربر", ErrorType.InternalServerError);
- }
-
- // تولید توکنهای جدید برای کاربر
- var roles = user.RoleUser
- .Select(r => r.RoleId.ToString()).ToList();
-
- var session = _authHelper.SignIn(
- user.Id,
- user.UserName,
- user.FullName,
- user.AccountId ?? 0,
- roles);
-
- // دریافت اطلاعات درخواست
- var ipAddress = _authHelper.GetClientIpAddress();
- var userAgent = _authHelper.GetUserAgent();
-
- // ذخیره Refresh Token در دیتابیس
- var refreshTokenEntity = new UserRefreshToken(
- user.Id,
- session.RefreshToken,
- session.RefreshTokenExpiration,
- ipAddress,
- userAgent);
-
- await _refreshTokenRepository.CreateAsync(refreshTokenEntity);
- await _unitOfWork.SaveChangesAsync(cancellationToken);
-
- // ساخت پاسخ
- var response = new LoginResponse
- {
- AccessToken = session.AccessToken,
- ExpiresAt = session.AccessTokenExpiration,
- UserId = user.Id,
- FullName = user.FullName,
- UserName = user.UserName,
- Roles = user.RoleUser.Select(r => r.RoleId).ToList()
- };
-
- return OperationResult.Success(response);
- }
-}
-
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/_Common/Interfaces/IAuthHelper.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/_Common/Interfaces/IAuthHelper.cs
index 7b392d47..a41dad2b 100644
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/_Common/Interfaces/IAuthHelper.cs
+++ b/ProgramManager/src/Application/GozareshgirProgramManager.Application/_Common/Interfaces/IAuthHelper.cs
@@ -9,38 +9,38 @@ namespace GozareshgirProgramManager.Application._Common.Interfaces;
public interface IAuthHelper
{
// ==================== Token Generation ====================
- LoginSession SignIn(long userId, string userName, string fullName, long accountId, List roles);
- ///
- /// تولید Access Token
- ///
- string GenerateAccessToken(long userId, string userName, string fullName, long? accountId, List roles);
+ // LoginSession SignIn(long userId, string userName, string fullName, long accountId, List roles);
+ // ///
+ // /// تولید Access Token
+ // ///
+ // string GenerateAccessToken(long userId, string userName, string fullName, long? accountId, List roles);
- ///
- /// تولید Refresh Token
- ///
- string GenerateRefreshToken();
+ // ///
+ // /// تولید Refresh Token
+ // ///
+ // string GenerateRefreshToken();
- ///
- /// دریافت تاریخ انقضای Refresh Token
- ///
- DateTime GetRefreshTokenExpiration();
+ // ///
+ // /// دریافت تاریخ انقضای Refresh Token
+ // ///
+ // DateTime GetRefreshTokenExpiration();
// ==================== Token Validation ====================
-
- ///
- /// اعتبارسنجی توکن و استخراج Claims
- ///
- ClaimsPrincipal? ValidateToken(string token);
+ //
+ // ///
+ // /// اعتبارسنجی توکن و استخراج Claims
+ // ///
+ // ClaimsPrincipal? ValidateToken(string token);
- ///
- /// اعتبارسنجی توکن منقضی شده (بدون چک زمان انقضا)
- ///
- ClaimsPrincipal? ValidateExpiredToken(string token);
+ // ///
+ // /// اعتبارسنجی توکن منقضی شده (بدون چک زمان انقضا)
+ // ///
+ // ClaimsPrincipal? ValidateExpiredToken(string token);
- ///
- /// استخراج UserId از توکن (حتی اگر منقضی شده باشد)
- ///
- long? GetUserIdFromToken(string token);
+ // ///
+ // /// استخراج UserId از توکن (حتی اگر منقضی شده باشد)
+ // ///
+ // long? GetUserIdFromToken(string token);
// ==================== HttpContext Helpers ====================
@@ -49,15 +49,11 @@ public interface IAuthHelper
///
string? GetClientIpAddress();
- ///
- /// دریافت User Agent کاربر جاری
- ///
- string? GetUserAgent();
-
- ///
- /// دریافت Refresh Token از Cookie
- ///
- string? GetRefreshTokenFromCookie();
+
+ // ///
+ // /// دریافت Refresh Token از Cookie
+ // ///
+ // string? GetRefreshTokenFromCookie();
// ==================== Current User Claims ====================
@@ -71,39 +67,12 @@ public interface IAuthHelper
///
long? GetCurrentUserId();
- ///
- /// دریافت نام کاربری جاری از Claims
- ///
- string? GetCurrentUserName();
-
///
/// دریافت نام کامل کاربر جاری از Claims
///
string? GetCurrentFullName();
- ///
- /// دریافت AccountId کاربر جاری از Claims
- ///
- long? GetCurrentAccountId();
-
- ///
- /// دریافت نقشهای کاربر جاری از Claims
- ///
- List GetCurrentUserRoles();
-
- // ==================== Role Checking ====================
- ///
- /// بررسی دسترسی کاربر به نقش خاص
- ///
- bool HasRole(string roleName);
-
- ///
- /// بررسی دسترسی کاربر به یکی از نقشها
- ///
- bool HasAnyRole(params string[] roleNames);
-
- void SignOut();
}
public class LoginSession
{
diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/_Common/Interfaces/IGozareshgirDbContext.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/_Common/Interfaces/IGozareshgirDbContext.cs
deleted file mode 100644
index 8baad5be..00000000
--- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/_Common/Interfaces/IGozareshgirDbContext.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using GozareshgirProgramManager.Domain.HolidayAgg;
-using GozareshgirProgramManager.Domain.HolidayItemAgg;
-using Microsoft.EntityFrameworkCore;
-
-namespace GozareshgirProgramManager.Application._Common.Interfaces;
-
-public interface IGozareshgirDbContext
-{
- DbSet HolidayItems { get; set; }
- DbSet Holidays { get; set; }
-
-}
\ No newline at end of file
diff --git a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/DependencyInjection.cs b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/DependencyInjection.cs
index a17403b0..5d73a0b3 100644
--- a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/DependencyInjection.cs
+++ b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/DependencyInjection.cs
@@ -42,16 +42,7 @@ public static class DependencyInjection
// Register IAppDbContext
services.AddScoped(provider =>
provider.GetRequiredService());
-
-
- #region GozareshgirDbContext
-
- services.AddDbContext(x => x.UseSqlServer(configuration.GetConnectionString("GozareshgirDb")));
-
- services.AddScoped(provider =>
- provider.GetRequiredService());
- #endregion
// Unit of Work
services.AddScoped();
diff --git a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Context/GozareshgirDbContext.cs b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Context/GozareshgirDbContext.cs
deleted file mode 100644
index 181e1779..00000000
--- a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Persistence/Context/GozareshgirDbContext.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Domain.HolidayAgg;
-using GozareshgirProgramManager.Domain.HolidayItemAgg;
-using Microsoft.EntityFrameworkCore;
-
-namespace GozareshgirProgramManager.Infrastructure.Persistence.Context;
-
-public class GozareshgirDbContext : DbContext, IGozareshgirDbContext
-{
- public GozareshgirDbContext(DbContextOptions options) : base(options)
- {
- }
-
- public DbSet HolidayItems { get; set; } = null!;
- public DbSet Holidays { get; set; } = null!;
-
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- modelBuilder.ApplyConfigurationsFromAssembly(typeof(GozareshgirDbContext).Assembly);
- base.OnModelCreating(modelBuilder);
- }
-}
\ No newline at end of file
diff --git a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Services/Authentication/AuthHelper.cs b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Services/Authentication/AuthHelper.cs
index ec70492e..9ca8e545 100644
--- a/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Services/Authentication/AuthHelper.cs
+++ b/ProgramManager/src/Infrastructure/GozareshgirProgramManager.Infrastructure/Services/Authentication/AuthHelper.cs
@@ -149,7 +149,7 @@ public class AuthHelper : IAuthHelper
///
public long? GetCurrentUserId()
{
- var userIdClaim = _httpContextAccessor.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
+ var userIdClaim = _httpContextAccessor.HttpContext?.User?.FindFirst("pm.userId")?.Value;
return long.TryParse(userIdClaim, out var userId) ? userId : null;
}
diff --git a/ServiceHost/Areas/Admin/Controllers/AuthController.cs b/ServiceHost/Areas/Admin/Controllers/AuthController.cs
deleted file mode 100644
index cac9318f..00000000
--- a/ServiceHost/Areas/Admin/Controllers/AuthController.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-using GozareshgirProgramManager.Application._Common.Interfaces;
-using GozareshgirProgramManager.Application._Common.Models;
-using GozareshgirProgramManager.Application.Modules.Users.Commands.LoginUser;
-using GozareshgirProgramManager.Application.Modules.Users.Commands.RefreshUserToken;
-using GozareshgirProgramManager.Application.Modules.Users.Commands.SignOutUser;
-using GozareshgirProgramManager.Application.Modules.Users.Commands.SsoLogin;
-using MediatR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using ServiceHost.BaseControllers;
-
-namespace ServiceHost.Areas.Admin.Controllers;
-
-///
-/// کنترلر احراز هویت
-///
-[Route("api/[controller]")]
-[ApiController]
-public class AuthController :AdminBaseController
-{
- private readonly IAuthHelper _authHelper;
- private readonly IMediator _mediator;
-
- public AuthController(IAuthHelper authHelper, IMediator mediator)
- {
- _authHelper = authHelper;
- _mediator = mediator;
- }
-
- ///
- /// ورود به سیستم با شناسه کاربری
- ///
- /// شناسه کاربر
- /// فقط Access Token - Refresh Token در سرور ذخیره میشود
- [HttpPost("login")]
- [AllowAnonymous]
- public async Task>> Login([FromBody] LoginByIdRequest request)
- {
- var command = new LoginUserCommand(request.UserId);
- var result = await _mediator.Send(command);
-
- return result;
- }
-
- ///
- /// ورود به سیستم از طریق SSO با استفاده از توکن JWT
- /// توکن JWT از query string دریافت میشود و Claims آن استخراج میشود
- /// سپس کاربر بر اساس AccountId موجود در Claims لاگین میشود
- ///
- /// JWT Token از سیستم خارجی
- /// Access Token و اطلاعات کاربر
- [HttpGet("sso-login")]
- [AllowAnonymous]
- public async Task>> SsoLogin([FromQuery] string token)
- {
- if (string.IsNullOrWhiteSpace(token))
- {
- return BadRequest(OperationResult.Failure("توکن الزامی است", ErrorType.BadRequest));
- }
-
- var command = new SsoLoginCommand(token);
- var result = await _mediator.Send(command);
-
- return result;
- }
-
- ///
- /// خروج از سیستم
- ///
- [HttpPost("signout")]
- [Authorize]
- public new async Task> SignOut()
- {
- // دریافت Refresh Token از Header با استفاده از AuthHelper
- var refreshToken = _authHelper.GetRefreshTokenFromCookie();
-
- if (string.IsNullOrEmpty(refreshToken))
- {
- return OperationResult.Failure("توکن تازهسازی یافت نشد");
- }
-
- var command = new SignOutUserCommand(refreshToken);
- var result = await _mediator.Send(command);
-
- if (result.IsSuccess)
- {
- return Ok(result);
- }
-
- return StatusCode(result.ErrorType switch
- {
- ErrorType.Unauthorized => 401,
- ErrorType.BadRequest => 400,
- ErrorType.NotFound => 404,
- _ => 500
- }, result);
- }
-
- ///
- /// تازهسازی توکن دسترسی
- /// توکن منقضی شده را میگیرد و Access Token جدید برمیگرداند
- /// Refresh Token از دیتابیس خوانده میشود و به فرانت داده نمیشود
- ///
- [HttpPost("refresh")]
- [AllowAnonymous]
- public async Task> RefreshAccessToken()
- {
-
- var refreshTokenCommand = new RefreshUserTokenCommand();
- var result = await _mediator.Send(refreshTokenCommand);
-
- return result;
- }
-
- ///
- /// دریافت اطلاعات کاربر جاری
- ///
- [HttpGet("current")]
- public IActionResult GetCurrentUser()
- {
- if (!_authHelper.IsAuthenticated())
- {
- return Unauthorized(new { message = "کاربر احراز هویت نشده است" });
- }
-
- return Ok(new
- {
- userId = _authHelper.GetCurrentUserId(),
- fullName= _authHelper.GetCurrentFullName(),
- roles = _authHelper.GetCurrentUserRoles()
- });
- }
-}
-
-///
-/// درخواست ورود با شناسه کاربری
-///
-public class LoginByIdRequest
-{
- public long UserId { get; set; }
-}
-
-
diff --git a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/CheckoutController.cs
similarity index 96%
rename from ServiceHost/Areas/Admin/Controllers/CheckoutController.cs
rename to ServiceHost/Areas/Admin/Controllers/ProgramManager/CheckoutController.cs
index 69128d3a..29edd65c 100644
--- a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs
+++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/CheckoutController.cs
@@ -7,9 +7,9 @@ using MediatR;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
-namespace ServiceHost.Areas.Admin.Controllers;
+namespace ServiceHost.Areas.Admin.Controllers.ProgramManager;
-public class CheckoutController : AdminBaseController
+public class CheckoutController : ProgramManagerBaseController
{
private readonly IMediator _mediator;
diff --git a/ServiceHost/Areas/Admin/Controllers/ProjectController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs
similarity index 96%
rename from ServiceHost/Areas/Admin/Controllers/ProjectController.cs
rename to ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs
index a52e8ab1..266e72d4 100644
--- a/ServiceHost/Areas/Admin/Controllers/ProjectController.cs
+++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs
@@ -14,9 +14,9 @@ using MediatR;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
-namespace ServiceHost.Areas.Admin.Controllers;
+namespace ServiceHost.Areas.Admin.Controllers.ProgramManager;
-public class ProjectController : AdminBaseController
+public class ProjectController : ProgramManagerBaseController
{
private readonly IMediator _mediator;
diff --git a/ServiceHost/Areas/Admin/Controllers/RoleController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/RoleController.cs
similarity index 90%
rename from ServiceHost/Areas/Admin/Controllers/RoleController.cs
rename to ServiceHost/Areas/Admin/Controllers/ProgramManager/RoleController.cs
index b074f105..d7994d7a 100644
--- a/ServiceHost/Areas/Admin/Controllers/RoleController.cs
+++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/RoleController.cs
@@ -6,9 +6,9 @@ using MediatR;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
-namespace ServiceHost.Areas.Admin.Controllers;
+namespace ServiceHost.Areas.Admin.Controllers.ProgramManager;
-public class RoleController : AdminBaseController
+public class RoleController : ProgramManagerBaseController
{
private readonly IMediator _mediator;
diff --git a/ServiceHost/Areas/Admin/Controllers/SalaryPaymentSettingsController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs
similarity index 93%
rename from ServiceHost/Areas/Admin/Controllers/SalaryPaymentSettingsController.cs
rename to ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs
index bb09a5a3..bc4784e2 100644
--- a/ServiceHost/Areas/Admin/Controllers/SalaryPaymentSettingsController.cs
+++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SalaryPaymentSettingsController.cs
@@ -8,9 +8,9 @@ using MediatR;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
-namespace ServiceHost.Areas.Admin.Controllers;
+namespace ServiceHost.Areas.Admin.Controllers.ProgramManager;
-public class SalaryPaymentSettingsController : AdminBaseController
+public class SalaryPaymentSettingsController : ProgramManagerBaseController
{
private readonly IMediator _mediator;
diff --git a/ServiceHost/Areas/Admin/Controllers/SkillController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SkillController.cs
similarity index 82%
rename from ServiceHost/Areas/Admin/Controllers/SkillController.cs
rename to ServiceHost/Areas/Admin/Controllers/ProgramManager/SkillController.cs
index 4fcc373e..0966a65a 100644
--- a/ServiceHost/Areas/Admin/Controllers/SkillController.cs
+++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/SkillController.cs
@@ -4,9 +4,9 @@ using MediatR;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
-namespace ServiceHost.Areas.Admin.Controllers;
+namespace ServiceHost.Areas.Admin.Controllers.ProgramManager;
-public class SkillController:AdminBaseController
+public class SkillController:ProgramManagerBaseController
{
private readonly IMediator _mediator;
diff --git a/ServiceHost/Areas/Admin/Controllers/UserController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/UserController.cs
similarity index 93%
rename from ServiceHost/Areas/Admin/Controllers/UserController.cs
rename to ServiceHost/Areas/Admin/Controllers/ProgramManager/UserController.cs
index 9fabaf9f..03ef60b8 100644
--- a/ServiceHost/Areas/Admin/Controllers/UserController.cs
+++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/UserController.cs
@@ -8,9 +8,9 @@ using MediatR;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
-namespace ServiceHost.Areas.Admin.Controllers;
+namespace ServiceHost.Areas.Admin.Controllers.ProgramManager;
-public class UserController : AdminBaseController
+public class UserController : ProgramManagerBaseController
{
private readonly IMediator _mediator;
diff --git a/ServiceHost/Areas/Admin/Pages/Accounts/Account/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Accounts/Account/Index.cshtml
index 92dca681..900be1d3 100644
--- a/ServiceHost/Areas/Admin/Pages/Accounts/Account/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Accounts/Account/Index.cshtml
@@ -1,6 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
-@using Microsoft.EntityFrameworkCore
@using _0_Framework.Application
@model ServiceHost.Areas.Admin.Pages.Accounts.Account.IndexModel
@inject IAuthHelper _AuthHelper;
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CreateLoadList.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CreateLoadList.cshtml
index e49343e6..318d6972 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CreateLoadList.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CreateLoadList.cshtml
@@ -1,5 +1,4 @@
-@using Microsoft.CodeAnalysis.CSharp.Syntax
-@model CompanyManagment.App.Contracts.Checkout.CreateCheckoutListViewModel
+@model CompanyManagment.App.Contracts.Checkout.CreateCheckoutListViewModel
@{
var i = 1;
var b = 0;
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Details.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Details.cshtml
index 95c72111..1a6af7f7 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Details.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Details.cshtml
@@ -1,5 +1,4 @@
-@using System.Security.Cryptography.X509Certificates
-@model CompanyManagment.App.Contracts.Checkout.CheckoutViewModel
+@model CompanyManagment.App.Contracts.Checkout.CheckoutViewModel
@{
var totalDays = Model.MonthlyRollCall?.Count ?? 0;
var rightSideDays = totalDays / 2;
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml
index e416cff2..929dc0c9 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
@model ServiceHost.Areas.Admin.Pages.Company.Checkouts.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/ContractingParties/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/ContractingParties/Index.cshtml
index f2e5c44c..51973794 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/ContractingParties/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/ContractingParties/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
@model ServiceHost.Areas.Admin.Pages.Company.ContractingParties.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml
index 4865d1a4..778f0284 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Contracts/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
@model ServiceHost.Areas.Admin.Pages.Company.Contracts.IndexModel
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Employees/Create.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Employees/Create.cshtml
index c0921767..659894e6 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Employees/Create.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Employees/Create.cshtml
@@ -1,5 +1,4 @@
-@using _0_Framework.Application
-@model CompanyManagment.App.Contracts.Employee.CreateEmployee
+@model CompanyManagment.App.Contracts.Employee.CreateEmployee
@{
var adminVersion = _0_Framework.Application.Version.AdminVersion;
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Employees/CreateEmployee.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Employees/CreateEmployee.cshtml
index 28543bbb..e48dfc71 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Employees/CreateEmployee.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Employees/CreateEmployee.cshtml
@@ -1,5 +1,4 @@
-@using _0_Framework.Application
-@model CompanyManagment.App.Contracts.Employee.CreateEmployee
+@model CompanyManagment.App.Contracts.Employee.CreateEmployee
@{
var adminVersion = _0_Framework.Application.Version.AdminVersion;
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Employees/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Employees/Index.cshtml
index dcfb2559..845c6b61 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Employees/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Employees/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
@model ServiceHost.Areas.Admin.Pages.Company.Employees.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Employers/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Employers/Index.cshtml
index 64e33aaf..8ecf3052 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Employers/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Employers/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
@model ServiceHost.Areas.Admin.Pages.Company.Employers.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Holidays/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Holidays/Index.cshtml
index 69c2dad9..75e213a8 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Holidays/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Holidays/Index.cshtml
@@ -1,7 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
-@using Microsoft.EntityFrameworkCore
-@using CompanyManagment.App.Contracts.Holiday
@model ServiceHost.Areas.Admin.Pages.Company.Holidays.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/InsuranceList/_Partials/OperationsModal.cshtml b/ServiceHost/Areas/Admin/Pages/Company/InsuranceList/_Partials/OperationsModal.cshtml
index c8d15d51..84bc4fd5 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/InsuranceList/_Partials/OperationsModal.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/InsuranceList/_Partials/OperationsModal.cshtml
@@ -1,5 +1,4 @@
@using CompanyManagment.App.Contracts.InsuranceList.Enums
-@using Microsoft.AspNetCore.Mvc.TagHelpers
@model CompanyManagment.App.Contracts.InsuranceList.InsuranceListConfirmOperation
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Jobs/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Jobs/Index.cshtml
index 9e035d35..a4e80527 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Jobs/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Jobs/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
@model ServiceHost.Areas.Admin.Pages.Company.Jobs.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/MandatoryHours/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/MandatoryHours/Index.cshtml
index c1370298..fc059cf3 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/MandatoryHours/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/MandatoryHours/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
@model ServiceHost.Areas.Admin.Pages.Company.MandatoryHours.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Representative/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Representative/Index.cshtml
index 1065f4e7..c9143498 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Representative/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Representative/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.Representative
@model ServiceHost.Areas.Admin.Pages.Company.Representative.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml
index ee6275a3..279d822f 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/SmsResult/SmsSettings.cshtml
@@ -1,6 +1,4 @@
@page
-@using _0_Framework.Application.Enums
-@using Microsoft.AspNetCore.Mvc.TagHelpers
@model ServiceHost.Areas.Admin.Pages.Company.SmsResult.SmsSettingsModel
@Html.AntiForgeryToken()
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/EditWorkshop.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/EditWorkshop.cshtml
index 21ea2cfe..4a24360f 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/EditWorkshop.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/EditWorkshop.cshtml
@@ -1,6 +1,5 @@
@page
@using _0_Framework.Application
-@using Microsoft.AspNetCore.Mvc.TagHelpers
@model ServiceHost.Areas.Admin.Pages.Company.Workshops.EditWorkshopModel
@{
string adminVersion = _0_Framework.Application.Version.AdminVersion;
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/Index.cshtml
index 61c89eca..4a82840a 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/Index.cshtml
@@ -1,5 +1,4 @@
@page
-@using CompanyManagment.App.Contracts.PersonalContractingParty
@model ServiceHost.Areas.Admin.Pages.Company.Workshops.IndexModel
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_EditForms/FormPermissionAccount.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_EditForms/FormPermissionAccount.cshtml
index ac030de9..27765263 100644
--- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_EditForms/FormPermissionAccount.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_EditForms/FormPermissionAccount.cshtml
@@ -1,5 +1,4 @@
@using AccountManagement.Application.Contracts.Account
-@using Microsoft.AspNetCore.Mvc.TagHelpers
@model CompanyManagment.App.Contracts.Workshop.EditWorkshop
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Index.cshtml b/ServiceHost/Areas/Admin/Pages/Index.cshtml
index a36a3d4b..3e1a948d 100644
--- a/ServiceHost/Areas/Admin/Pages/Index.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Index.cshtml
@@ -2,7 +2,6 @@
@page
@using _0_Framework.Application
@using AccountManagement.Application.Contracts.TicketAccessAccount
-@using Microsoft.AspNetCore.Mvc.TagHelpers
@model ServiceHost.Areas.Admin.Pages.IndexModel
@inject ITicketAccessAccountApplication TicketAccessAccount;
@inject IAuthHelper authHelper;
diff --git a/ServiceHost/Areas/Admin/Pages/Shared/_AdminLayout.cshtml b/ServiceHost/Areas/Admin/Pages/Shared/_AdminLayout.cshtml
index 2c17b1cf..a6e21401 100644
--- a/ServiceHost/Areas/Admin/Pages/Shared/_AdminLayout.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Shared/_AdminLayout.cshtml
@@ -1,6 +1,4 @@
-@using Microsoft.AspNetCore.Razor.Language.Intermediate
-@using _0_Framework.Application
-@using Version = _0_Framework.Application.Version
+@using Version = _0_Framework.Application.Version
@inject _0_Framework.Application.IAuthHelper AuthHelper;
@{
diff --git a/ServiceHost/Areas/Admin/Pages/Shared/_Menu.cshtml b/ServiceHost/Areas/Admin/Pages/Shared/_Menu.cshtml
index 33621097..2734ee67 100644
--- a/ServiceHost/Areas/Admin/Pages/Shared/_Menu.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/Shared/_Menu.cshtml
@@ -1,6 +1,5 @@
@using _0_Framework.Application
@using AccountManagement.Domain.TicketAccessAccountAgg
-@using Microsoft.AspNetCore.Mvc.TagHelpers
@using Microsoft.Extensions.Options
@inject _0_Framework.Application.IAuthHelper AuthHelper;
@inject ITicketAccessAccountRepository TicketAccessAccount;
diff --git a/ServiceHost/Areas/Admin/Pages/_ViewImports.cshtml b/ServiceHost/Areas/Admin/Pages/_ViewImports.cshtml
index 1dd320b1..100a2f8a 100644
--- a/ServiceHost/Areas/Admin/Pages/_ViewImports.cshtml
+++ b/ServiceHost/Areas/Admin/Pages/_ViewImports.cshtml
@@ -1,4 +1,3 @@
-@using ServiceHost
-@namespace ServiceHost.Pages
+@namespace ServiceHost.Areas.Admin.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, ServiceHost
\ No newline at end of file
diff --git a/ServiceHost/BaseControllers/ProgramManagerBaseController.cs b/ServiceHost/BaseControllers/ProgramManagerBaseController.cs
new file mode 100644
index 00000000..db83d401
--- /dev/null
+++ b/ServiceHost/BaseControllers/ProgramManagerBaseController.cs
@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace ServiceHost.BaseControllers;
+
+[Authorize(Policy = "AdminArea")]
+[Area("ProgramManager")]
+[ApiExplorerSettings(GroupName = "ProgramManager")]
+[Route("api/[area]/[controller]")]
+public class ProgramManagerBaseController : ControllerBase
+{
+
+}
+
diff --git a/ServiceHost/Program.cs b/ServiceHost/Program.cs
index 36431242..40ca19b2 100644
--- a/ServiceHost/Program.cs
+++ b/ServiceHost/Program.cs
@@ -231,36 +231,37 @@ builder.Services.AddSwaggerGen(options =>
options.SwaggerDoc("Admin", new OpenApiInfo { Title = "API - Admin", Version = "v1" });
options.SwaggerDoc("Client", new OpenApiInfo { Title = "API - Client", Version = "v1" });
options.SwaggerDoc("Camera", new OpenApiInfo { Title = "API - Camera", Version = "v1" });
+ options.SwaggerDoc("ProgramManager", new OpenApiInfo { Title = "API - ProgramManager", Version = "v1" });
options.DocInclusionPredicate((docName, apiDesc) =>
string.Equals(docName, apiDesc.GroupName, StringComparison.OrdinalIgnoreCase));
// اضافه کردن پشتیبانی از JWT در Swagger
- options.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
- {
- Name = "Authorization",
- Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
- Scheme = "Bearer",
- BearerFormat = "JWT",
- In = Microsoft.OpenApi.Models.ParameterLocation.Header,
- Description = "لطفاً 'Bearer [space] token' را وارد کنید."
- });
-
- options.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
- {
- {
- new Microsoft.OpenApi.Models.OpenApiSecurityScheme
- {
- Reference = new Microsoft.OpenApi.Models.OpenApiReference
- {
- Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
- Id = "Bearer"
- }
- },
- Array.Empty()
- }
- });
+ // options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
+ // {
+ // Name = "Authorization",
+ // Type = SecuritySchemeType.ApiKey,
+ // Scheme = "Bearer",
+ // BearerFormat = "JWT",
+ // In = ParameterLocation.Header,
+ // Description = "لطفاً 'Bearer [space] token' را وارد کنید."
+ // });
+ //
+ // options.AddSecurityRequirement(new OpenApiSecurityRequirement
+ // {
+ // {
+ // new Microsoft.OpenApi.Models.OpenApiSecurityScheme
+ // {
+ // Reference = new Microsoft.OpenApi.Models.OpenApiReference
+ // {
+ // Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
+ // Id = "Bearer"
+ // }
+ // },
+ // Array.Empty()
+ // }
+ // });
options.EnableAnnotations();
});
@@ -396,6 +397,8 @@ if (app.Environment.IsDevelopment())
options.SwaggerEndpoint("/swagger/Admin/swagger.json", "API - Admin");
options.SwaggerEndpoint("/swagger/Client/swagger.json", "API - Client");
options.SwaggerEndpoint("/swagger/Camera/swagger.json", "API - Camera");
+ options.SwaggerEndpoint("/swagger/ProgramManager/swagger.json", "API - ProgramManager");
+
});
}
diff --git a/Shared.Contracts/Holidays/HolidayDto.cs b/Shared.Contracts/Holidays/HolidayDto.cs
new file mode 100644
index 00000000..7318b83e
--- /dev/null
+++ b/Shared.Contracts/Holidays/HolidayDto.cs
@@ -0,0 +1,8 @@
+namespace Shared.Contracts.Holidays;
+
+public record HolidayDto
+{
+ public DateTime Holidaydate { get; private set; }
+ public long HolidayId { get; private set; }
+ public string HolidayYear { get; private set; }
+}
\ No newline at end of file
diff --git a/Shared.Contracts/Holidays/IHolidayQueryService.cs b/Shared.Contracts/Holidays/IHolidayQueryService.cs
new file mode 100644
index 00000000..8b41c745
--- /dev/null
+++ b/Shared.Contracts/Holidays/IHolidayQueryService.cs
@@ -0,0 +1,6 @@
+namespace Shared.Contracts.Holidays;
+
+public interface IHolidayQueryService
+{
+ Task> GetHolidaysInDates(DateTime startDate, DateTime endDate);
+}
\ No newline at end of file
diff --git a/Shared.Contracts/PmUser/IPmUserCommandService.cs b/Shared.Contracts/PmUser/IPmUserCommandService.cs
new file mode 100644
index 00000000..193bcb71
--- /dev/null
+++ b/Shared.Contracts/PmUser/IPmUserCommandService.cs
@@ -0,0 +1,6 @@
+namespace Shared.Contracts.PmUser;
+
+public interface IPmUserCommandService
+{
+ Task<(bool isSuccess, string pmUserDto)> Create();
+}
\ No newline at end of file
diff --git a/Shared.Contracts/Shared.Contracts.csproj b/Shared.Contracts/Shared.Contracts.csproj
new file mode 100644
index 00000000..237d6616
--- /dev/null
+++ b/Shared.Contracts/Shared.Contracts.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net10.0
+ enable
+ enable
+
+
+