Explorar el Código

2- Project, UserTasks, UserTaskHistory

zinab_elgendy hace 1 año
padre
commit
11dc93bb52
Se han modificado 74 ficheros con 2796 adiciones y 2496 borrados
  1. 63 0
      MTWorkHR.API/Controllers/ProjectController.cs
  2. 59 0
      MTWorkHR.API/Controllers/UserTaskController.cs
  3. 6 0
      MTWorkHR.API/Program.cs
  4. 2 0
      MTWorkHR.Application/ApplicationServiceRegistration.cs
  5. 0 0
      MTWorkHR.Application/Dtos/EntityDto.cs
  6. 0 0
      MTWorkHR.Application/Dtos/Identity/AttachmentDto.cs
  7. 0 0
      MTWorkHR.Application/Dtos/Identity/AuthRequest.cs
  8. 0 0
      MTWorkHR.Application/Dtos/Identity/AuthResponse.cs
  9. 0 0
      MTWorkHR.Application/Dtos/Identity/ForgetPasswordDto.cs
  10. 0 0
      MTWorkHR.Application/Dtos/Identity/LoginDto.cs
  11. 0 0
      MTWorkHR.Application/Dtos/Identity/RegistrationRequest.cs
  12. 0 0
      MTWorkHR.Application/Dtos/Identity/RegistrationResponse.cs
  13. 0 0
      MTWorkHR.Application/Dtos/Identity/ResetPasswordDto.cs
  14. 0 0
      MTWorkHR.Application/Dtos/Identity/RoleDto.cs
  15. 0 0
      MTWorkHR.Application/Dtos/Identity/RolePermissionDto.cs
  16. 0 0
      MTWorkHR.Application/Dtos/Identity/UserAddressDto.cs
  17. 0 0
      MTWorkHR.Application/Dtos/Identity/UserAllDto.cs
  18. 0 0
      MTWorkHR.Application/Dtos/Identity/UserDto.cs
  19. 0 0
      MTWorkHR.Application/Dtos/Identity/UserRoleDto.cs
  20. 0 4
      MTWorkHR.Application/Models/Identity/UserUpdateDto.cs
  21. 1 1
      MTWorkHR.Application/Models/PagingDto.cs
  22. 14 0
      MTWorkHR.Application/Dtos/User/ProjectDto.cs
  23. 25 0
      MTWorkHR.Application/Dtos/User/UserTaskDto.cs
  24. 5 1
      MTWorkHR.Application/Mapper/MappingProfile.cs
  25. 4 13
      MTWorkHR.Application/Services/Base/BaseService.cs
  26. 11 0
      MTWorkHR.Application/Services/Interfaces/IProjectService.cs
  27. 12 0
      MTWorkHR.Application/Services/Interfaces/IUserTaskService.cs
  28. 54 0
      MTWorkHR.Application/Services/User/ProjectService.cs
  29. 70 24
      MTWorkHR.Application/Services/Auth/UserService.cs
  30. 44 0
      MTWorkHR.Application/Services/User/UserTaskService.cs
  31. 2 2
      MTWorkHR.Core/Entities/Base/FullAuditEntity.cs
  32. 22 0
      MTWorkHR.Core/Entities/User/Project.cs
  33. 32 0
      MTWorkHR.Core/Entities/User/UserTask.cs
  34. 25 0
      MTWorkHR.Core/Entities/User/UserTaskAttachment.cs
  35. 26 0
      MTWorkHR.Core/Entities/User/UserTaskHistory.cs
  36. 22 0
      MTWorkHR.Core/Entities/User/UserTaskStatus.cs
  37. 16 0
      MTWorkHR.Core/Global/Enum/PriorityEnum.cs
  38. 4 4
      MTWorkHR.Core/IDto/IPagingInputDto.cs
  39. 1 1
      MTWorkHR.Core/IRepositories/Base/IRepository.cs
  40. 16 0
      MTWorkHR.Core/IRepositories/IProjectRepository.cs
  41. 8 0
      MTWorkHR.Core/IRepositories/ITaskStatusRepository.cs
  42. 16 0
      MTWorkHR.Core/IRepositories/IUserTaskAttachmentRepository.cs
  43. 15 0
      MTWorkHR.Core/IRepositories/IUserTaskHistoryRepository.cs
  44. 15 0
      MTWorkHR.Core/IRepositories/IUserTaskRepository.cs
  45. 5 0
      MTWorkHR.Core/IUnitOfWork/IUnitOfWork.cs
  46. 2 0
      MTWorkHR.Identity/DBContext/HRIdentityDBContext.cs
  47. 0 667
      MTWorkHR.Identity/Migrations/20240131192843_updateUser.Designer.cs
  48. 0 735
      MTWorkHR.Identity/Migrations/20240131193715_updateUserAddress.Designer.cs
  49. 0 55
      MTWorkHR.Identity/Migrations/20240131193715_updateUserAddress.cs
  50. 0 735
      MTWorkHR.Identity/Migrations/20240212140551_updateCompanyConfig.Designer.cs
  51. 0 100
      MTWorkHR.Identity/Migrations/20240212140551_updateCompanyConfig.cs
  52. 0 39
      MTWorkHR.Identity/Migrations/20240214085318_addAttachmentType.cs
  53. 4 4
      MTWorkHR.Identity/Migrations/20240214085318_addAttachmentType.Designer.cs
  54. 65 21
      MTWorkHR.Identity/Migrations/20240131192843_updateUser.cs
  55. 2 2
      MTWorkHR.Identity/Migrations/HRIdentityDBContextModelSnapshot.cs
  56. 36 0
      MTWorkHR.Infrastructure/Configurations/AttachmentTypeConfiguration.cs
  57. 7 0
      MTWorkHR.Infrastructure/Data/HRDataContext.cs
  58. 11 11
      MTWorkHR.Infrastructure/EmailService/MailSender.cs
  59. 8 0
      MTWorkHR.Infrastructure/InfrastructureServiceRegistration.cs
  60. 1 0
      MTWorkHR.Infrastructure/MTWorkHR.Infrastructure.csproj
  61. 683 0
      MTWorkHR.Infrastructure/Migrations/20240225115219_UserTasks.Designer.cs
  62. 211 0
      MTWorkHR.Infrastructure/Migrations/20240225115219_UserTasks.cs
  63. 682 0
      MTWorkHR.Infrastructure/Migrations/20240225123213_UserTasks2.Designer.cs
  64. 40 0
      MTWorkHR.Infrastructure/Migrations/20240225123213_UserTasks2.cs
  65. 313 0
      MTWorkHR.Infrastructure/Migrations/HRDataContextModelSnapshot.cs
  66. 0 43
      MTWorkHR.Infrastructure/PersistenceServiceRegistration.cs
  67. 7 1
      MTWorkHR.Infrastructure/Repositories/Auth/UserRoleRepository.cs
  68. 24 27
      MTWorkHR.Infrastructure/Repositories/Repository.cs
  69. 17 0
      MTWorkHR.Infrastructure/Repositories/User/ProjectRepository.cs
  70. 17 0
      MTWorkHR.Infrastructure/Repositories/User/TaskAttachmentRepository.cs
  71. 17 0
      MTWorkHR.Infrastructure/Repositories/User/TaskStatusRepository.cs
  72. 17 0
      MTWorkHR.Infrastructure/Repositories/User/UserTaskHistoryRepository.cs
  73. 17 0
      MTWorkHR.Infrastructure/Repositories/User/UserTaskRepository.cs
  74. 20 6
      MTWorkHR.Infrastructure/UnitOfWork/UnitOfWork.cs

+ 63 - 0
MTWorkHR.API/Controllers/ProjectController.cs

@@ -0,0 +1,63 @@
+using Microsoft.AspNetCore.Authorization;
+
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using MTWorkHR.Application.Identity;
+using MTWorkHR.Application.Models;
+using MTWorkHR.Application.Services.Interfaces;
+using MTWorkHR.Identity.Services;
+
+namespace MTWorkHR.API.Controllers
+{
+    [Route("api/[controller]")]
+    [ApiController]
+    public class ProjectController : ControllerBase
+    {
+        private readonly IProjectService _ProjectService;
+        public ProjectController(IProjectService UserProjectService)
+        {
+            this._ProjectService = UserProjectService;
+        }
+        [HttpGet("GetAll")]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+
+        public async Task<ActionResult<List<ProjectDto>>> GetAll([FromQuery] PagingInputDto pagingInput)
+        {
+            return Ok(await _ProjectService.GetAll(pagingInput));
+        }
+        [HttpGet("Get")]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+
+        public async Task<ActionResult<ProjectDto>> Get(long ProjectId)
+        {
+            return Ok(await _ProjectService.GetById(ProjectId));
+        }
+
+
+        [HttpPost("Create")]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+        public async Task<ActionResult<ProjectDto>> Create([FromBody] ProjectDto input)
+        {
+            return await _ProjectService.Create(input);
+        }
+
+        [HttpPost("Update")]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+
+        public async Task Update([FromBody] ProjectDto input)
+        {
+            await _ProjectService.Update(input);
+        }
+
+        [HttpPost("Delete")]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+
+        public async Task Delete(long id)
+        {
+            await _ProjectService.Delete(id);
+        }
+
+
+
+    }
+}

+ 59 - 0
MTWorkHR.API/Controllers/UserTaskController.cs

@@ -0,0 +1,59 @@
+using Microsoft.AspNetCore.Authorization;
+
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using MTWorkHR.Application.Identity;
+using MTWorkHR.Application.Models;
+using MTWorkHR.Application.Services.Interfaces;
+using MTWorkHR.Identity.Services;
+
+namespace MTWorkHR.API.Controllers
+{
+    [Route("api/[controller]")]
+    [ApiController]
+    public class UserTaskController : ControllerBase
+    {
+        private readonly IUserTaskService _userTaskService;
+        public UserTaskController(IUserTaskService UserUserTaskService)
+        {
+            this._userTaskService = UserUserTaskService;
+        }
+        [HttpGet("GetAll")]
+        public async Task<ActionResult<List<UserTaskDto>>> GetAll([FromQuery]PagingInputDto pagingInput)
+        {
+            return Ok(await _userTaskService.GetAll(pagingInput));
+        }
+        [HttpGet("Get")]
+        public async Task<ActionResult<UserTaskDto>> Get(long UserTaskId)
+        {
+            return Ok(await _userTaskService.GetById(UserTaskId));
+        }
+
+
+        [HttpPost("Create")]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+        public async Task<ActionResult<UserTaskDto>> Create([FromBody] UserTaskDto input)
+        {
+            return await _userTaskService.Create(input);
+        }
+
+        [HttpPost("Update")]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+
+        public async Task Update([FromBody] UserTaskDto input)
+        {
+            await _userTaskService.Update(input);
+        }
+
+        [HttpPost("Delete")]
+        [ProducesResponseType(StatusCodes.Status200OK)]
+
+        public async Task Delete(long id)
+        {
+            await _userTaskService.Delete(id);
+        }
+
+
+
+    }
+}

+ 6 - 0
MTWorkHR.API/Program.cs

@@ -10,6 +10,7 @@ using MTWorkHR.Application.Middlewares;
 using MTWorkHR.Application.Services.Interfaces;
 using MTWorkHR.Application.Filters;
 using MTWorkHR.Application.StartupService;
+using Microsoft.AspNetCore.Mvc;
 
 var builder = WebApplication.CreateBuilder(args);
 
@@ -34,6 +35,11 @@ builder.Services.AddControllers(options =>
     //add filter By the type 
     options.Filters.Add(typeof(InputValidationActionFilter));
 });
+//disable default model validation, because we handle this in InputValidationActionFilter and LoggingMiddleware.
+builder.Services.Configure<ApiBehaviorOptions>(options =>
+{
+    options.SuppressModelStateInvalidFilter = true;
+});
 // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
 builder.Services.AddEndpointsApiExplorer();
 builder.Services.AddSwaggerGen();

+ 2 - 0
MTWorkHR.Application/ApplicationServiceRegistration.cs

@@ -22,6 +22,8 @@ namespace MTWorkHR.Application
             services.AddTransient<IAuthService, AuthService>();
             services.AddTransient<IUserService, UserService>();
             services.AddTransient<IFileService, FileService>();
+            services.AddScoped<IProjectService, ProjectService>();
+            services.AddScoped<IUserTaskService, UserTaskService>();
             
             return services;
         }

MTWorkHR.Application/Models/EntityDto.cs → MTWorkHR.Application/Dtos/EntityDto.cs


MTWorkHR.Application/Models/Identity/AttachmentDto.cs → MTWorkHR.Application/Dtos/Identity/AttachmentDto.cs


MTWorkHR.Application/Models/Identity/AuthRequest.cs → MTWorkHR.Application/Dtos/Identity/AuthRequest.cs


MTWorkHR.Application/Models/Identity/AuthResponse.cs → MTWorkHR.Application/Dtos/Identity/AuthResponse.cs


MTWorkHR.Application/Models/Identity/ForgetPasswordDto.cs → MTWorkHR.Application/Dtos/Identity/ForgetPasswordDto.cs


MTWorkHR.Application/Models/Identity/LoginDto.cs → MTWorkHR.Application/Dtos/Identity/LoginDto.cs


MTWorkHR.Application/Models/Identity/RegistrationRequest.cs → MTWorkHR.Application/Dtos/Identity/RegistrationRequest.cs


MTWorkHR.Application/Models/Identity/RegistrationResponse.cs → MTWorkHR.Application/Dtos/Identity/RegistrationResponse.cs


MTWorkHR.Application/Models/Identity/ResetPasswordDto.cs → MTWorkHR.Application/Dtos/Identity/ResetPasswordDto.cs


MTWorkHR.Application/Models/Identity/RoleDto.cs → MTWorkHR.Application/Dtos/Identity/RoleDto.cs


MTWorkHR.Application/Models/Identity/RolePermissionDto.cs → MTWorkHR.Application/Dtos/Identity/RolePermissionDto.cs


MTWorkHR.Application/Models/Identity/UserAddressDto.cs → MTWorkHR.Application/Dtos/Identity/UserAddressDto.cs


MTWorkHR.Application/Models/Identity/UserAllDto.cs → MTWorkHR.Application/Dtos/Identity/UserAllDto.cs


MTWorkHR.Application/Models/Identity/UserDto.cs → MTWorkHR.Application/Dtos/Identity/UserDto.cs


MTWorkHR.Application/Models/Identity/UserRoleDto.cs → MTWorkHR.Application/Dtos/Identity/UserRoleDto.cs


+ 0 - 4
MTWorkHR.Application/Models/Identity/UserUpdateDto.cs

@@ -19,9 +19,5 @@ namespace MTWorkHR.Application.Models
         public string PhoneNumber { get; set; }
         public bool IsSalesman { get; set; }
         public IList<UserRoleDto>? UserRoles { get; set; }
-       // public IList<UserBranchDto>? UserBranchs { get; set; }
-       // public IList<UserHierarchyDto> Hierarchies { get; set; }
-
-       // public IList<UserCycleApprovalDto>? UserCycleApprovals { get; set; }
     }
 }

+ 1 - 1
MTWorkHR.Application/Models/PagingDto.cs

@@ -31,7 +31,7 @@ namespace MTWorkHR.Application.Models
         public string? OrderByField { get => string.IsNullOrEmpty(orderByField)?"Id": orderByField; set => orderByField = value; }
         public string? OrderType { get => string.IsNullOrEmpty(orderType) ? "asc" : orderType; set => orderType = value; }
         public string? Filter { get; set; }
-        public string HiddenFilter { get ; set; }
+        public string? HiddenFilter { get ; set; }
     }
 }
 

+ 14 - 0
MTWorkHR.Application/Dtos/User/ProjectDto.cs

@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Http;
+using MTWorkHR.Core.Entities.Base;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace MTWorkHR.Application.Models
+{
+    public class ProjectDto:EntityDto
+    {
+        public string? NameAr { get; set; }
+        public string? NameEn { get; set; }
+
+    }
+}

+ 25 - 0
MTWorkHR.Application/Dtos/User/UserTaskDto.cs

@@ -0,0 +1,25 @@
+using Microsoft.AspNetCore.Http;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.Entities.Base;
+using MTWorkHR.Core.Global;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace MTWorkHR.Application.Models
+{
+    public class UserTaskDto : EntityDto
+    {
+        public long AssignedUserId { get; set; }
+        public string? AssignedUserName { get; set; }
+
+        public string Title { get; set; }
+        public string Description { get; set; }
+        public DateTime DueDate { get; set; }
+        public PriorityEnum Priority { get; set; }
+        public int ProjectId { get; set; }
+
+        public long StatusId { get; set; }
+        public List<AttachmentDto> TaskAttachments { get; set; }
+
+    }
+}

+ 5 - 1
MTWorkHR.Application/Mapper/MappingProfile.cs

@@ -1,6 +1,7 @@
 using AutoMapper;
 using Microsoft.AspNetCore.Identity;
 using MTWorkHR.Application.Models;
+using MTWorkHR.Core.Entities;
 using MTWorkHR.Core.Global;
 using MTWorkHR.Identity.Entities;
 using System;
@@ -57,7 +58,10 @@ namespace MTWorkHR.Application.Mapper
 
             CreateMap<RolePermissionDto, RolePermission>().ReverseMap();
 
-        
+            CreateMap<ProjectDto, Project>().ReverseMap();
+            CreateMap<UserTaskDto, UserTask>().ReverseMap();
+            CreateMap<UserTaskAttachment, AttachmentDto>().ReverseMap();
+
 
 
         }

+ 4 - 13
MTWorkHR.Application/Services/Base/BaseService.cs

@@ -25,13 +25,10 @@ namespace MTWorkHR.Application.Services
             repository = (IRepository<TEntity>)unitOfWork.GetRepositoryByName(typeof(TEntity).Name);
 
         }
-        //Task<IPagingResultDto<TGetAllDto>> IService<TEntity, TDto, TGetAllDto>.GetAll(int pageNumber, int pageSize, string orderByField, string orderType)
-        //{
-        //    throw new NotImplementedException();
-        //}
+        
         public virtual async Task<PagingResultDto<TGetAllDto>> GetAll(PagingInputDto pagingInputDto)
         {
-            var result = await repository.GetAllAsync();
+            var result = await repository.GetAllAsync(pagingInputDto);
 
             var list = Mapper.MapperObject.Mapper.Map<IList<TGetAllDto>>(result.Item1);
 
@@ -120,10 +117,7 @@ namespace MTWorkHR.Application.Services
             repository = (IRepository<TEntity>)unitOfWork.GetRepositoryByName(typeof(TEntity).Name);
 
         }
-        //Task<IPagingResultDto<TGetAllDto>> IService<TEntity, TDto, TGetAllDto>.GetAll(int pageNumber, int pageSize, string orderByField, string orderType)
-        //{
-        //    throw new NotImplementedException();
-        //}
+       
         public virtual async Task<PagingResultDto<TGetAllDto>> GetAll(PagingInputDto pagingInputDto)
         {
             var result = await repository.GetAllAsync();
@@ -216,10 +210,7 @@ namespace MTWorkHR.Application.Services
             repository = (IRepository<TEntity>)unitOfWork.GetRepositoryByName(typeof(TEntity).Name);
 
         }
-        //Task<IPagingResultDto<TGetAllDto>> IService<TEntity, TDto, TGetAllDto>.GetAll(int pageNumber, int pageSize, string orderByField, string orderType)
-        //{
-        //    throw new NotImplementedException();
-        //}
+      
         public virtual async Task<PagingResultDto<TGetAllDto>> GetAll(PagingInputDto pagingInputDto)
         {
             var result = await repository.GetAllAsync();

+ 11 - 0
MTWorkHR.Application/Services/Interfaces/IProjectService.cs

@@ -0,0 +1,11 @@
+
+using MTWorkHR.Application.Models;
+using MTWorkHR.Core.Entities;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Application.Services.Interfaces
+{
+    public interface IProjectService : IService<Project, ProjectDto, ProjectDto>
+    {
+    }
+}

+ 12 - 0
MTWorkHR.Application/Services/Interfaces/IUserTaskService.cs

@@ -0,0 +1,12 @@
+
+using MTWorkHR.Application.Models;
+using MTWorkHR.Core.Entities.Base;
+using MTWorkHR.Core.Entities;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Application.Services.Interfaces
+{
+    public interface IUserTaskService : IService<UserTask, UserTaskDto, UserTaskDto>
+    {
+    }
+}

+ 54 - 0
MTWorkHR.Application/Services/User/ProjectService.cs

@@ -0,0 +1,54 @@
+using Microsoft.AspNetCore.Identity;
+using Microsoft.AspNetCore.WebUtilities;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using MTWorkHR.Application.Identity;
+using MTWorkHR.Application.Mapper;
+using MTWorkHR.Application.Models;
+using MTWorkHR.Core.Global;
+using MTWorkHR.Core.IRepositories;
+using MTWorkHR.Core.UnitOfWork;
+using MTWorkHR.Identity.Entities;
+using MTWorkHR.Application.Services.Interfaces;
+using MTWorkHR.Core.Email;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Infrastructure.UnitOfWorks;
+
+namespace MTWorkHR.Application.Services
+{
+    public class ProjectService : BaseService<Project, ProjectDto, ProjectDto>, IProjectService
+    {
+        private readonly IUnitOfWork _unitOfWork;
+        //private readonly AppSettingsConfiguration _configuration;
+        //private readonly GlobalInfo _globalInfo;
+
+        public ProjectService(IUnitOfWork unitOfWork):base(unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+
+        //public override async Task<ProjectDto> GetById(long id)
+        //{
+        //    var entity = await _unitOfWork.Project.GetByIdAsync(id);
+        //    var response = MapperObject.Mapper.Map<ProjectDto>(entity);
+        //    return response;
+        //}
+
+        //public override async Task<List<ProjectDto>> GetAll()
+        //{
+        //    var projects = await _unitOfWork.Project.GetAllAsync();
+        //    var response = MapperObject.Mapper.Map<List<ProjectDto>>(projects);
+        //    return response;
+        //}
+
+        //public override async Task Delete(long id)
+        //{
+        //    var entity = await _unitOfWork.Project.GetByIdAsync(id);
+        //    await _unitOfWork.Project.DeleteAsync(entity);
+        //}
+
+
+
+    }
+}

+ 70 - 24
MTWorkHR.Application/Services/Auth/UserService.cs

@@ -12,8 +12,9 @@ using MTWorkHR.Identity.Entities;
 using MTWorkHR.Application.Services.Interfaces;
 using MTWorkHR.Core.Email;
 using MTWorkHR.Core.Entities;
+using MTWorkHR.Infrastructure.UnitOfWorks;
 
-namespace MTWorkHR.Identity.Services
+namespace MTWorkHR.Application.Services
 {
     public class UserService : IUserService
     {
@@ -39,7 +40,7 @@ namespace MTWorkHR.Identity.Services
             _globalInfo = globalInfo;
             _fileService = fileService;
         }
-       
+
 
         public async Task<UserDto> GetById(string id)
         {
@@ -56,7 +57,7 @@ namespace MTWorkHR.Identity.Services
         public async Task<List<UserDto>> GetAll()
         {
             var employees = await _userManager.GetUsersInRoleAsync("Employee");
-            return employees.Select( e=>  new UserDto
+            return employees.Select(e => new UserDto
             {
                 Email = e.Email,
                 FirstName = e.FirstName,
@@ -76,7 +77,7 @@ namespace MTWorkHR.Identity.Services
             }
         }
 
-      
+
         public async Task<UserDto> Create(UserDto input)
         {
             var emailExists = await _userManager.FindByEmailAsync(input.Email);
@@ -91,7 +92,7 @@ namespace MTWorkHR.Identity.Services
             if (userExists != null)
                 throw new AppException(ExceptionEnum.RecordAlreadyExist);
             //loop for given list of attachment, and move each file from Temp path to Actual path
-          //  _fileService.UploadFiles(files);
+            //  _fileService.UploadFiles(files);
 
             if (!await _fileService.CopyFileToActualFolder(input.UserAttachments.ToList()))
                 throw new AppException(ExceptionEnum.CouldNotMoveFiles);
@@ -100,7 +101,7 @@ namespace MTWorkHR.Identity.Services
             _unitOfWork.BeginTran();
 
             //saving user
-            var result = await _userManager.CreateAsync(user);
+            var result = await _userManager.CreateAsync(user, input.Password);
             if (!result.Succeeded)
                 throw new AppException(ExceptionEnum.RecordCreationFailed);
             input.Id = user.Id;
@@ -110,14 +111,14 @@ namespace MTWorkHR.Identity.Services
             foreach (var role in userRoles)
             {
                 role.UserId = user.Id;
-              //  var roleOb = input.UserRoles?.FirstOrDefault(r=> r.RoleId == role.RoleId) ;
-              //  var roleName = roleOb != null ? roleOb.RoleName : "Employee";
-              //  await _userManager.AddToRoleAsync(user, roleName);
-                if ((await _roleManager.FindByIdAsync(role.RoleId)) == null)
+                if (await _roleManager.FindByIdAsync(role.RoleId) == null)
                     throw new AppException(ExceptionEnum.RecordNotExist);
+                var roleOb = input.UserRoles?.FirstOrDefault(r => r.RoleId == role.RoleId);
+                var roleName = roleOb != null ? roleOb.RoleName : "Employee";
+                await _userManager.AddToRoleAsync(user, roleName);
             }
-            
-            await _userRole.AddRangeAsync(userRoles);
+
+            // await _userRole.AddRangeAsync(userRoles);
 
             await _unitOfWork.CompleteAsync();
             _unitOfWork.CommitTran();
@@ -125,11 +126,15 @@ namespace MTWorkHR.Identity.Services
             {
                 var resultPassReset = await GetConfirmEmailURL(user.Id);
 
-                var sendMailResult = await _emailSender.SendEmail(new EmailMessage {
+                var sendMailResult = await _emailSender.SendEmail(new EmailMessage
+                {
                     Subject = "Register Confirmation",
-                    To = input.Email,  
-                    Body =  "Please Set Your Password (this link will expired after 24 hours)"
-                    , url = resultPassReset.Item1, userId = user.Id } );
+                    To = input.Email,
+                    Body = "Please Set Your Password (this link will expired after 24 hours)"
+                    ,
+                    url = resultPassReset.Item1,
+                    userId = user.Id
+                });
                 if (!sendMailResult)
                 {
                     throw new AppException("User created, but could not send the email!");
@@ -148,11 +153,11 @@ namespace MTWorkHR.Identity.Services
             if (user == null)
                 throw new AppException(ExceptionEnum.RecordNotExist);
             var result = await _userManager.ConfirmEmailAsync(user, input.Token);
-            return result.Succeeded ;
+            return result.Succeeded;
         }
-        private async Task<Tuple< string, string>> GetResetPasswordURL(string userId)
+        private async Task<Tuple<string, string>> GetResetPasswordURL(string userId)
         {
-            var user = await _userManager.Users.FirstOrDefaultAsync(x => (!x.IsDeleted) && x.Id.Equals(userId));
+            var user = await _userManager.Users.FirstOrDefaultAsync(x => !x.IsDeleted && x.Id.Equals(userId));
             if (user == null)
                 throw new AppException(ExceptionEnum.RecordNotExist);
 
@@ -162,12 +167,12 @@ namespace MTWorkHR.Identity.Services
             var endpointUri = new Uri(string.Concat($"{origin}/", route));
             var userURL = QueryHelpers.AddQueryString(endpointUri.ToString(), "userId", user.Id);
             var passwordResetURL = QueryHelpers.AddQueryString(userURL.ToString(), "token", code);
-            return new Tuple <string, string> ( passwordResetURL, user.Email);
+            return new Tuple<string, string>(passwordResetURL, user.Email);
         }
 
         private async Task<Tuple<string, string>> GetConfirmEmailURL(string userId)
         {
-            var user = await _userManager.Users.FirstOrDefaultAsync(x => (!x.IsDeleted) && x.Id.Equals(userId));
+            var user = await _userManager.Users.FirstOrDefaultAsync(x => !x.IsDeleted && x.Id.Equals(userId));
             if (user == null)
                 throw new AppException(ExceptionEnum.RecordNotExist);
 
@@ -180,11 +185,52 @@ namespace MTWorkHR.Identity.Services
             return new Tuple<string, string>(confirmEmailUrl, user.Email);
         }
 
-        public Task<UserDto> Update(UserDto input)
+        public async Task<UserDto> Update(UserDto input)
         {
-            throw new NotImplementedException();
+            try
+            {
+                var entity = await _userManager.Users.FirstOrDefaultAsync(x => x.Id == input.Id);
+
+                if (entity == null)
+                    throw new AppException(ExceptionEnum.RecordNotExist);
+
+                MapperObject.Mapper.Map(input, entity);
+
+                _unitOfWork.BeginTran();
+
+                //saving user
+                var result = await _userManager.UpdateAsync(entity);
+                if (!result.Succeeded)
+                    throw new AppException(ExceptionEnum.RecordUpdateFailed);
+
+                //**saving userRoles
+
+                //add new user roles
+                var exsitedRolesIds = await _userRole.GetUserRoleIdsByUserID(input.Id);
+                if (input.UserRoles == null)
+                    input.UserRoles = new List<UserRoleDto>();
+                var newAddedRoles = MapperObject.Mapper.Map<List<IdentityUserRole<string>>>(input.UserRoles.Where(x => !exsitedRolesIds.Contains(x.RoleId)));
+                newAddedRoles.ForEach(x => x.UserId = input.Id);
+                await _userRole.AddRangeAsync(newAddedRoles);
+
+                //delete removed roles
+                var rolesIds = input.UserRoles.Select(x => x.RoleId).ToArray();
+                var removedRoles = await _userRole.GetRemovedUserRoleIdsByUserID(input.Id, rolesIds);
+                await _userRole.DeleteAsync(removedRoles.AsEnumerable());
+
+
+                await _unitOfWork.CompleteAsync();
+                _unitOfWork.CommitTran();
+            }
+            catch (Exception e)
+            {
+                throw e;
+            }
+
+            return input;
         }
 
+
         public Task<UserDto> UpdateWithoutChildren(UserDto input)
         {
             throw new NotImplementedException();
@@ -239,7 +285,7 @@ namespace MTWorkHR.Identity.Services
                 url = resultPassReset.Item1,
                 userId = userId
             });
-            
+
         }
 
         public async Task StopUser(string userId)

+ 44 - 0
MTWorkHR.Application/Services/User/UserTaskService.cs

@@ -0,0 +1,44 @@
+
+using MTWorkHR.Application.Models;
+using MTWorkHR.Core.UnitOfWork;
+using MTWorkHR.Application.Services.Interfaces;
+using MTWorkHR.Core.Entities;
+
+namespace MTWorkHR.Application.Services
+{
+    public class UserTaskService : BaseService<UserTask, UserTaskDto, UserTaskDto>, IUserTaskService
+    {
+        private readonly IUnitOfWork _unitOfWork;
+        //private readonly AppSettingsConfiguration _configuration;
+        //private readonly GlobalInfo _globalInfo;
+
+        public UserTaskService(IUnitOfWork unitOfWork):base(unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+
+        //public override async Task<ProjectDto> GetById(long id)
+        //{
+        //    var entity = await _unitOfWork.Project.GetByIdAsync(id);
+        //    var response = MapperObject.Mapper.Map<ProjectDto>(entity);
+        //    return response;
+        //}
+
+        //public override async Task<List<ProjectDto>> GetAll()
+        //{
+        //    var projects = await _unitOfWork.Project.GetAllAsync();
+        //    var response = MapperObject.Mapper.Map<List<ProjectDto>>(projects);
+        //    return response;
+        //}
+
+        //public override async Task Delete(long id)
+        //{
+        //    var entity = await _unitOfWork.Project.GetByIdAsync(id);
+        //    await _unitOfWork.Project.DeleteAsync(entity);
+        //}
+
+
+
+    }
+}

+ 2 - 2
MTWorkHR.Core/Entities/Base/FullAuditEntity.cs

@@ -14,7 +14,7 @@ namespace MTWorkHR.Core.Entities.Base
         public bool IsDeleted { get; set; }
         [MaxLength(450)]
         [Column(Order = 8)]
-        public string DeleteUserId { get; set; }
+        public string? DeleteUserId { get; set; }
 
     }
 
@@ -24,7 +24,7 @@ namespace MTWorkHR.Core.Entities.Base
         public bool IsDeleted { get; set; }
         [MaxLength(450)]
         [Column(Order = 8)]
-        public string DeleteUserId { get; set; }
+        public string? DeleteUserId { get; set; }
 
     }
 }

+ 22 - 0
MTWorkHR.Core/Entities/User/Project.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using MTWorkHR.Core.Entities.Base;
+
+namespace MTWorkHR.Core.Entities
+{
+    public class Project : Entity
+    {
+        [Required]
+        [MaxLength(250)]
+        [Filter]
+        public string NameAr { get; set; }
+        [Required]
+        [MaxLength(250)]
+        [Filter]
+        public string NameEn { get; set; }
+    }
+}

+ 32 - 0
MTWorkHR.Core/Entities/User/UserTask.cs

@@ -0,0 +1,32 @@
+using MTWorkHR.Core.Entities.Base;
+using MTWorkHR.Core.Global;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Core.Entities
+{
+    public class UserTask : FullAuditEntity
+    {
+        public long AssignedUserId { get; set; }
+
+        public string Title { get; set; }
+        
+        public string Description { get; set; }
+        public DateTime DueDate { get; set; }
+        public PriorityEnum Priority { get; set; }
+       
+        public long ProjectId { get; set; }
+        [ForeignKey("ProjectId")]
+        public Project Project { get; set; }
+
+        public long StatusId { get; set; }
+        [ForeignKey("StatusId")]
+        public UserTaskStatus TaskStatus { get; set; }
+        public List<UserTaskAttachment> TaskAttachments { get; set; }
+
+    }
+}

+ 25 - 0
MTWorkHR.Core/Entities/User/UserTaskAttachment.cs

@@ -0,0 +1,25 @@
+using MTWorkHR.Core.Entities.Base;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+
+
+namespace MTWorkHR.Core.Entities
+{
+    public class UserTaskAttachment : AuditEntity
+    {
+        public long TaskId { get; set; }
+
+        [ForeignKey("TaskId ")]
+        public UserTask UserTask { get; set; }
+        public long AttachmentTypeId { get; set; }
+
+        [ForeignKey("AttachmentTypeId")]
+        public AttachmentType AttachmentType { get; set; }
+
+        [MaxLength(250)]
+        public string FileName { get; set; }
+
+        [MaxLength(250)]
+        public string OriginalName { get; set; }
+    }
+}

+ 26 - 0
MTWorkHR.Core/Entities/User/UserTaskHistory.cs

@@ -0,0 +1,26 @@
+using MTWorkHR.Core.Entities.Base;
+using MTWorkHR.Core.Global;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Core.Entities
+{
+    public class UserTaskHistory : AuditEntity
+    {
+        public long AssignedToUserId { get; set; }
+        [MaxLength(500)]
+        public string Comment { get; set; }
+        
+        public long CurrentStatusId { get; set; }
+
+        [ForeignKey("CurrentStatusId")]
+        public UserTaskStatus TaskStatus { get; set; }
+        public bool IsDeleted { get; set; }
+
+    }
+}

+ 22 - 0
MTWorkHR.Core/Entities/User/UserTaskStatus.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using MTWorkHR.Core.Entities.Base;
+
+namespace MTWorkHR.Core.Entities
+{
+    public class UserTaskStatus : Entity
+    {
+        [Required]
+        [MaxLength(250)]
+        [Filter]
+        public string NameAr { get; set; }
+        [Required]
+        [MaxLength(250)]
+        [Filter]
+        public string NameEn { get; set; }
+    }
+}

+ 16 - 0
MTWorkHR.Core/Global/Enum/PriorityEnum.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Core.Global
+{
+    public enum PriorityEnum
+    {
+        Low = 1,
+        Medium = 2,
+        Hight = 3,
+        Urgent = 4
+    }
+}

+ 4 - 4
MTWorkHR.Core/IDto/IPagingInputDto.cs

@@ -10,9 +10,9 @@ namespace MTWorkHR.Core.IDto
     {
         int PageNumber { get; set; }
         int PageSize { get; set; }
-        string OrderByField { get; set; }
-        string OrderType { get; set; }
-        string Filter { get; set; }
-        public string HiddenFilter { get; set; }
+        string? OrderByField { get; set; }
+        string? OrderType { get; set; }
+        string? Filter { get; set; }
+        public string? HiddenFilter { get; set; }
     }
 }

+ 1 - 1
MTWorkHR.Core/IRepositories/Base/IRepository.cs

@@ -11,7 +11,7 @@ namespace MTWorkHR.Core.IRepositories.Base
     public interface IRepository<T> where T : class
     {
         Task<T> GetByIdAsync(long id);
-        //Task<Tuple<ICollection<T>, int>> GetAllAsync(IPagingInputDto pagingInputDto);
+        Task<Tuple<ICollection<T>, int>> GetAllAsync(IPagingInputDto pagingInputDto);
 
         Task<Tuple<ICollection<T>, int>> GetAllAsync();
         Task<T> AddAsync(T entity);

+ 16 - 0
MTWorkHR.Core/IRepositories/IProjectRepository.cs

@@ -0,0 +1,16 @@
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Core.IRepositories
+{
+    public interface IProjectRepository : IRepository<Project>
+    {
+    }
+}

+ 8 - 0
MTWorkHR.Core/IRepositories/ITaskStatusRepository.cs

@@ -0,0 +1,8 @@
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IRepositories.Base;
+namespace MTWorkHR.Core.IRepositories
+{
+    public interface ITaskStatusRepository : IRepository<UserTaskStatus>
+    {
+    }
+}

+ 16 - 0
MTWorkHR.Core/IRepositories/IUserTaskAttachmentRepository.cs

@@ -0,0 +1,16 @@
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories.Base;
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Core.IRepositories
+{
+    public interface IUserTaskAttachmentRepository : IRepository<UserTaskAttachment>
+    {
+    }
+}

+ 15 - 0
MTWorkHR.Core/IRepositories/IUserTaskHistoryRepository.cs

@@ -0,0 +1,15 @@
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Core.IRepositories
+{
+    public interface IUserTaskHistoryRepository : IRepository<UserTaskHistory>
+    {
+    }
+}

+ 15 - 0
MTWorkHR.Core/IRepositories/IUserTaskRepository.cs

@@ -0,0 +1,15 @@
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Core.IRepositories
+{
+    public interface IUserTaskRepository : IRepository<UserTask>
+    {
+    }
+}

+ 5 - 0
MTWorkHR.Core/IUnitOfWork/IUnitOfWork.cs

@@ -9,6 +9,11 @@ namespace MTWorkHR.Core.UnitOfWork
     public interface IUnitOfWork
     {
         IPermissionRepository Permission { get; }
+        IProjectRepository Project { get; }
+        IUserTaskRepository UserTask { get; }
+      //  IUserTaskAttachmentRepository UserTaskAttachment { get; }
+        ITaskStatusRepository UserTaskStatus { get; }
+        IUserTaskHistoryRepository UserTaskHistory { get; }
         ICompanyRepository Company { get; }
         Task<int> CompleteAsync();
 

+ 2 - 0
MTWorkHR.Identity/DBContext/HRIdentityDBContext.cs

@@ -14,6 +14,8 @@ namespace MTWorkHR.Identity.DBContext
            // this._globalInfo = globalInfo;
 
         }
+        public DbSet<AttachmentType> AttachmentTypes { get; set; }
+        public DbSet<UserAttachment> UserAttachments { get; set; }
         public DbSet<Permission> Permissions { get; set; }
         public DbSet<RolePermission> RolePermissions { get; set; }
         protected override void OnModelCreating(ModelBuilder builder)

+ 0 - 667
MTWorkHR.Identity/Migrations/20240131192843_updateUser.Designer.cs

@@ -1,667 +0,0 @@
-// <auto-generated />
-using System;
-using MTWorkHR.Identity.DBContext;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace MTWorkHR.Identity.Migrations
-{
-    [DbContext(typeof(HRIdentityDBContext))]
-    [Migration("20240131192843_updateUser")]
-    partial class updateUser
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("ProductVersion", "8.0.1")
-                .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
-            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
-            modelBuilder.Entity("ApplicationRoleApplicationUser", b =>
-                {
-                    b.Property<string>("UserRolesId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("UsersId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("UserRolesId", "UsersId");
-
-                    b.HasIndex("UsersId");
-
-                    b.ToTable("ApplicationRoleApplicationUser");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Core.Entities.Base.AttachmentType", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<bool>("IsRequired")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("NameAr")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("NameEn")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AttachmentType");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationRole", b =>
-                {
-                    b.Property<string>("Id")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ConcurrencyStamp")
-                        .IsConcurrencyToken()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<DateTime>("CreateDate")
-                        .HasColumnType("datetime2");
-
-                    b.Property<string>("CreateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("DeleteUserId")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool?>("IsAdmin")
-                        .HasColumnType("bit");
-
-                    b.Property<bool>("IsDeleted")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("Name")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("NormalizedName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<DateTime?>("UpdateDate")
-                        .HasColumnType("datetime2");
-
-                    b.Property<string>("UpdateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("NormalizedName")
-                        .IsUnique()
-                        .HasDatabaseName("RoleNameIndex")
-                        .HasFilter("[NormalizedName] IS NOT NULL");
-
-                    b.ToTable("AspNetRoles", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            Id = "AD5B3B92-2311-48F8-9DEC-F9FAEF1F211A",
-                            CreateDate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
-                            IsAdmin = true,
-                            IsDeleted = false,
-                            Name = "Admin",
-                            NormalizedName = "ADMIN"
-                        },
-                        new
-                        {
-                            Id = "EM5B3B92-2311-48F8-9DEC-F9FAEF1F211E",
-                            CreateDate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
-                            IsAdmin = false,
-                            IsDeleted = false,
-                            Name = "Employee",
-                            NormalizedName = "EMPLOYEE"
-                        });
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.Property<string>("Id")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<int>("AccessFailedCount")
-                        .HasColumnType("int");
-
-                    b.Property<string>("ConcurrencyStamp")
-                        .IsConcurrencyToken()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("CreateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("DeleteUserId")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<bool>("EmailConfirmed")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("FavoriteName")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("FirstName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<decimal>("IncomeTaxValue")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<bool>("IsDeleted")
-                        .HasColumnType("bit");
-
-                    b.Property<bool>("IsStopped")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("JobTitle")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("LastName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool>("LockoutEnabled")
-                        .HasColumnType("bit");
-
-                    b.Property<DateTimeOffset?>("LockoutEnd")
-                        .HasColumnType("datetimeoffset");
-
-                    b.Property<string>("ManagerId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("NormalizedEmail")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("NormalizedUserName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("PassportNumber")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("PasswordHash")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("PhoneNumber")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool>("PhoneNumberConfirmed")
-                        .HasColumnType("bit");
-
-                    b.Property<int>("QualificationId")
-                        .HasColumnType("int");
-
-                    b.Property<string>("SecurityStamp")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<decimal>("TaxNumber")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<bool>("TwoFactorEnabled")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("University")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UpdateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<int>("UserType")
-                        .HasColumnType("int");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ManagerId");
-
-                    b.HasIndex("NormalizedEmail")
-                        .HasDatabaseName("EmailIndex");
-
-                    b.HasIndex("NormalizedUserName")
-                        .IsUnique()
-                        .HasDatabaseName("UserNameIndex")
-                        .HasFilter("[NormalizedUserName] IS NOT NULL");
-
-                    b.ToTable("AspNetUsers", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            Id = "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
-                            AccessFailedCount = 0,
-                            ConcurrencyStamp = "7cc87689-9eab-4280-b8e3-1834080783a5",
-                            Email = "a@b.com",
-                            EmailConfirmed = true,
-                            FirstName = "Zinab",
-                            IncomeTaxValue = 0m,
-                            IsDeleted = false,
-                            IsStopped = false,
-                            LastName = "Elgendy",
-                            LockoutEnabled = false,
-                            NormalizedEmail = "A@B.COM",
-                            NormalizedUserName = "ADMIN",
-                            PassportNumber = "1234567",
-                            PasswordHash = "AQAAAAIAAYagAAAAEPg+ASbciPFxtyxQq8Wx5ilBUQ0RbAoITXXkOQm1PzC5BzySX0sn/wUmOjBKPDGV9w==",
-                            PhoneNumber = "1234567890",
-                            PhoneNumberConfirmed = true,
-                            QualificationId = 0,
-                            SecurityStamp = "49bb16c3-4704-4c60-908d-dc8506950acc",
-                            TaxNumber = 0m,
-                            TwoFactorEnabled = false,
-                            UserName = "Admin",
-                            UserType = 1
-                        },
-                        new
-                        {
-                            Id = "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
-                            AccessFailedCount = 0,
-                            ConcurrencyStamp = "4af7b4cf-802a-455b-b598-997e167745b3",
-                            Email = "ali@b.com",
-                            EmailConfirmed = true,
-                            FirstName = "Ali",
-                            IncomeTaxValue = 0m,
-                            IsDeleted = false,
-                            IsStopped = false,
-                            LastName = "Farok",
-                            LockoutEnabled = false,
-                            NormalizedEmail = "ALI@B.COM",
-                            NormalizedUserName = "ALI",
-                            PassportNumber = "7654321001010",
-                            PasswordHash = "AQAAAAIAAYagAAAAEI3QJkcZjCH4Y8Db4rEgL8Mmll5oCvYcWiXZjQSN9bGW4SMcjHe3ZPMnkN/l9DmJeQ==",
-                            PhoneNumber = "1234567890",
-                            PhoneNumberConfirmed = true,
-                            QualificationId = 0,
-                            SecurityStamp = "62549056-1b9d-46d4-84f8-adea3e4d8b68",
-                            TaxNumber = 0m,
-                            TwoFactorEnabled = false,
-                            UserName = "ali",
-                            UserType = 1
-                        });
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.Permission", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<string>("CategoryName")
-                        .IsRequired()
-                        .HasMaxLength(150)
-                        .HasColumnType("nvarchar(150)");
-
-                    b.Property<string>("Desc")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<bool>("Show")
-                        .HasColumnType("bit");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Permissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.RolePermission", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<long>("PermissionId")
-                        .HasColumnType("bigint");
-
-                    b.Property<string>("PermissionName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("RoleId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("PermissionId");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("RolePermissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAttachment", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<long>("AttachmentTypeId")
-                        .HasColumnType("bigint");
-
-                    b.Property<DateTime>("CreateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(3);
-
-                    b.Property<string>("CreateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(1);
-
-                    b.Property<string>("FileName")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("OriginalName")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<DateTime?>("UpdateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(4);
-
-                    b.Property<string>("UpdateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(2);
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AttachmentTypeId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserAttachment");
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("ClaimType")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("ClaimValue")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("RoleId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("AspNetRoleClaims", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("ClaimType")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("ClaimValue")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("AspNetUserClaims", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
-                {
-                    b.Property<string>("LoginProvider")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ProviderKey")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ProviderDisplayName")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("LoginProvider", "ProviderKey");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("AspNetUserLogins", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
-                {
-                    b.Property<string>("UserId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("RoleId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("UserId", "RoleId");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("AspNetUserRoles", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            UserId = "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
-                            RoleId = "AD5B3B92-2311-48F8-9DEC-F9FAEF1F211A"
-                        },
-                        new
-                        {
-                            UserId = "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
-                            RoleId = "EM5B3B92-2311-48F8-9DEC-F9FAEF1F211E"
-                        });
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
-                {
-                    b.Property<string>("UserId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("LoginProvider")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("Value")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.HasKey("UserId", "LoginProvider", "Name");
-
-                    b.ToTable("AspNetUserTokens", (string)null);
-                });
-
-            modelBuilder.Entity("ApplicationRoleApplicationUser", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("UserRolesId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UsersId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", "Manager")
-                        .WithMany()
-                        .HasForeignKey("ManagerId");
-
-                    b.Navigation("Manager");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.RolePermission", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.Permission", "Permission")
-                        .WithMany()
-                        .HasForeignKey("PermissionId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", "Role")
-                        .WithMany("RolePermissions")
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Permission");
-
-                    b.Navigation("Role");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAttachment", b =>
-                {
-                    b.HasOne("MTWorkHR.Core.Entities.Base.AttachmentType", "AttachmentType")
-                        .WithMany()
-                        .HasForeignKey("AttachmentTypeId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", "User")
-                        .WithMany("UserAttachments")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("AttachmentType");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationRole", b =>
-                {
-                    b.Navigation("RolePermissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.Navigation("UserAttachments");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}

+ 0 - 735
MTWorkHR.Identity/Migrations/20240131193715_updateUserAddress.Designer.cs

@@ -1,735 +0,0 @@
-// <auto-generated />
-using System;
-using MTWorkHR.Identity.DBContext;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace MTWorkHR.Identity.Migrations
-{
-    [DbContext(typeof(HRIdentityDBContext))]
-    [Migration("20240131193715_updateUserAddress")]
-    partial class updateUserAddress
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("ProductVersion", "8.0.1")
-                .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
-            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
-            modelBuilder.Entity("ApplicationRoleApplicationUser", b =>
-                {
-                    b.Property<string>("UserRolesId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("UsersId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("UserRolesId", "UsersId");
-
-                    b.HasIndex("UsersId");
-
-                    b.ToTable("ApplicationRoleApplicationUser");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Core.Entities.Base.AttachmentType", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<bool>("IsRequired")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("NameAr")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("NameEn")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AttachmentType");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationRole", b =>
-                {
-                    b.Property<string>("Id")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ConcurrencyStamp")
-                        .IsConcurrencyToken()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<DateTime>("CreateDate")
-                        .HasColumnType("datetime2");
-
-                    b.Property<string>("CreateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("DeleteUserId")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool?>("IsAdmin")
-                        .HasColumnType("bit");
-
-                    b.Property<bool>("IsDeleted")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("Name")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("NormalizedName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<DateTime?>("UpdateDate")
-                        .HasColumnType("datetime2");
-
-                    b.Property<string>("UpdateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("NormalizedName")
-                        .IsUnique()
-                        .HasDatabaseName("RoleNameIndex")
-                        .HasFilter("[NormalizedName] IS NOT NULL");
-
-                    b.ToTable("AspNetRoles", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            Id = "AD5B3B92-2311-48F8-9DEC-F9FAEF1F211A",
-                            CreateDate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
-                            IsAdmin = true,
-                            IsDeleted = false,
-                            Name = "Admin",
-                            NormalizedName = "ADMIN"
-                        },
-                        new
-                        {
-                            Id = "EM5B3B92-2311-48F8-9DEC-F9FAEF1F211E",
-                            CreateDate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
-                            IsAdmin = false,
-                            IsDeleted = false,
-                            Name = "Employee",
-                            NormalizedName = "EMPLOYEE"
-                        });
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.Property<string>("Id")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<int>("AccessFailedCount")
-                        .HasColumnType("int");
-
-                    b.Property<string>("ConcurrencyStamp")
-                        .IsConcurrencyToken()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("CreateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("DeleteUserId")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<bool>("EmailConfirmed")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("FavoriteName")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("FirstName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<decimal>("IncomeTaxValue")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<bool>("IsDeleted")
-                        .HasColumnType("bit");
-
-                    b.Property<bool>("IsStopped")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("JobTitle")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("LastName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool>("LockoutEnabled")
-                        .HasColumnType("bit");
-
-                    b.Property<DateTimeOffset?>("LockoutEnd")
-                        .HasColumnType("datetimeoffset");
-
-                    b.Property<string>("ManagerId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("NormalizedEmail")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("NormalizedUserName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("PassportNumber")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("PasswordHash")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("PhoneNumber")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool>("PhoneNumberConfirmed")
-                        .HasColumnType("bit");
-
-                    b.Property<int>("QualificationId")
-                        .HasColumnType("int");
-
-                    b.Property<string>("SecurityStamp")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<decimal>("TaxNumber")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<bool>("TwoFactorEnabled")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("University")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UpdateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<int>("UserType")
-                        .HasColumnType("int");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ManagerId");
-
-                    b.HasIndex("NormalizedEmail")
-                        .HasDatabaseName("EmailIndex");
-
-                    b.HasIndex("NormalizedUserName")
-                        .IsUnique()
-                        .HasDatabaseName("UserNameIndex")
-                        .HasFilter("[NormalizedUserName] IS NOT NULL");
-
-                    b.ToTable("AspNetUsers", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            Id = "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
-                            AccessFailedCount = 0,
-                            ConcurrencyStamp = "7cc87689-9eab-4280-b8e3-1834080783a5",
-                            Email = "a@b.com",
-                            EmailConfirmed = true,
-                            FirstName = "Zinab",
-                            IncomeTaxValue = 0m,
-                            IsDeleted = false,
-                            IsStopped = false,
-                            LastName = "Elgendy",
-                            LockoutEnabled = false,
-                            NormalizedEmail = "A@B.COM",
-                            NormalizedUserName = "ADMIN",
-                            PassportNumber = "1234567",
-                            PasswordHash = "AQAAAAIAAYagAAAAEPg+ASbciPFxtyxQq8Wx5ilBUQ0RbAoITXXkOQm1PzC5BzySX0sn/wUmOjBKPDGV9w==",
-                            PhoneNumber = "1234567890",
-                            PhoneNumberConfirmed = true,
-                            QualificationId = 0,
-                            SecurityStamp = "49bb16c3-4704-4c60-908d-dc8506950acc",
-                            TaxNumber = 0m,
-                            TwoFactorEnabled = false,
-                            UserName = "Admin",
-                            UserType = 1
-                        },
-                        new
-                        {
-                            Id = "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
-                            AccessFailedCount = 0,
-                            ConcurrencyStamp = "4af7b4cf-802a-455b-b598-997e167745b3",
-                            Email = "ali@b.com",
-                            EmailConfirmed = true,
-                            FirstName = "Ali",
-                            IncomeTaxValue = 0m,
-                            IsDeleted = false,
-                            IsStopped = false,
-                            LastName = "Farok",
-                            LockoutEnabled = false,
-                            NormalizedEmail = "ALI@B.COM",
-                            NormalizedUserName = "ALI",
-                            PassportNumber = "7654321001010",
-                            PasswordHash = "AQAAAAIAAYagAAAAEI3QJkcZjCH4Y8Db4rEgL8Mmll5oCvYcWiXZjQSN9bGW4SMcjHe3ZPMnkN/l9DmJeQ==",
-                            PhoneNumber = "1234567890",
-                            PhoneNumberConfirmed = true,
-                            QualificationId = 0,
-                            SecurityStamp = "62549056-1b9d-46d4-84f8-adea3e4d8b68",
-                            TaxNumber = 0m,
-                            TwoFactorEnabled = false,
-                            UserName = "ali",
-                            UserType = 1
-                        });
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.Permission", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<string>("CategoryName")
-                        .IsRequired()
-                        .HasMaxLength(150)
-                        .HasColumnType("nvarchar(150)");
-
-                    b.Property<string>("Desc")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<bool>("Show")
-                        .HasColumnType("bit");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Permissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.RolePermission", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<long>("PermissionId")
-                        .HasColumnType("bigint");
-
-                    b.Property<string>("PermissionName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("RoleId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("PermissionId");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("RolePermissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAddress", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<string>("AddressDesc")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("City")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<int>("CountryId")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("CreateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(3);
-
-                    b.Property<string>("CreateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(1);
-
-                    b.Property<string>("PostalCode")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<DateTime?>("UpdateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(4);
-
-                    b.Property<string>("UpdateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(2);
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserAddress");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAttachment", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<long>("AttachmentTypeId")
-                        .HasColumnType("bigint");
-
-                    b.Property<DateTime>("CreateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(3);
-
-                    b.Property<string>("CreateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(1);
-
-                    b.Property<string>("FileName")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("OriginalName")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<DateTime?>("UpdateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(4);
-
-                    b.Property<string>("UpdateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(2);
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AttachmentTypeId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserAttachment");
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("ClaimType")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("ClaimValue")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("RoleId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("AspNetRoleClaims", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("ClaimType")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("ClaimValue")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("AspNetUserClaims", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
-                {
-                    b.Property<string>("LoginProvider")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ProviderKey")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ProviderDisplayName")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("LoginProvider", "ProviderKey");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("AspNetUserLogins", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
-                {
-                    b.Property<string>("UserId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("RoleId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("UserId", "RoleId");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("AspNetUserRoles", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            UserId = "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
-                            RoleId = "AD5B3B92-2311-48F8-9DEC-F9FAEF1F211A"
-                        },
-                        new
-                        {
-                            UserId = "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
-                            RoleId = "EM5B3B92-2311-48F8-9DEC-F9FAEF1F211E"
-                        });
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
-                {
-                    b.Property<string>("UserId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("LoginProvider")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("Value")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.HasKey("UserId", "LoginProvider", "Name");
-
-                    b.ToTable("AspNetUserTokens", (string)null);
-                });
-
-            modelBuilder.Entity("ApplicationRoleApplicationUser", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("UserRolesId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UsersId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", "Manager")
-                        .WithMany()
-                        .HasForeignKey("ManagerId");
-
-                    b.Navigation("Manager");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.RolePermission", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.Permission", "Permission")
-                        .WithMany()
-                        .HasForeignKey("PermissionId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", "Role")
-                        .WithMany("RolePermissions")
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Permission");
-
-                    b.Navigation("Role");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAddress", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", "User")
-                        .WithOne("UserAddress")
-                        .HasForeignKey("MTWorkHR.Identity.Entities.UserAddress", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAttachment", b =>
-                {
-                    b.HasOne("MTWorkHR.Core.Entities.Base.AttachmentType", "AttachmentType")
-                        .WithMany()
-                        .HasForeignKey("AttachmentTypeId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", "User")
-                        .WithMany("UserAttachments")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("AttachmentType");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationRole", b =>
-                {
-                    b.Navigation("RolePermissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.Navigation("UserAddress")
-                        .IsRequired();
-
-                    b.Navigation("UserAttachments");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}

+ 0 - 55
MTWorkHR.Identity/Migrations/20240131193715_updateUserAddress.cs

@@ -1,55 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace MTWorkHR.Identity.Migrations
-{
-    /// <inheritdoc />
-    public partial class updateUserAddress : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "UserAddress",
-                columns: table => new
-                {
-                    Id = table.Column<long>(type: "bigint", nullable: false)
-                        .Annotation("SqlServer:Identity", "1, 1"),
-                    CreateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
-                    UpdateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
-                    CreateDate = table.Column<DateTime>(type: "datetime2", nullable: false),
-                    UpdateDate = table.Column<DateTime>(type: "datetime2", nullable: true),
-                    UserId = table.Column<string>(type: "nvarchar(450)", nullable: false),
-                    CountryId = table.Column<int>(type: "int", nullable: false),
-                    City = table.Column<string>(type: "nvarchar(max)", nullable: false),
-                    PostalCode = table.Column<string>(type: "nvarchar(max)", nullable: false),
-                    AddressDesc = table.Column<string>(type: "nvarchar(max)", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_UserAddress", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_UserAddress_AspNetUsers_UserId",
-                        column: x => x.UserId,
-                        principalTable: "AspNetUsers",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_UserAddress_UserId",
-                table: "UserAddress",
-                column: "UserId",
-                unique: true);
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "UserAddress");
-        }
-    }
-}

+ 0 - 735
MTWorkHR.Identity/Migrations/20240212140551_updateCompanyConfig.Designer.cs

@@ -1,735 +0,0 @@
-// <auto-generated />
-using System;
-using MTWorkHR.Identity.DBContext;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace MTWorkHR.Identity.Migrations
-{
-    [DbContext(typeof(HRIdentityDBContext))]
-    [Migration("20240212140551_updateCompanyConfig")]
-    partial class updateCompanyConfig
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("ProductVersion", "8.0.1")
-                .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
-            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
-            modelBuilder.Entity("ApplicationRoleApplicationUser", b =>
-                {
-                    b.Property<string>("UserRolesId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("UsersId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("UserRolesId", "UsersId");
-
-                    b.HasIndex("UsersId");
-
-                    b.ToTable("ApplicationRoleApplicationUser");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Core.Entities.Base.AttachmentType", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<bool>("IsRequired")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("NameAr")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("NameEn")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("AttachmentType");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationRole", b =>
-                {
-                    b.Property<string>("Id")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ConcurrencyStamp")
-                        .IsConcurrencyToken()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<DateTime>("CreateDate")
-                        .HasColumnType("datetime2");
-
-                    b.Property<string>("CreateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("DeleteUserId")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool?>("IsAdmin")
-                        .HasColumnType("bit");
-
-                    b.Property<bool>("IsDeleted")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("Name")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("NormalizedName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<DateTime?>("UpdateDate")
-                        .HasColumnType("datetime2");
-
-                    b.Property<string>("UpdateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("NormalizedName")
-                        .IsUnique()
-                        .HasDatabaseName("RoleNameIndex")
-                        .HasFilter("[NormalizedName] IS NOT NULL");
-
-                    b.ToTable("AspNetRoles", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            Id = "AD5B3B92-2311-48F8-9DEC-F9FAEF1F211A",
-                            CreateDate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
-                            IsAdmin = true,
-                            IsDeleted = false,
-                            Name = "Admin",
-                            NormalizedName = "ADMIN"
-                        },
-                        new
-                        {
-                            Id = "EM5B3B92-2311-48F8-9DEC-F9FAEF1F211E",
-                            CreateDate = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
-                            IsAdmin = false,
-                            IsDeleted = false,
-                            Name = "Employee",
-                            NormalizedName = "EMPLOYEE"
-                        });
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.Property<string>("Id")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<int>("AccessFailedCount")
-                        .HasColumnType("int");
-
-                    b.Property<string>("ConcurrencyStamp")
-                        .IsConcurrencyToken()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("CreateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("DeleteUserId")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("Email")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<bool>("EmailConfirmed")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("FavoriteName")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("FirstName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<decimal?>("IncomeTaxValue")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<bool>("IsDeleted")
-                        .HasColumnType("bit");
-
-                    b.Property<bool>("IsStopped")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("JobTitle")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("LastName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool>("LockoutEnabled")
-                        .HasColumnType("bit");
-
-                    b.Property<DateTimeOffset?>("LockoutEnd")
-                        .HasColumnType("datetimeoffset");
-
-                    b.Property<string>("ManagerId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("NormalizedEmail")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("NormalizedUserName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<string>("PassportNumber")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("PasswordHash")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("PhoneNumber")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<bool>("PhoneNumberConfirmed")
-                        .HasColumnType("bit");
-
-                    b.Property<int?>("QualificationId")
-                        .HasColumnType("int");
-
-                    b.Property<string>("SecurityStamp")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<decimal?>("TaxNumber")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<bool>("TwoFactorEnabled")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("University")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UpdateUser")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserName")
-                        .HasMaxLength(256)
-                        .HasColumnType("nvarchar(256)");
-
-                    b.Property<int>("UserType")
-                        .HasColumnType("int");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ManagerId");
-
-                    b.HasIndex("NormalizedEmail")
-                        .HasDatabaseName("EmailIndex");
-
-                    b.HasIndex("NormalizedUserName")
-                        .IsUnique()
-                        .HasDatabaseName("UserNameIndex")
-                        .HasFilter("[NormalizedUserName] IS NOT NULL");
-
-                    b.ToTable("AspNetUsers", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            Id = "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
-                            AccessFailedCount = 0,
-                            ConcurrencyStamp = "7cc87689-9eab-4280-b8e3-1834080783a5",
-                            Email = "a@b.com",
-                            EmailConfirmed = true,
-                            FirstName = "Zinab",
-                            IncomeTaxValue = 1m,
-                            IsDeleted = false,
-                            IsStopped = false,
-                            LastName = "Elgendy",
-                            LockoutEnabled = false,
-                            NormalizedEmail = "A@B.COM",
-                            NormalizedUserName = "ADMIN",
-                            PassportNumber = "1234567",
-                            PasswordHash = "AQAAAAIAAYagAAAAEPg+ASbciPFxtyxQq8Wx5ilBUQ0RbAoITXXkOQm1PzC5BzySX0sn/wUmOjBKPDGV9w==",
-                            PhoneNumber = "1234567890",
-                            PhoneNumberConfirmed = true,
-                            QualificationId = 1,
-                            SecurityStamp = "49bb16c3-4704-4c60-908d-dc8506950acc",
-                            TaxNumber = 111m,
-                            TwoFactorEnabled = false,
-                            UserName = "Admin",
-                            UserType = 1
-                        },
-                        new
-                        {
-                            Id = "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
-                            AccessFailedCount = 0,
-                            ConcurrencyStamp = "4af7b4cf-802a-455b-b598-997e167745b3",
-                            Email = "ali@b.com",
-                            EmailConfirmed = true,
-                            FirstName = "Ali",
-                            IncomeTaxValue = 100m,
-                            IsDeleted = false,
-                            IsStopped = false,
-                            LastName = "Farok",
-                            LockoutEnabled = false,
-                            NormalizedEmail = "ALI@B.COM",
-                            NormalizedUserName = "ALI",
-                            PassportNumber = "7654321001010",
-                            PasswordHash = "AQAAAAIAAYagAAAAEI3QJkcZjCH4Y8Db4rEgL8Mmll5oCvYcWiXZjQSN9bGW4SMcjHe3ZPMnkN/l9DmJeQ==",
-                            PhoneNumber = "1234567890",
-                            PhoneNumberConfirmed = true,
-                            QualificationId = 1,
-                            SecurityStamp = "62549056-1b9d-46d4-84f8-adea3e4d8b68",
-                            TaxNumber = 222m,
-                            TwoFactorEnabled = false,
-                            UserName = "ali",
-                            UserType = 1
-                        });
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.Permission", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<string>("CategoryName")
-                        .IsRequired()
-                        .HasMaxLength(150)
-                        .HasColumnType("nvarchar(150)");
-
-                    b.Property<string>("Desc")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<bool>("Show")
-                        .HasColumnType("bit");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Permissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.RolePermission", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<long>("PermissionId")
-                        .HasColumnType("bigint");
-
-                    b.Property<string>("PermissionName")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("RoleId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("PermissionId");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("RolePermissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAddress", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<string>("AddressDesc")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("City")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<int>("CountryId")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("CreateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(3);
-
-                    b.Property<string>("CreateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(1);
-
-                    b.Property<string>("PostalCode")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<DateTime?>("UpdateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(4);
-
-                    b.Property<string>("UpdateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(2);
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("UserAddress");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAttachment", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("bigint")
-                        .HasColumnOrder(0);
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
-
-                    b.Property<long>("AttachmentTypeId")
-                        .HasColumnType("bigint");
-
-                    b.Property<DateTime>("CreateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(3);
-
-                    b.Property<string>("CreateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(1);
-
-                    b.Property<string>("FileName")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<string>("OriginalName")
-                        .IsRequired()
-                        .HasMaxLength(250)
-                        .HasColumnType("nvarchar(250)");
-
-                    b.Property<DateTime?>("UpdateDate")
-                        .HasColumnType("datetime2")
-                        .HasColumnOrder(4);
-
-                    b.Property<string>("UpdateUser")
-                        .HasMaxLength(450)
-                        .HasColumnType("nvarchar(450)")
-                        .HasColumnOrder(2);
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AttachmentTypeId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("UserAttachment");
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("ClaimType")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("ClaimValue")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("RoleId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("AspNetRoleClaims", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("ClaimType")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("ClaimValue")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("AspNetUserClaims", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
-                {
-                    b.Property<string>("LoginProvider")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ProviderKey")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("ProviderDisplayName")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("UserId")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("LoginProvider", "ProviderKey");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("AspNetUserLogins", (string)null);
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
-                {
-                    b.Property<string>("UserId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("RoleId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.HasKey("UserId", "RoleId");
-
-                    b.HasIndex("RoleId");
-
-                    b.ToTable("AspNetUserRoles", (string)null);
-
-                    b.HasData(
-                        new
-                        {
-                            UserId = "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
-                            RoleId = "AD5B3B92-2311-48F8-9DEC-F9FAEF1F211A"
-                        },
-                        new
-                        {
-                            UserId = "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
-                            RoleId = "EM5B3B92-2311-48F8-9DEC-F9FAEF1F211E"
-                        });
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
-                {
-                    b.Property<string>("UserId")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("LoginProvider")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("Name")
-                        .HasColumnType("nvarchar(450)");
-
-                    b.Property<string>("Value")
-                        .HasColumnType("nvarchar(max)");
-
-                    b.HasKey("UserId", "LoginProvider", "Name");
-
-                    b.ToTable("AspNetUserTokens", (string)null);
-                });
-
-            modelBuilder.Entity("ApplicationRoleApplicationUser", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("UserRolesId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UsersId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", "Manager")
-                        .WithMany()
-                        .HasForeignKey("ManagerId");
-
-                    b.Navigation("Manager");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.RolePermission", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.Permission", "Permission")
-                        .WithMany()
-                        .HasForeignKey("PermissionId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", "Role")
-                        .WithMany("RolePermissions")
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Permission");
-
-                    b.Navigation("Role");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAddress", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", "User")
-                        .WithOne("UserAddress")
-                        .HasForeignKey("MTWorkHR.Identity.Entities.UserAddress", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.UserAttachment", b =>
-                {
-                    b.HasOne("MTWorkHR.Core.Entities.Base.AttachmentType", "AttachmentType")
-                        .WithMany()
-                        .HasForeignKey("AttachmentTypeId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", "User")
-                        .WithMany("UserAttachments")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("AttachmentType");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationRole", null)
-                        .WithMany()
-                        .HasForeignKey("RoleId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
-                {
-                    b.HasOne("MTWorkHR.Identity.Entities.ApplicationUser", null)
-                        .WithMany()
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationRole", b =>
-                {
-                    b.Navigation("RolePermissions");
-                });
-
-            modelBuilder.Entity("MTWorkHR.Identity.Entities.ApplicationUser", b =>
-                {
-                    b.Navigation("UserAddress")
-                        .IsRequired();
-
-                    b.Navigation("UserAttachments");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}

+ 0 - 100
MTWorkHR.Identity/Migrations/20240212140551_updateCompanyConfig.cs

@@ -1,100 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace MTWorkHR.Identity.Migrations
-{
-    /// <inheritdoc />
-    public partial class updateCompanyConfig : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<decimal>(
-                name: "TaxNumber",
-                table: "AspNetUsers",
-                type: "decimal(18,2)",
-                nullable: true,
-                oldClrType: typeof(decimal),
-                oldType: "decimal(18,2)");
-
-            migrationBuilder.AlterColumn<int>(
-                name: "QualificationId",
-                table: "AspNetUsers",
-                type: "int",
-                nullable: true,
-                oldClrType: typeof(int),
-                oldType: "int");
-
-            migrationBuilder.AlterColumn<decimal>(
-                name: "IncomeTaxValue",
-                table: "AspNetUsers",
-                type: "decimal(18,2)",
-                nullable: true,
-                oldClrType: typeof(decimal),
-                oldType: "decimal(18,2)");
-
-            migrationBuilder.UpdateData(
-                table: "AspNetUsers",
-                keyColumn: "Id",
-                keyValue: "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
-                columns: new[] { "IncomeTaxValue", "QualificationId", "TaxNumber" },
-                values: new object[] { 1m, 1, 111m });
-
-            migrationBuilder.UpdateData(
-                table: "AspNetUsers",
-                keyColumn: "Id",
-                keyValue: "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
-                columns: new[] { "IncomeTaxValue", "QualificationId", "TaxNumber" },
-                values: new object[] { 100m, 1, 222m });
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.AlterColumn<decimal>(
-                name: "TaxNumber",
-                table: "AspNetUsers",
-                type: "decimal(18,2)",
-                nullable: false,
-                defaultValue: 0m,
-                oldClrType: typeof(decimal),
-                oldType: "decimal(18,2)",
-                oldNullable: true);
-
-            migrationBuilder.AlterColumn<int>(
-                name: "QualificationId",
-                table: "AspNetUsers",
-                type: "int",
-                nullable: false,
-                defaultValue: 0,
-                oldClrType: typeof(int),
-                oldType: "int",
-                oldNullable: true);
-
-            migrationBuilder.AlterColumn<decimal>(
-                name: "IncomeTaxValue",
-                table: "AspNetUsers",
-                type: "decimal(18,2)",
-                nullable: false,
-                defaultValue: 0m,
-                oldClrType: typeof(decimal),
-                oldType: "decimal(18,2)",
-                oldNullable: true);
-
-            migrationBuilder.UpdateData(
-                table: "AspNetUsers",
-                keyColumn: "Id",
-                keyValue: "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
-                columns: new[] { "IncomeTaxValue", "QualificationId", "TaxNumber" },
-                values: new object[] { 0m, 0, 0m });
-
-            migrationBuilder.UpdateData(
-                table: "AspNetUsers",
-                keyColumn: "Id",
-                keyValue: "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
-                columns: new[] { "IncomeTaxValue", "QualificationId", "TaxNumber" },
-                values: new object[] { 0m, 0, 0m });
-        }
-    }
-}

+ 0 - 39
MTWorkHR.Identity/Migrations/20240214085318_addAttachmentType.cs

@@ -1,39 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
-
-namespace MTWorkHR.Identity.Migrations
-{
-    /// <inheritdoc />
-    public partial class addAttachmentType : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.InsertData(
-                table: "AttachmentType",
-                columns: new[] { "Id", "IsRequired", "NameAr", "NameEn" },
-                values: new object[,]
-                {
-                    { 1L, false, "السيرة الذاتية", "CV" },
-                    { 2L, false, "الهوية", "Identification" }
-                });
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DeleteData(
-                table: "AttachmentType",
-                keyColumn: "Id",
-                keyValue: 1L);
-
-            migrationBuilder.DeleteData(
-                table: "AttachmentType",
-                keyColumn: "Id",
-                keyValue: 2L);
-        }
-    }
-}

+ 4 - 4
MTWorkHR.Identity/Migrations/20240214085318_addAttachmentType.Designer.cs

@@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 namespace MTWorkHR.Identity.Migrations
 {
     [DbContext(typeof(HRIdentityDBContext))]
-    [Migration("20240214085318_addAttachmentType")]
-    partial class addAttachmentType
+    [Migration("20240221104859_updateUser")]
+    partial class updateUser
     {
         /// <inheritdoc />
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -64,7 +64,7 @@ namespace MTWorkHR.Identity.Migrations
 
                     b.HasKey("Id");
 
-                    b.ToTable("AttachmentType");
+                    b.ToTable("AttachmentTypes");
 
                     b.HasData(
                         new
@@ -488,7 +488,7 @@ namespace MTWorkHR.Identity.Migrations
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserAttachment");
+                    b.ToTable("UserAttachments");
                 });
 
             modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>

+ 65 - 21
MTWorkHR.Identity/Migrations/20240131192843_updateUser.cs

@@ -3,6 +3,8 @@ using Microsoft.EntityFrameworkCore.Migrations;
 
 #nullable disable
 
+#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
+
 namespace MTWorkHR.Identity.Migrations
 {
     /// <inheritdoc />
@@ -21,8 +23,7 @@ namespace MTWorkHR.Identity.Migrations
                 name: "IncomeTaxValue",
                 table: "AspNetUsers",
                 type: "decimal(18,2)",
-                nullable: false,
-                defaultValue: 0m);
+                nullable: true);
 
             migrationBuilder.AddColumn<string>(
                 name: "JobTitle",
@@ -41,15 +42,13 @@ namespace MTWorkHR.Identity.Migrations
                 name: "QualificationId",
                 table: "AspNetUsers",
                 type: "int",
-                nullable: false,
-                defaultValue: 0);
+                nullable: true);
 
             migrationBuilder.AddColumn<decimal>(
                 name: "TaxNumber",
                 table: "AspNetUsers",
                 type: "decimal(18,2)",
-                nullable: false,
-                defaultValue: 0m);
+                nullable: true);
 
             migrationBuilder.AddColumn<string>(
                 name: "University",
@@ -58,7 +57,7 @@ namespace MTWorkHR.Identity.Migrations
                 nullable: true);
 
             migrationBuilder.CreateTable(
-                name: "AttachmentType",
+                name: "AttachmentTypes",
                 columns: table => new
                 {
                     Id = table.Column<long>(type: "bigint", nullable: false)
@@ -69,11 +68,38 @@ namespace MTWorkHR.Identity.Migrations
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_AttachmentType", x => x.Id);
+                    table.PrimaryKey("PK_AttachmentTypes", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "UserAddress",
+                columns: table => new
+                {
+                    Id = table.Column<long>(type: "bigint", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    CreateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
+                    UpdateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
+                    CreateDate = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    UpdateDate = table.Column<DateTime>(type: "datetime2", nullable: true),
+                    UserId = table.Column<string>(type: "nvarchar(450)", nullable: false),
+                    CountryId = table.Column<int>(type: "int", nullable: false),
+                    City = table.Column<string>(type: "nvarchar(max)", nullable: false),
+                    PostalCode = table.Column<string>(type: "nvarchar(max)", nullable: false),
+                    AddressDesc = table.Column<string>(type: "nvarchar(max)", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_UserAddress", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_UserAddress_AspNetUsers_UserId",
+                        column: x => x.UserId,
+                        principalTable: "AspNetUsers",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
                 });
 
             migrationBuilder.CreateTable(
-                name: "UserAttachment",
+                name: "UserAttachments",
                 columns: table => new
                 {
                     Id = table.Column<long>(type: "bigint", nullable: false)
@@ -89,17 +115,17 @@ namespace MTWorkHR.Identity.Migrations
                 },
                 constraints: table =>
                 {
-                    table.PrimaryKey("PK_UserAttachment", x => x.Id);
+                    table.PrimaryKey("PK_UserAttachments", x => x.Id);
                     table.ForeignKey(
-                        name: "FK_UserAttachment_AspNetUsers_UserId",
+                        name: "FK_UserAttachments_AspNetUsers_UserId",
                         column: x => x.UserId,
                         principalTable: "AspNetUsers",
                         principalColumn: "Id",
                         onDelete: ReferentialAction.Cascade);
                     table.ForeignKey(
-                        name: "FK_UserAttachment_AttachmentType_AttachmentTypeId",
+                        name: "FK_UserAttachments_AttachmentTypes_AttachmentTypeId",
                         column: x => x.AttachmentTypeId,
-                        principalTable: "AttachmentType",
+                        principalTable: "AttachmentTypes",
                         principalColumn: "Id",
                         onDelete: ReferentialAction.Cascade);
                 });
@@ -109,23 +135,38 @@ namespace MTWorkHR.Identity.Migrations
                 keyColumn: "Id",
                 keyValue: "ADMB3B92-2311-48F8-9DEC-F9FAEF1F21UA",
                 columns: new[] { "FavoriteName", "IncomeTaxValue", "JobTitle", "PassportNumber", "QualificationId", "TaxNumber", "University" },
-                values: new object[] { null, 0m, null, "1234567", 0, 0m, null });
+                values: new object[] { null, 1m, null, "1234567", 1, 111m, null });
 
             migrationBuilder.UpdateData(
                 table: "AspNetUsers",
                 keyColumn: "Id",
                 keyValue: "AL5B3B92-2311-48F8-9DEC-F9FAEF1F21UB",
                 columns: new[] { "FavoriteName", "IncomeTaxValue", "JobTitle", "PassportNumber", "QualificationId", "TaxNumber", "University" },
-                values: new object[] { null, 0m, null, "7654321001010", 0, 0m, null });
+                values: new object[] { null, 100m, null, "7654321001010", 1, 222m, null });
+
+            migrationBuilder.InsertData(
+                table: "AttachmentTypes",
+                columns: new[] { "Id", "IsRequired", "NameAr", "NameEn" },
+                values: new object[,]
+                {
+                    { 1L, false, "السيرة الذاتية", "CV" },
+                    { 2L, false, "الهوية", "Identification" }
+                });
 
             migrationBuilder.CreateIndex(
-                name: "IX_UserAttachment_AttachmentTypeId",
-                table: "UserAttachment",
+                name: "IX_UserAddress_UserId",
+                table: "UserAddress",
+                column: "UserId",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserAttachments_AttachmentTypeId",
+                table: "UserAttachments",
                 column: "AttachmentTypeId");
 
             migrationBuilder.CreateIndex(
-                name: "IX_UserAttachment_UserId",
-                table: "UserAttachment",
+                name: "IX_UserAttachments_UserId",
+                table: "UserAttachments",
                 column: "UserId");
         }
 
@@ -133,10 +174,13 @@ namespace MTWorkHR.Identity.Migrations
         protected override void Down(MigrationBuilder migrationBuilder)
         {
             migrationBuilder.DropTable(
-                name: "UserAttachment");
+                name: "UserAddress");
+
+            migrationBuilder.DropTable(
+                name: "UserAttachments");
 
             migrationBuilder.DropTable(
-                name: "AttachmentType");
+                name: "AttachmentTypes");
 
             migrationBuilder.DropColumn(
                 name: "FavoriteName",

+ 2 - 2
MTWorkHR.Identity/Migrations/HRIdentityDBContextModelSnapshot.cs

@@ -61,7 +61,7 @@ namespace MTWorkHR.Identity.Migrations
 
                     b.HasKey("Id");
 
-                    b.ToTable("AttachmentType");
+                    b.ToTable("AttachmentTypes");
 
                     b.HasData(
                         new
@@ -485,7 +485,7 @@ namespace MTWorkHR.Identity.Migrations
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserAttachment");
+                    b.ToTable("UserAttachments");
                 });
 
             modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>

+ 36 - 0
MTWorkHR.Infrastructure/Configurations/AttachmentTypeConfiguration.cs

@@ -0,0 +1,36 @@
+using Microsoft.AspNetCore.Identity;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using MTWorkHR.Identity.Entities;
+using MTWorkHR.Core.Entities.Base;
+
+namespace MTWorkHR.Infrastructure.Configurations
+{
+    public class AttachmentTypeConfiguration : IEntityTypeConfiguration<AttachmentType>
+    {
+        
+        public void Configure(EntityTypeBuilder<AttachmentType> builder)
+        {
+            
+            builder.HasData(
+                new AttachmentType
+                {
+                    Id = 1,
+                    NameEn = "CV",
+                    NameAr = "السيرة الذاتية"
+                },
+                new AttachmentType
+                {
+                Id = 2,
+                    NameEn = "Identification",
+                    NameAr = "الهوية"
+                }
+               ) ;
+        }
+    }
+}

+ 7 - 0
MTWorkHR.Infrastructure/Data/HRDataContext.cs

@@ -15,6 +15,13 @@ namespace MTWorkHR.Infrastructure.Data
         public HRDataContext(DbContextOptions<HRDataContext> options) : base(options) { }
 
         public DbSet<Company> Companies { get; set; }
+        public DbSet<Project> Projects { get; set; }
+//        public DbSet<AttachmentType> AttachmentTypes { get; set; }
+        public DbSet<UserTaskStatus> UserTaskStatuses { get; set; }
+        public DbSet<UserTaskAttachment> UserTaskAttachments { get; set; }
+        public DbSet<UserTask> UserTasks { get; set; }
+        public DbSet<UserTaskHistory> UserTaskHistories { get; set; }
+      //------------------------Logs------------------------
         public DbSet<UserLog> UserLogs { get; set; }
         public DbSet<AuthLog> AuthLogs { get; set; }
         public DbSet<FileLog> FileLogs { get; set; }

+ 11 - 11
MTWorkHR.Infrastructure/EmailService/MailSender.cs

@@ -16,19 +16,19 @@ namespace MTWorkHR.Infrastructure.EmailService
 {
     public class MailSender : IMailSender
     {
-        public EmailSettings _emailSettings { get; }
-        public MailSender(IOptions<EmailSettings> emailSettings) 
+        public AppSettingsConfiguration _configuration { get; }
+        public MailSender(AppSettingsConfiguration configuration) 
         {
-            _emailSettings = emailSettings.Value;
+            _configuration = configuration;
         }
         public async Task<bool> SendEmailGrid(EmailMessage email)
         {
-            var client = new SendGridClient(_emailSettings.ApiKey);
+            var client = new SendGridClient(_configuration.MailSettings.ApiKey);
             var to = new EmailAddress(email.To);
             var from = new EmailAddress
             {
-                Email = _emailSettings.FromAddress,
-                Name = _emailSettings.FromName
+                Email = _configuration.MailSettings.FromAddress,
+                Name = _configuration.MailSettings.FromName
             };
             email.Body = email.Body + "  /n" + email.url;
             var message = MailHelper.CreateSingleEmail(from, to, email.Subject, email.Body, email.Body);
@@ -40,11 +40,11 @@ namespace MTWorkHR.Infrastructure.EmailService
         public async Task<bool> SendEmail(EmailMessage email)
         {
             var mailTo = email.To;
-            var settings = _emailSettings;
+            var settings = _configuration.MailSettings;
             if (settings.FromAddress == null || settings.FromAddress== "" || settings.Password == null || settings.TemplatePath == null || settings.Host == null || settings.Port == 0 || mailTo == null)
                 return false;
 
-            //string FilePath = _emailSettings.TemplatePath;
+            //string FilePath = _configuration.MailSettings.TemplatePath;
             //StreamReader str = new StreamReader(FilePath);
             //string MailText = str.ReadToEnd();
             //str.Close();
@@ -52,7 +52,7 @@ namespace MTWorkHR.Infrastructure.EmailService
             //MailText = MailText.Replace("[NotificationType]", email.Subject).Replace("[Info]", email.Body).Replace("[Link]", email.url );
 
             var emailObj = new MimeMessage();
-            emailObj.Sender = MailboxAddress.Parse(_emailSettings.FromAddress);
+            emailObj.Sender = MailboxAddress.Parse(_configuration.MailSettings.FromAddress);
             emailObj.To.Add(MailboxAddress.Parse(mailTo));
             emailObj.Subject = email.Subject;
 
@@ -64,8 +64,8 @@ namespace MTWorkHR.Infrastructure.EmailService
             try
             {
                 using var smtp = new SmtpClient();
-                smtp.Connect(_emailSettings.Host, _emailSettings.Port, MailKit.Security.SecureSocketOptions.StartTls);
-                smtp.Authenticate(_emailSettings.FromAddress, _emailSettings.Password);
+                smtp.Connect(_configuration.MailSettings.Host, _configuration.MailSettings.Port, MailKit.Security.SecureSocketOptions.StartTls);
+                smtp.Authenticate(_configuration.MailSettings.FromAddress, _configuration.MailSettings.Password);
                 await smtp.SendAsync(emailObj);
                 smtp.Disconnect(true);
             }catch (Exception ex) { var ms = ex.Message; }

+ 8 - 0
MTWorkHR.Infrastructure/InfrastructureServiceRegistration.cs

@@ -27,6 +27,14 @@ namespace MTWorkHR.Infrastructure
             services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
             services.AddScoped(typeof(IRepositoryLog<>), typeof(RepositoryLog<>));
             services.AddScoped(typeof(ICompanyRepository), typeof(CompanyRepository));
+
+            services.AddScoped(typeof(IProjectRepository), typeof(ProjectRepository));
+            services.AddScoped(typeof(ITaskStatusRepository), typeof(TaskStatusRepository));
+            services.AddScoped(typeof(IUserTaskRepository), typeof(UserTaskRepository));
+            services.AddScoped(typeof(IUserTaskHistoryRepository), typeof(UserTaskHistoryRepository));
+
+
+
             services.AddScoped(typeof(IPermissionRepository), typeof(PermissionRepository));
             services.AddScoped(typeof(IRolePermissionRepository<RolePermission>), typeof(RolePermissionRepository));
             services.AddScoped(typeof(IUserRoleRepository<IdentityUserRole<string>>), typeof(UserRoleRepository));

+ 1 - 0
MTWorkHR.Infrastructure/MTWorkHR.Infrastructure.csproj

@@ -21,6 +21,7 @@
     <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
     <PackageReference Include="MimeKit" Version="4.3.0" />
     <PackageReference Include="SendGrid" Version="9.28.1" />
+    <PackageReference Include="System.Linq.Dynamic.Core" Version="1.3.8" />
   </ItemGroup>
 
   <ItemGroup>

+ 683 - 0
MTWorkHR.Infrastructure/Migrations/20240225115219_UserTasks.Designer.cs

@@ -0,0 +1,683 @@
+// <auto-generated />
+using System;
+using MTWorkHR.Infrastructure.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace MTWorkHR.Infrastructure.Migrations
+{
+    [DbContext(typeof(HRDataContext))]
+    [Migration("20240225115219_UserTasks")]
+    partial class UserTasks
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "8.0.1")
+                .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.AuthLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("AuthLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.Base.AttachmentType", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<bool>("IsRequired")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("AttachmentType");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1L,
+                            IsRequired = false,
+                            NameAr = "السيرة الذاتية",
+                            NameEn = "CV"
+                        },
+                        new
+                        {
+                            Id = 2L,
+                            IsRequired = false,
+                            NameAr = "الهوية",
+                            NameEn = "Identification"
+                        });
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.Company", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("CRNumber")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("CompanyName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("TaxNumber")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.Property<long>("UserId")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Companies");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.FileLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("FileLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.Project", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Projects");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.RoleLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("RoleLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.SettingLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SettingLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("UserLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AssignedUserId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<string>("DeleteUserId")
+                        .IsRequired()
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(8);
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("DueDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit")
+                        .HasColumnOrder(7);
+
+                    b.Property<int>("Priority")
+                        .HasColumnType("int");
+
+                    b.Property<long>("ProjectId")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("StatusId")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ProjectId");
+
+                    b.HasIndex("StatusId");
+
+                    b.ToTable("UserTasks");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskAttachment", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AttachmentTypeId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<string>("FileName")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("OriginalName")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<long>("TaskId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AttachmentTypeId");
+
+                    b.HasIndex("TaskId");
+
+                    b.ToTable("UserTaskAttachments");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskHistory", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AssignedToUserId")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("Comment")
+                        .IsRequired()
+                        .HasMaxLength(500)
+                        .HasColumnType("nvarchar(500)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<long>("CurrentStatusId")
+                        .HasColumnType("bigint");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CurrentStatusId");
+
+                    b.ToTable("UserTaskHistories");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskStatus", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("UserTaskStatuses");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.Project", "Project")
+                        .WithMany()
+                        .HasForeignKey("ProjectId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("MTWorkHR.Core.Entities.UserTaskStatus", "TaskStatus")
+                        .WithMany()
+                        .HasForeignKey("StatusId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Project");
+
+                    b.Navigation("TaskStatus");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskAttachment", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.Base.AttachmentType", "AttachmentType")
+                        .WithMany()
+                        .HasForeignKey("AttachmentTypeId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("MTWorkHR.Core.Entities.UserTask", "UserTask")
+                        .WithMany("TaskAttachments")
+                        .HasForeignKey("TaskId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("AttachmentType");
+
+                    b.Navigation("UserTask");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskHistory", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.UserTaskStatus", "TaskStatus")
+                        .WithMany()
+                        .HasForeignKey("CurrentStatusId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("TaskStatus");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.Navigation("TaskAttachments");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}

+ 211 - 0
MTWorkHR.Infrastructure/Migrations/20240225115219_UserTasks.cs

@@ -0,0 +1,211 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
+
+namespace MTWorkHR.Infrastructure.Migrations
+{
+    /// <inheritdoc />
+    public partial class UserTasks : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.CreateTable(
+                name: "AttachmentType",
+                columns: table => new
+                {
+                    Id = table.Column<long>(type: "bigint", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    NameAr = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
+                    NameEn = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
+                    IsRequired = table.Column<bool>(type: "bit", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_AttachmentType", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Projects",
+                columns: table => new
+                {
+                    Id = table.Column<long>(type: "bigint", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    NameAr = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
+                    NameEn = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Projects", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "UserTaskStatuses",
+                columns: table => new
+                {
+                    Id = table.Column<long>(type: "bigint", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    NameAr = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
+                    NameEn = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_UserTaskStatuses", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "UserTaskHistories",
+                columns: table => new
+                {
+                    Id = table.Column<long>(type: "bigint", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    CreateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
+                    UpdateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
+                    CreateDate = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    UpdateDate = table.Column<DateTime>(type: "datetime2", nullable: true),
+                    AssignedToUserId = table.Column<long>(type: "bigint", nullable: false),
+                    Comment = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
+                    CurrentStatusId = table.Column<long>(type: "bigint", nullable: false),
+                    IsDeleted = table.Column<bool>(type: "bit", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_UserTaskHistories", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_UserTaskHistories_UserTaskStatuses_CurrentStatusId",
+                        column: x => x.CurrentStatusId,
+                        principalTable: "UserTaskStatuses",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "UserTasks",
+                columns: table => new
+                {
+                    Id = table.Column<long>(type: "bigint", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    CreateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
+                    UpdateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
+                    CreateDate = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    UpdateDate = table.Column<DateTime>(type: "datetime2", nullable: true),
+                    IsDeleted = table.Column<bool>(type: "bit", nullable: false),
+                    DeleteUserId = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: false),
+                    AssignedUserId = table.Column<long>(type: "bigint", nullable: false),
+                    Title = table.Column<string>(type: "nvarchar(max)", nullable: false),
+                    Description = table.Column<string>(type: "nvarchar(max)", nullable: false),
+                    DueDate = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    Priority = table.Column<int>(type: "int", nullable: false),
+                    ProjectId = table.Column<long>(type: "bigint", nullable: false),
+                    StatusId = table.Column<long>(type: "bigint", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_UserTasks", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_UserTasks_Projects_ProjectId",
+                        column: x => x.ProjectId,
+                        principalTable: "Projects",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_UserTasks_UserTaskStatuses_StatusId",
+                        column: x => x.StatusId,
+                        principalTable: "UserTaskStatuses",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "UserTaskAttachments",
+                columns: table => new
+                {
+                    Id = table.Column<long>(type: "bigint", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    CreateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
+                    UpdateUser = table.Column<string>(type: "nvarchar(450)", maxLength: 450, nullable: true),
+                    CreateDate = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    UpdateDate = table.Column<DateTime>(type: "datetime2", nullable: true),
+                    TaskId = table.Column<long>(type: "bigint", nullable: false),
+                    AttachmentTypeId = table.Column<long>(type: "bigint", nullable: false),
+                    FileName = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
+                    OriginalName = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_UserTaskAttachments", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_UserTaskAttachments_AttachmentType_AttachmentTypeId",
+                        column: x => x.AttachmentTypeId,
+                        principalTable: "AttachmentType",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_UserTaskAttachments_UserTasks_TaskId",
+                        column: x => x.TaskId,
+                        principalTable: "UserTasks",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.InsertData(
+                table: "AttachmentType",
+                columns: new[] { "Id", "IsRequired", "NameAr", "NameEn" },
+                values: new object[,]
+                {
+                    { 1L, false, "السيرة الذاتية", "CV" },
+                    { 2L, false, "الهوية", "Identification" }
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserTaskAttachments_AttachmentTypeId",
+                table: "UserTaskAttachments",
+                column: "AttachmentTypeId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserTaskAttachments_TaskId",
+                table: "UserTaskAttachments",
+                column: "TaskId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserTaskHistories_CurrentStatusId",
+                table: "UserTaskHistories",
+                column: "CurrentStatusId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserTasks_ProjectId",
+                table: "UserTasks",
+                column: "ProjectId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserTasks_StatusId",
+                table: "UserTasks",
+                column: "StatusId");
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "UserTaskAttachments");
+
+            migrationBuilder.DropTable(
+                name: "UserTaskHistories");
+
+            migrationBuilder.DropTable(
+                name: "AttachmentType");
+
+            migrationBuilder.DropTable(
+                name: "UserTasks");
+
+            migrationBuilder.DropTable(
+                name: "Projects");
+
+            migrationBuilder.DropTable(
+                name: "UserTaskStatuses");
+        }
+    }
+}

+ 682 - 0
MTWorkHR.Infrastructure/Migrations/20240225123213_UserTasks2.Designer.cs

@@ -0,0 +1,682 @@
+// <auto-generated />
+using System;
+using MTWorkHR.Infrastructure.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace MTWorkHR.Infrastructure.Migrations
+{
+    [DbContext(typeof(HRDataContext))]
+    [Migration("20240225123213_UserTasks2")]
+    partial class UserTasks2
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "8.0.1")
+                .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.AuthLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("AuthLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.Base.AttachmentType", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<bool>("IsRequired")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("AttachmentType");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1L,
+                            IsRequired = false,
+                            NameAr = "السيرة الذاتية",
+                            NameEn = "CV"
+                        },
+                        new
+                        {
+                            Id = 2L,
+                            IsRequired = false,
+                            NameAr = "الهوية",
+                            NameEn = "Identification"
+                        });
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.Company", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("CRNumber")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("CompanyName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("TaxNumber")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.Property<long>("UserId")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Companies");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.FileLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("FileLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.Project", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Projects");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.RoleLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("RoleLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.SettingLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SettingLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserLog", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("Channel")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CreateUser")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ErrorDescription")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("InnerException")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Input")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Method")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("QueryString")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServerIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceResponseTimeInSeconds")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("UserIP")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("userAgent")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("UserLogs");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AssignedUserId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<string>("DeleteUserId")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(8);
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("DueDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit")
+                        .HasColumnOrder(7);
+
+                    b.Property<int>("Priority")
+                        .HasColumnType("int");
+
+                    b.Property<long>("ProjectId")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("StatusId")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ProjectId");
+
+                    b.HasIndex("StatusId");
+
+                    b.ToTable("UserTasks");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskAttachment", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AttachmentTypeId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<string>("FileName")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("OriginalName")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<long>("TaskId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AttachmentTypeId");
+
+                    b.HasIndex("TaskId");
+
+                    b.ToTable("UserTaskAttachments");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskHistory", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AssignedToUserId")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("Comment")
+                        .IsRequired()
+                        .HasMaxLength(500)
+                        .HasColumnType("nvarchar(500)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<long>("CurrentStatusId")
+                        .HasColumnType("bigint");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CurrentStatusId");
+
+                    b.ToTable("UserTaskHistories");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskStatus", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("UserTaskStatuses");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.Project", "Project")
+                        .WithMany()
+                        .HasForeignKey("ProjectId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("MTWorkHR.Core.Entities.UserTaskStatus", "TaskStatus")
+                        .WithMany()
+                        .HasForeignKey("StatusId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Project");
+
+                    b.Navigation("TaskStatus");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskAttachment", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.Base.AttachmentType", "AttachmentType")
+                        .WithMany()
+                        .HasForeignKey("AttachmentTypeId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("MTWorkHR.Core.Entities.UserTask", "UserTask")
+                        .WithMany("TaskAttachments")
+                        .HasForeignKey("TaskId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("AttachmentType");
+
+                    b.Navigation("UserTask");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskHistory", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.UserTaskStatus", "TaskStatus")
+                        .WithMany()
+                        .HasForeignKey("CurrentStatusId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("TaskStatus");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.Navigation("TaskAttachments");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}

+ 40 - 0
MTWorkHR.Infrastructure/Migrations/20240225123213_UserTasks2.cs

@@ -0,0 +1,40 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace MTWorkHR.Infrastructure.Migrations
+{
+    /// <inheritdoc />
+    public partial class UserTasks2 : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AlterColumn<string>(
+                name: "DeleteUserId",
+                table: "UserTasks",
+                type: "nvarchar(450)",
+                maxLength: 450,
+                nullable: true,
+                oldClrType: typeof(string),
+                oldType: "nvarchar(450)",
+                oldMaxLength: 450);
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AlterColumn<string>(
+                name: "DeleteUserId",
+                table: "UserTasks",
+                type: "nvarchar(450)",
+                maxLength: 450,
+                nullable: false,
+                defaultValue: "",
+                oldClrType: typeof(string),
+                oldType: "nvarchar(450)",
+                oldMaxLength: 450,
+                oldNullable: true);
+        }
+    }
+}

+ 313 - 0
MTWorkHR.Infrastructure/Migrations/HRDataContextModelSnapshot.cs

@@ -80,6 +80,49 @@ namespace MTWorkHR.Infrastructure.Migrations
                     b.ToTable("AuthLogs");
                 });
 
+            modelBuilder.Entity("MTWorkHR.Core.Entities.Base.AttachmentType", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<bool>("IsRequired")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("AttachmentType");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1L,
+                            IsRequired = false,
+                            NameAr = "السيرة الذاتية",
+                            NameEn = "CV"
+                        },
+                        new
+                        {
+                            Id = 2L,
+                            IsRequired = false,
+                            NameAr = "الهوية",
+                            NameEn = "Identification"
+                        });
+                });
+
             modelBuilder.Entity("MTWorkHR.Core.Entities.Company", b =>
                 {
                     b.Property<long>("Id")
@@ -187,6 +230,30 @@ namespace MTWorkHR.Infrastructure.Migrations
                     b.ToTable("FileLogs");
                 });
 
+            modelBuilder.Entity("MTWorkHR.Core.Entities.Project", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Projects");
+                });
+
             modelBuilder.Entity("MTWorkHR.Core.Entities.RoleLog", b =>
                 {
                     b.Property<long>("Id")
@@ -360,6 +427,252 @@ namespace MTWorkHR.Infrastructure.Migrations
 
                     b.ToTable("UserLogs");
                 });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AssignedUserId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<string>("DeleteUserId")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(8);
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("DueDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit")
+                        .HasColumnOrder(7);
+
+                    b.Property<int>("Priority")
+                        .HasColumnType("int");
+
+                    b.Property<long>("ProjectId")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("StatusId")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ProjectId");
+
+                    b.HasIndex("StatusId");
+
+                    b.ToTable("UserTasks");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskAttachment", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AttachmentTypeId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<string>("FileName")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("OriginalName")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<long>("TaskId")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AttachmentTypeId");
+
+                    b.HasIndex("TaskId");
+
+                    b.ToTable("UserTaskAttachments");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskHistory", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<long>("AssignedToUserId")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("Comment")
+                        .IsRequired()
+                        .HasMaxLength(500)
+                        .HasColumnType("nvarchar(500)");
+
+                    b.Property<DateTime>("CreateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(3);
+
+                    b.Property<string>("CreateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(1);
+
+                    b.Property<long>("CurrentStatusId")
+                        .HasColumnType("bigint");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("UpdateDate")
+                        .HasColumnType("datetime2")
+                        .HasColumnOrder(4);
+
+                    b.Property<string>("UpdateUser")
+                        .HasMaxLength(450)
+                        .HasColumnType("nvarchar(450)")
+                        .HasColumnOrder(2);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CurrentStatusId");
+
+                    b.ToTable("UserTaskHistories");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskStatus", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
+
+                    b.Property<string>("NameAr")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.Property<string>("NameEn")
+                        .IsRequired()
+                        .HasMaxLength(250)
+                        .HasColumnType("nvarchar(250)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("UserTaskStatuses");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.Project", "Project")
+                        .WithMany()
+                        .HasForeignKey("ProjectId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("MTWorkHR.Core.Entities.UserTaskStatus", "TaskStatus")
+                        .WithMany()
+                        .HasForeignKey("StatusId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Project");
+
+                    b.Navigation("TaskStatus");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskAttachment", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.Base.AttachmentType", "AttachmentType")
+                        .WithMany()
+                        .HasForeignKey("AttachmentTypeId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("MTWorkHR.Core.Entities.UserTask", "UserTask")
+                        .WithMany("TaskAttachments")
+                        .HasForeignKey("TaskId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("AttachmentType");
+
+                    b.Navigation("UserTask");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTaskHistory", b =>
+                {
+                    b.HasOne("MTWorkHR.Core.Entities.UserTaskStatus", "TaskStatus")
+                        .WithMany()
+                        .HasForeignKey("CurrentStatusId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("TaskStatus");
+                });
+
+            modelBuilder.Entity("MTWorkHR.Core.Entities.UserTask", b =>
+                {
+                    b.Navigation("TaskAttachments");
+                });
 #pragma warning restore 612, 618
         }
     }

+ 0 - 43
MTWorkHR.Infrastructure/PersistenceServiceRegistration.cs

@@ -1,43 +0,0 @@
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.EntityFrameworkCore;
-using MTWorkHR.Infrastructure.Data;
-using Microsoft.Extensions.Configuration;
-using MTWorkHR.Core.IRepositories.Base;
-using MTWorkHR.Infrastructure.Repositories;
-using MTWorkHR.Core.IRepositories;
-using MTWorkHR.Identity.Entities;
-using Microsoft.AspNetCore.Identity;
-using MTWorkHR.Core.UnitOfWork;
-using MTWorkHR.Infrastructure.UnitOfWorks;
-using MTWorkHR.Core.Global;
-
-
-namespace MTWorkHR.Infrastructure
-{
-    public static class PersistenceServiceRegistration
-    {
-        public static IServiceCollection AddPersistenceServices2 (this IServiceCollection services, AppSettingsConfiguration configuration)
-        {
-            //services.AddDbContext<HRDataContext>(options => {
-            //    options.UseSqlServer(configuration.ConnectionStrings.MTWorkHRConnectionString);
-            //});
-
-            //services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
-            //services.AddScoped(typeof(IRepositoryLog<>), typeof(RepositoryLog<>));
-
-            //services.AddScoped(typeof(IPermissionRepository), typeof(PermissionRepository));
-            //services.AddScoped(typeof(ICompanyRepository), typeof(CompanyRepository));
-            //services.AddScoped(typeof(IRolePermissionRepository<RolePermission>), typeof(RolePermissionRepository));
-            //services.AddScoped(typeof(IUserRoleRepository<IdentityUserRole<string>>), typeof(UserRoleRepository));
-
-            //services.AddScoped<IUnitOfWork, UnitOfWork>();
-            //services.AddScoped<IUnitOfWorkLog, UnitOfWorkLog>();
-
-            //services.AddScoped<ApplicationUserManager>();
-            //services.AddScoped<GlobalInfo>();
-
-            //services.AddScoped<IEmployeeRepository, EmployeeRepository>();
-            return services;
-        }
-    }
-}

+ 7 - 1
MTWorkHR.Infrastructure/Repositories/Auth/UserRoleRepository.cs

@@ -25,7 +25,13 @@ namespace MTWorkHR.Infrastructure.Repositories
 
         public virtual async Task<IList<IdentityUserRole<string>>> AddRangeAsync(IList<IdentityUserRole<string>> entity)
         {
-            await dbSet.AddRangeAsync(entity);
+            try
+            {
+                await dbSet.AddRangeAsync(entity);
+            }catch (Exception x)
+            {
+                var ss = x.Message;
+            }
             return entity;
         }
 

+ 24 - 27
MTWorkHR.Infrastructure/Repositories/Repository.cs

@@ -5,11 +5,8 @@ using MTWorkHR.Core.Entities.Base;
 using MTWorkHR.Core.IDto;
 using MTWorkHR.Core.IRepositories.Base;
 using MTWorkHR.Infrastructure.Data;
-using System;
-using System.Collections.Generic;
 using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Linq.Dynamic.Core;
 
 namespace MTWorkHR.Infrastructure.Repositories
 {
@@ -54,36 +51,36 @@ namespace MTWorkHR.Infrastructure.Repositories
             return new Tuple<ICollection<T>, int>(await query.ToListAsync(), total);
         }
 
-        //public virtual async Task<Tuple<ICollection<T>, int>> GetAllAsync(IPagingInputDto pagingInputDto)
-        //{
-        //    //var query = dbSet.AsQueryable();
+        public virtual async Task<Tuple<ICollection<T>, int>> GetAllAsync(IPagingInputDto pagingInputDto)
+        {
+            var query = dbSet.AsQueryable();
 
-        //    //if (pagingInputDto.HiddenFilter != null)
-        //    //{
-        //    //    query = query.Where(pagingInputDto.HiddenFilter);
-        //    //}
+            if (pagingInputDto.HiddenFilter != null)
+            {
+                query = query.Where(pagingInputDto.HiddenFilter);
+            }
 
-        //    //if (pagingInputDto.Filter != null)
-        //    //{
-        //    //    var props = typeof(T).GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(FilterAttribute)));
-        //    //    var condition = "";
-        //    //    foreach (var p in props)
-        //    //    {
-        //    //        condition = (condition == "" ? condition : condition + " || ") + p.Name + ".Contains(@0)";
-        //    //    }
+            if (pagingInputDto.Filter != null)
+            {
+                var props = typeof(T).GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(FilterAttribute)));
+                var condition = "";
+                foreach (var p in props)
+                {
+                    condition = (condition == "" ? condition : condition + " || ") + p.Name + ".Contains(@0)";
+                }
 
-        //    //    query = query.Where(condition, pagingInputDto.Filter);
-        //    //}
+                query = query.Where(condition, pagingInputDto.Filter);
+            }
 
-        //    //var order = query.OrderBy(pagingInputDto.OrderByField + " " + pagingInputDto.OrderType);
+            var order = query.OrderBy(pagingInputDto.OrderByField + " " + pagingInputDto.OrderType);
 
-        //    //var page = order.Skip((pagingInputDto.PageNumber * pagingInputDto.PageSize) - pagingInputDto.PageSize).Take(pagingInputDto.PageSize);
+            var page = order.Skip((pagingInputDto.PageNumber * pagingInputDto.PageSize) - pagingInputDto.PageSize).Take(pagingInputDto.PageSize);
 
-        //    //var total = await query.CountAsync();
+            var total = await query.CountAsync();
 
-        //    //return new Tuple<ICollection<T>, int>(await page.ToListAsync(), total);
-        //    throw new NotImplementedException();
-        //}
+            return new Tuple<ICollection<T>, int>(await page.ToListAsync(), total);
+            throw new NotImplementedException();
+        }
 
         public async Task<T> GetByIdAsync(long id)
         {

+ 17 - 0
MTWorkHR.Infrastructure/Repositories/User/ProjectRepository.cs

@@ -0,0 +1,17 @@
+using Microsoft.EntityFrameworkCore;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories;
+using MTWorkHR.Identity.Entities;
+using MTWorkHR.Infrastructure.Data;
+
+namespace MTWorkHR.Infrastructure.Repositories
+{
+    public class ProjectRepository : Repository<Project>, IProjectRepository
+    {
+        public ProjectRepository(HRDataContext context) : base(context)
+        {
+        }
+
+    }
+}

+ 17 - 0
MTWorkHR.Infrastructure/Repositories/User/TaskAttachmentRepository.cs

@@ -0,0 +1,17 @@
+using Microsoft.EntityFrameworkCore;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories;
+using MTWorkHR.Identity.Entities;
+using MTWorkHR.Infrastructure.Data;
+
+namespace MTWorkHR.Infrastructure.Repositories
+{
+    public class UserTaskAttachmentRepository : Repository<UserTaskAttachment>, IUserTaskAttachmentRepository
+    {
+        public UserTaskAttachmentRepository(HRDataContext context) : base(context)
+        {
+        }
+
+    }
+}

+ 17 - 0
MTWorkHR.Infrastructure/Repositories/User/TaskStatusRepository.cs

@@ -0,0 +1,17 @@
+using Microsoft.EntityFrameworkCore;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories;
+using MTWorkHR.Identity.Entities;
+using MTWorkHR.Infrastructure.Data;
+
+namespace MTWorkHR.Infrastructure.Repositories
+{
+    public class TaskStatusRepository : Repository<UserTaskStatus>, ITaskStatusRepository
+    {
+        public TaskStatusRepository(HRDataContext context) : base(context)
+        {
+        }
+
+    }
+}

+ 17 - 0
MTWorkHR.Infrastructure/Repositories/User/UserTaskHistoryRepository.cs

@@ -0,0 +1,17 @@
+using Microsoft.EntityFrameworkCore;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories;
+using MTWorkHR.Identity.Entities;
+using MTWorkHR.Infrastructure.Data;
+
+namespace MTWorkHR.Infrastructure.Repositories
+{
+    public class UserTaskHistoryRepository : Repository<UserTaskHistory>, IUserTaskHistoryRepository
+    {
+        public UserTaskHistoryRepository(HRDataContext context) : base(context)
+        {
+        }
+
+    }
+}

+ 17 - 0
MTWorkHR.Infrastructure/Repositories/User/UserTaskRepository.cs

@@ -0,0 +1,17 @@
+using Microsoft.EntityFrameworkCore;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.IDto;
+using MTWorkHR.Core.IRepositories;
+using MTWorkHR.Identity.Entities;
+using MTWorkHR.Infrastructure.Data;
+
+namespace MTWorkHR.Infrastructure.Repositories
+{
+    public class UserTaskRepository : Repository<UserTask>, IUserTaskRepository
+    {
+        public UserTaskRepository(HRDataContext context) : base(context)
+        {
+        }
+
+    }
+}

+ 20 - 6
MTWorkHR.Infrastructure/UnitOfWork/UnitOfWork.cs

@@ -15,18 +15,32 @@ namespace MTWorkHR.Infrastructure.UnitOfWorks
 
         public IPermissionRepository Permission { get; }
         public ICompanyRepository Company { get; }
+        public IUserTaskRepository UserTask { get; }
+        public ITaskStatusRepository UserTaskStatus { get; }
+        public IUserTaskHistoryRepository UserTaskHistory { get; }
+        public IUserTaskAttachmentRepository UserTaskAttachment { get; }
 
+        public IProjectRepository Project { get; }
 
         public UnitOfWork(HRDataContext _context
-            , IPermissionRepository Permission
-            , ICompanyRepository Company
+            , IPermissionRepository permission
+            , ICompanyRepository company
+            , IUserTaskRepository userTask
+            , IProjectRepository project
+            , IUserTaskHistoryRepository projectHistory
+            , ITaskStatusRepository userTaskStatus
+      //      ,IUserTaskAttachmentRepository userTaskAttachment
             )
         {
             context = _context;
-
-            this.Permission = Permission;
-            this.Company = Company;
-		}
+            this.Permission = permission;
+            this.Company = company;
+            this.UserTask = userTask;
+            this.Project = project;
+            this.UserTaskHistory = projectHistory;
+            this.UserTaskStatus = userTaskStatus;
+     //       this.UserTaskAttachment = userTaskAttachment;
+        }
 
         public async Task<int> CompleteAsync()
         {