complete editing templates
							parent
							
								
									24b92acd4b
								
							
						
					
					
						commit
						cc8aa32447
					
				|  | @ -1,5 +1,4 @@ | |||
| using DocuMed.Api.Services; | ||||
| using DocuMed.Domain.Dtos.LargDtos; | ||||
| using Microsoft.AspNetCore.Mvc.RazorPages; | ||||
| 
 | ||||
| namespace DocuMed.Api.Controllers; | ||||
| 
 | ||||
|  | @ -30,49 +29,28 @@ public class MedicalHistoryTemplateController : ICarterModule | |||
| 
 | ||||
| 
 | ||||
|     // GET:Get All Entity | ||||
|     public virtual async Task<IResult> GetAllAsync([FromQuery] int page, IRepositoryWrapper repositoryWrapper,ICurrentUserService currentUserService, CancellationToken cancellationToken) | ||||
|     public virtual async Task<IResult> GetAllAsync([FromQuery] int page, IMedicalHistoryTemplateRepository repository, CancellationToken cancellationToken) | ||||
|     { | ||||
|         if (!Guid.TryParse(currentUserService.UserId, out Guid userId)) | ||||
|             throw new AppException("توکن غیرمجاز", ApiResultStatusCode.UnAuthorized); | ||||
|         var list = await repositoryWrapper.SetRepository<MedicalHistoryTemplate>().TableNoTracking | ||||
|             .Where(t=>t.ApplicationUserId== userId) | ||||
|             .OrderByDescending(t=>t.CreatedAt) | ||||
|             .Skip(page*15) | ||||
|             .Take(15) | ||||
|             .Select(MedicalHistoryTemplateMapper.ProjectToSDto) | ||||
|             .ToListAsync(cancellationToken); | ||||
|         return TypedResults.Ok(list); | ||||
|         return TypedResults.Ok(await repository.GetMedicalHistoryTemplatesAsync(page,cancellationToken)); | ||||
|     } | ||||
| 
 | ||||
|     // GET:Get An Entity By Id | ||||
|     public async Task<IResult> GetAsync(Guid id, IRepositoryWrapper repositoryWrapper, | ||||
|         CancellationToken cancellationToken) | ||||
|         => TypedResults.Ok(await repositoryWrapper.SetRepository<MedicalHistoryTemplate>() | ||||
|             .GetByIdAsync(cancellationToken, id)); | ||||
|     public async Task<IResult> GetAsync(Guid id, IMedicalHistoryTemplateRepository repository, CancellationToken cancellationToken) | ||||
|     { | ||||
|          | ||||
|         return TypedResults.Ok(await repository.GetMedicalHistoryTemplateAsync(id, cancellationToken)); | ||||
|     } | ||||
| 
 | ||||
|     // POST:Add New Entity | ||||
|     public virtual async Task<IResult> Post([FromBody] MedicalHistoryTemplateLDto dto, IRepositoryWrapper repositoryWrapper,ICurrentUserService currentUserService, CancellationToken cancellationToken) | ||||
|     public virtual async Task<IResult> Post([FromBody] MedicalHistoryTemplateLDto dto, IMedicalHistoryTemplateService service, ICurrentUserService currentUserService, CancellationToken cancellationToken) | ||||
|     { | ||||
|         if (!Guid.TryParse(currentUserService.UserId, out Guid userId)) | ||||
|             throw new AppException("توکن غیرمجاز", ApiResultStatusCode.UnAuthorized); | ||||
|         var ent = MedicalHistoryTemplate.Create(dto.ChiefComplaint,dto.SectionId, userId); | ||||
|         foreach (var question in dto.Questions) | ||||
|             ent.AddQuestion(question.Question, question.Part, question.QuestionType); | ||||
|         repositoryWrapper.SetRepository<MedicalHistoryTemplate>().Add(ent); | ||||
|         await repositoryWrapper.SaveChangesAsync(cancellationToken); | ||||
|         return TypedResults.Ok(); | ||||
|         return TypedResults.Ok(await service.AddAsync(dto,cancellationToken)); | ||||
|     } | ||||
| 
 | ||||
|     // PUT:Update Entity | ||||
|     public virtual async Task<IResult> Put([FromBody] MedicalHistoryTemplateLDto dto, IRepositoryWrapper repositoryWrapper,ICurrentUserService currentUserService, CancellationToken cancellationToken) | ||||
|     public virtual async Task<IResult> Put([FromBody] MedicalHistoryTemplateLDto dto, IMedicalHistoryTemplateService service,ICurrentUserService currentUserService, CancellationToken cancellationToken) | ||||
|     { | ||||
|         if (!Guid.TryParse(currentUserService.UserId, out Guid userId)) | ||||
|             throw new AppException("توکن غیرمجاز", ApiResultStatusCode.UnAuthorized); | ||||
|         var ent = MedicalHistoryTemplate.Create(dto.ChiefComplaint, dto.SectionId, userId); | ||||
|         ent.Id = dto.Id; | ||||
|         repositoryWrapper.SetRepository<MedicalHistoryTemplate>().Update(ent); | ||||
|         await repositoryWrapper.SaveChangesAsync(cancellationToken); | ||||
|         return TypedResults.Ok(); | ||||
|         return TypedResults.Ok(await service.EditAsync(dto, cancellationToken)); | ||||
|     } | ||||
| 
 | ||||
|     // DELETE:Delete Entity | ||||
|  |  | |||
|  | @ -71,6 +71,7 @@ | |||
|     <Using Include="DocuMed.Core.EntityServices.Abstracts" /> | ||||
|     <Using Include="DocuMed.Core.Models.Api" /> | ||||
|     <Using Include="DocuMed.Domain" /> | ||||
|     <Using Include="DocuMed.Domain.Dtos.LargDtos" /> | ||||
|     <Using Include="DocuMed.Domain.Dtos.RequestDtos" /> | ||||
|     <Using Include="DocuMed.Domain.Dtos.SmallDtos" /> | ||||
|     <Using Include="DocuMed.Domain.Entities.City" /> | ||||
|  | @ -85,6 +86,7 @@ | |||
|     <Using Include="DocuMed.Repository.Extensions" /> | ||||
|     <Using Include="DocuMed.Repository.Models" /> | ||||
|     <Using Include="DocuMed.Repository.Repositories.Base.Contracts" /> | ||||
|     <Using Include="DocuMed.Repository.Repositories.Entities.Abstracts" /> | ||||
|     <Using Include="Microsoft.AspNetCore.Authentication.JwtBearer" /> | ||||
|     <Using Include="Microsoft.AspNetCore.Identity" /> | ||||
|     <Using Include="Microsoft.AspNetCore.Mvc" /> | ||||
|  |  | |||
|  | @ -22,7 +22,6 @@ | |||
|   <ItemGroup> | ||||
|     <Folder Include="BaseServices\Abstracts\" /> | ||||
|     <Folder Include="CoreServices\Abstracts\" /> | ||||
|     <Folder Include="EntityServices\Abstracts\" /> | ||||
|     <Folder Include="Models\Api\" /> | ||||
|     <Folder Include="Abstracts\" /> | ||||
|   </ItemGroup> | ||||
|  | @ -37,6 +36,7 @@ | |||
|     <Using Include="DocuMed.Core.BaseServices.Abstracts" /> | ||||
|     <Using Include="DocuMed.Core.CoreServices.Abstracts" /> | ||||
|     <Using Include="DocuMed.Core.EntityServices.Abstracts" /> | ||||
|     <Using Include="DocuMed.Domain.Dtos.LargDtos" /> | ||||
|     <Using Include="DocuMed.Domain.Dtos.RequestDtos" /> | ||||
|     <Using Include="DocuMed.Domain.Dtos.SmallDtos" /> | ||||
|     <Using Include="DocuMed.Domain.Entities.User" /> | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| namespace DocuMed.Core.EntityServices.Abstracts; | ||||
| 
 | ||||
| public interface IMedicalHistoryTemplateService:IScopedDependency | ||||
| { | ||||
|     public Task<bool> EditAsync(MedicalHistoryTemplateLDto template, CancellationToken cancellationToken); | ||||
|     public Task<bool> AddAsync(MedicalHistoryTemplateLDto template, CancellationToken cancellationToken); | ||||
| } | ||||
|  | @ -0,0 +1,61 @@ | |||
| using DocuMed.Domain.Entities.MedicalHistoryTemplate; | ||||
| using DocuMed.Repository.Repositories.Entities; | ||||
| using DocuMed.Repository.Repositories.Entities.Abstracts; | ||||
| using System.Threading; | ||||
| 
 | ||||
| namespace DocuMed.Core.EntityServices; | ||||
| 
 | ||||
| public class MedicalHistoryTemplateService : IMedicalHistoryTemplateService | ||||
| { | ||||
|     private readonly IRepositoryWrapper _repositoryWrapper; | ||||
|     private readonly ICurrentUserService _currentUserService; | ||||
|     private readonly IMedicalHistoryTemplateRepository _medicalHistoryTemplateRepository; | ||||
| 
 | ||||
|     public MedicalHistoryTemplateService(IRepositoryWrapper repositoryWrapper,ICurrentUserService currentUserService,IMedicalHistoryTemplateRepository medicalHistoryTemplateRepository) | ||||
|     { | ||||
|         _repositoryWrapper = repositoryWrapper; | ||||
|         _currentUserService = currentUserService; | ||||
|         _medicalHistoryTemplateRepository = medicalHistoryTemplateRepository; | ||||
|     } | ||||
|     public async Task<bool> EditAsync(MedicalHistoryTemplateLDto template, CancellationToken cancellationToken) | ||||
|     { | ||||
|         if (!Guid.TryParse(_currentUserService.UserId, out Guid userId)) | ||||
|             throw new AppException("توکن غیرمجاز", ApiResultStatusCode.UnAuthorized); | ||||
|         if (template.Id==Guid.Empty) | ||||
|             throw new AppException("پیش نویس پیدا نشد", ApiResultStatusCode.NotFound); | ||||
|         var ent = MedicalHistoryTemplate.Create(template.ChiefComplaint, template.SectionId, userId); | ||||
|         ent.Id = template.Id; | ||||
| 
 | ||||
|         var questions = await _repositoryWrapper.SetRepository<MedicalHistoryQuestion>() | ||||
|             .TableNoTracking | ||||
|             .Where(q => q.MedicalHistoryTemplateId == ent.Id) | ||||
|             .ToListAsync(cancellationToken); | ||||
|         foreach (var question in questions) | ||||
|         { | ||||
|             if (template.Questions.FirstOrDefault(q => q.Id == question.Id) == null) | ||||
|             { | ||||
|                 _repositoryWrapper.SetRepository<MedicalHistoryQuestion>() | ||||
|                     .Delete(question); | ||||
|                 await _repositoryWrapper.SaveChangesAsync(cancellationToken); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         foreach (var question in template.Questions.Where(q=>q.Id==Guid.Empty)) | ||||
|             ent.AddQuestion(question.Question, question.Part, question.QuestionType); | ||||
|         _medicalHistoryTemplateRepository.Update(ent); | ||||
|         await _repositoryWrapper.SaveChangesAsync(cancellationToken); | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     public async Task<bool> AddAsync(MedicalHistoryTemplateLDto template,CancellationToken cancellationToken) | ||||
|     { | ||||
|         if (!Guid.TryParse(_currentUserService.UserId, out Guid userId)) | ||||
|             throw new AppException("توکن غیرمجاز", ApiResultStatusCode.UnAuthorized); | ||||
|         var ent = MedicalHistoryTemplate.Create(template.ChiefComplaint, template.SectionId, userId); | ||||
|         foreach (var question in template.Questions) | ||||
|             ent.AddQuestion(question.Question, question.Part, question.QuestionType); | ||||
|         _medicalHistoryTemplateRepository.Add(ent); | ||||
|         await _repositoryWrapper.SaveChangesAsync(cancellationToken); | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|  | @ -5,6 +5,7 @@ public class MedicalHistoryTemplateLDto : BaseDto<MedicalHistoryTemplateLDto,Med | |||
| 
 | ||||
|     public string ChiefComplaint { get; set; } = string.Empty; | ||||
|     public Guid SectionId { get; set; } | ||||
|     public SectionSDto Section { get; set; } = new(); | ||||
|     public Guid ApplicationUserId { get; set; } | ||||
|     public List<MedicalHistoryQuestionSDto> Questions { get; set; } = new(); | ||||
| } | ||||
|  | @ -21,6 +21,7 @@ public partial class MedicalHistoryTemplate : ApiEntity | |||
| 
 | ||||
|     public string ChiefComplaint { get; internal set; } = string.Empty; | ||||
|     public Guid SectionId { get; set; } | ||||
|     public Section? Section { get; set; } | ||||
|     public Guid ApplicationUserId { get; internal set; } | ||||
|     public ApplicationUser? ApplicationUser { get; set; } | ||||
|     public List<MedicalHistoryQuestion> Questions { get; internal set; } = new(); | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ namespace DocuMed.Domain.Mappers | |||
|             return result; | ||||
|              | ||||
|         } | ||||
|         public static Expression<Func<CitySDto, City>> ProjectLDtoToCity => p4 => new City() | ||||
|         public static Expression<Func<CitySDto, City>> ProjectToCity => p4 => new City() | ||||
|         { | ||||
|             Name = p4.Name, | ||||
|             Id = p4.Id | ||||
|  | @ -85,7 +85,7 @@ namespace DocuMed.Domain.Mappers | |||
|             return result; | ||||
|              | ||||
|         } | ||||
|         public static Expression<Func<CityLDto, City>> ProjectToCity => p15 => new City() | ||||
|         public static Expression<Func<CityLDto, City>> ProjectLDtoToCity => p15 => new City() | ||||
|         { | ||||
|             Name = p15.Name, | ||||
|             Universities = p15.Universities.Select<UniversitySDto, University>(p16 => new University() | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ using System.Linq; | |||
| using System.Linq.Expressions; | ||||
| using DocuMed.Domain.Dtos.LargDtos; | ||||
| using DocuMed.Domain.Dtos.SmallDtos; | ||||
| using DocuMed.Domain.Entities.City; | ||||
| using DocuMed.Domain.Entities.MedicalHistoryTemplate; | ||||
| 
 | ||||
| namespace DocuMed.Domain.Mappers | ||||
|  | @ -80,6 +81,13 @@ namespace DocuMed.Domain.Mappers | |||
|             { | ||||
|                 ChiefComplaint = p9.ChiefComplaint, | ||||
|                 SectionId = p9.SectionId, | ||||
|                 Section = p9.Section == null ? null : new Section() | ||||
|                 { | ||||
|                     Name = p9.Section.Name, | ||||
|                     Detail = p9.Section.Detail, | ||||
|                     UniversityId = p9.Section.UniversityId, | ||||
|                     Id = p9.Section.Id | ||||
|                 }, | ||||
|                 ApplicationUserId = p9.ApplicationUserId, | ||||
|                 Questions = funcMain1(p9.Questions), | ||||
|                 Id = p9.Id | ||||
|  | @ -95,68 +103,91 @@ namespace DocuMed.Domain.Mappers | |||
|              | ||||
|             result.ChiefComplaint = p11.ChiefComplaint; | ||||
|             result.SectionId = p11.SectionId; | ||||
|             result.Section = funcMain2(p11.Section, result.Section); | ||||
|             result.ApplicationUserId = p11.ApplicationUserId; | ||||
|             result.Questions = funcMain2(p11.Questions, result.Questions); | ||||
|             result.Questions = funcMain3(p11.Questions, result.Questions); | ||||
|             result.Id = p11.Id; | ||||
|             return result; | ||||
|              | ||||
|         } | ||||
|         public static Expression<Func<MedicalHistoryTemplateLDto, MedicalHistoryTemplate>> ProjectLDtoToMedicalHistoryTemplate => p15 => new MedicalHistoryTemplate() | ||||
|         public static Expression<Func<MedicalHistoryTemplateLDto, MedicalHistoryTemplate>> ProjectLDtoToMedicalHistoryTemplate => p17 => new MedicalHistoryTemplate() | ||||
|         { | ||||
|             ChiefComplaint = p15.ChiefComplaint, | ||||
|             SectionId = p15.SectionId, | ||||
|             ApplicationUserId = p15.ApplicationUserId, | ||||
|             Questions = p15.Questions.Select<MedicalHistoryQuestionSDto, MedicalHistoryQuestion>(p16 => new MedicalHistoryQuestion() | ||||
|             ChiefComplaint = p17.ChiefComplaint, | ||||
|             SectionId = p17.SectionId, | ||||
|             Section = p17.Section == null ? null : new Section() | ||||
|             { | ||||
|                 Question = p16.Question, | ||||
|                 Part = p16.Part, | ||||
|                 QuestionType = p16.QuestionType, | ||||
|                 MedicalHistoryTemplateId = p16.MedicalHistoryTemplateId, | ||||
|                 Id = p16.Id | ||||
|                 Name = p17.Section.Name, | ||||
|                 Detail = p17.Section.Detail, | ||||
|                 UniversityId = p17.Section.UniversityId, | ||||
|                 Id = p17.Section.Id | ||||
|             }, | ||||
|             ApplicationUserId = p17.ApplicationUserId, | ||||
|             Questions = p17.Questions.Select<MedicalHistoryQuestionSDto, MedicalHistoryQuestion>(p18 => new MedicalHistoryQuestion() | ||||
|             { | ||||
|                 Question = p18.Question, | ||||
|                 Part = p18.Part, | ||||
|                 QuestionType = p18.QuestionType, | ||||
|                 MedicalHistoryTemplateId = p18.MedicalHistoryTemplateId, | ||||
|                 Id = p18.Id | ||||
|             }).ToList<MedicalHistoryQuestion>(), | ||||
|             Id = p15.Id | ||||
|             Id = p17.Id | ||||
|         }; | ||||
|         public static MedicalHistoryTemplateLDto AdaptToLDto(this MedicalHistoryTemplate p17) | ||||
|         public static MedicalHistoryTemplateLDto AdaptToLDto(this MedicalHistoryTemplate p19) | ||||
|         { | ||||
|             return p17 == null ? null : new MedicalHistoryTemplateLDto() | ||||
|             return p19 == null ? null : new MedicalHistoryTemplateLDto() | ||||
|             { | ||||
|                 ChiefComplaint = p17.ChiefComplaint, | ||||
|                 SectionId = p17.SectionId, | ||||
|                 ApplicationUserId = p17.ApplicationUserId, | ||||
|                 Questions = funcMain3(p17.Questions), | ||||
|                 Id = p17.Id | ||||
|                 ChiefComplaint = p19.ChiefComplaint, | ||||
|                 SectionId = p19.SectionId, | ||||
|                 Section = p19.Section == null ? null : new SectionSDto() | ||||
|                 { | ||||
|                     Name = p19.Section.Name, | ||||
|                     Detail = p19.Section.Detail, | ||||
|                     UniversityId = p19.Section.UniversityId, | ||||
|                     Id = p19.Section.Id | ||||
|                 }, | ||||
|                 ApplicationUserId = p19.ApplicationUserId, | ||||
|                 Questions = funcMain4(p19.Questions), | ||||
|                 Id = p19.Id | ||||
|             }; | ||||
|         } | ||||
|         public static MedicalHistoryTemplateLDto AdaptTo(this MedicalHistoryTemplate p19, MedicalHistoryTemplateLDto p20) | ||||
|         public static MedicalHistoryTemplateLDto AdaptTo(this MedicalHistoryTemplate p21, MedicalHistoryTemplateLDto p22) | ||||
|         { | ||||
|             if (p19 == null) | ||||
|             if (p21 == null) | ||||
|             { | ||||
|                 return null; | ||||
|             } | ||||
|             MedicalHistoryTemplateLDto result = p20 ?? new MedicalHistoryTemplateLDto(); | ||||
|             MedicalHistoryTemplateLDto result = p22 ?? new MedicalHistoryTemplateLDto(); | ||||
|              | ||||
|             result.ChiefComplaint = p19.ChiefComplaint; | ||||
|             result.SectionId = p19.SectionId; | ||||
|             result.ApplicationUserId = p19.ApplicationUserId; | ||||
|             result.Questions = funcMain4(p19.Questions, result.Questions); | ||||
|             result.Id = p19.Id; | ||||
|             result.ChiefComplaint = p21.ChiefComplaint; | ||||
|             result.SectionId = p21.SectionId; | ||||
|             result.Section = funcMain5(p21.Section, result.Section); | ||||
|             result.ApplicationUserId = p21.ApplicationUserId; | ||||
|             result.Questions = funcMain6(p21.Questions, result.Questions); | ||||
|             result.Id = p21.Id; | ||||
|             return result; | ||||
|              | ||||
|         } | ||||
|         public static Expression<Func<MedicalHistoryTemplate, MedicalHistoryTemplateLDto>> ProjectToLDto => p23 => new MedicalHistoryTemplateLDto() | ||||
|         public static Expression<Func<MedicalHistoryTemplate, MedicalHistoryTemplateLDto>> ProjectToLDto => p27 => new MedicalHistoryTemplateLDto() | ||||
|         { | ||||
|             ChiefComplaint = p23.ChiefComplaint, | ||||
|             SectionId = p23.SectionId, | ||||
|             ApplicationUserId = p23.ApplicationUserId, | ||||
|             Questions = p23.Questions.Select<MedicalHistoryQuestion, MedicalHistoryQuestionSDto>(p24 => new MedicalHistoryQuestionSDto() | ||||
|             ChiefComplaint = p27.ChiefComplaint, | ||||
|             SectionId = p27.SectionId, | ||||
|             Section = p27.Section == null ? null : new SectionSDto() | ||||
|             { | ||||
|                 Question = p24.Question, | ||||
|                 Part = p24.Part, | ||||
|                 QuestionType = p24.QuestionType, | ||||
|                 MedicalHistoryTemplateId = p24.MedicalHistoryTemplateId, | ||||
|                 Id = p24.Id | ||||
|                 Name = p27.Section.Name, | ||||
|                 Detail = p27.Section.Detail, | ||||
|                 UniversityId = p27.Section.UniversityId, | ||||
|                 Id = p27.Section.Id | ||||
|             }, | ||||
|             ApplicationUserId = p27.ApplicationUserId, | ||||
|             Questions = p27.Questions.Select<MedicalHistoryQuestion, MedicalHistoryQuestionSDto>(p28 => new MedicalHistoryQuestionSDto() | ||||
|             { | ||||
|                 Question = p28.Question, | ||||
|                 Part = p28.Part, | ||||
|                 QuestionType = p28.QuestionType, | ||||
|                 MedicalHistoryTemplateId = p28.MedicalHistoryTemplateId, | ||||
|                 Id = p28.Id | ||||
|             }).ToList<MedicalHistoryQuestionSDto>(), | ||||
|             Id = p23.Id | ||||
|             Id = p27.Id | ||||
|         }; | ||||
|          | ||||
|         private static List<MedicalHistoryQuestion> funcMain1(List<MedicalHistoryQuestionSDto> p10) | ||||
|  | @ -187,20 +218,36 @@ namespace DocuMed.Domain.Mappers | |||
|              | ||||
|         } | ||||
|          | ||||
|         private static List<MedicalHistoryQuestion> funcMain2(List<MedicalHistoryQuestionSDto> p13, List<MedicalHistoryQuestion> p14) | ||||
|         private static Section funcMain2(SectionSDto p13, Section p14) | ||||
|         { | ||||
|             if (p13 == null) | ||||
|             { | ||||
|                 return null; | ||||
|             } | ||||
|             List<MedicalHistoryQuestion> result = new List<MedicalHistoryQuestion>(p13.Count); | ||||
|             Section result = p14 ?? new Section(); | ||||
|              | ||||
|             result.Name = p13.Name; | ||||
|             result.Detail = p13.Detail; | ||||
|             result.UniversityId = p13.UniversityId; | ||||
|             result.Id = p13.Id; | ||||
|             return result; | ||||
|              | ||||
|         } | ||||
|          | ||||
|         private static List<MedicalHistoryQuestion> funcMain3(List<MedicalHistoryQuestionSDto> p15, List<MedicalHistoryQuestion> p16) | ||||
|         { | ||||
|             if (p15 == null) | ||||
|             { | ||||
|                 return null; | ||||
|             } | ||||
|             List<MedicalHistoryQuestion> result = new List<MedicalHistoryQuestion>(p15.Count); | ||||
|              | ||||
|             int i = 0; | ||||
|             int len = p13.Count; | ||||
|             int len = p15.Count; | ||||
|              | ||||
|             while (i < len) | ||||
|             { | ||||
|                 MedicalHistoryQuestionSDto item = p13[i]; | ||||
|                 MedicalHistoryQuestionSDto item = p15[i]; | ||||
|                 result.Add(item == null ? null : new MedicalHistoryQuestion() | ||||
|                 { | ||||
|                     Question = item.Question, | ||||
|  | @ -215,20 +262,20 @@ namespace DocuMed.Domain.Mappers | |||
|              | ||||
|         } | ||||
|          | ||||
|         private static List<MedicalHistoryQuestionSDto> funcMain3(List<MedicalHistoryQuestion> p18) | ||||
|         private static List<MedicalHistoryQuestionSDto> funcMain4(List<MedicalHistoryQuestion> p20) | ||||
|         { | ||||
|             if (p18 == null) | ||||
|             if (p20 == null) | ||||
|             { | ||||
|                 return null; | ||||
|             } | ||||
|             List<MedicalHistoryQuestionSDto> result = new List<MedicalHistoryQuestionSDto>(p18.Count); | ||||
|             List<MedicalHistoryQuestionSDto> result = new List<MedicalHistoryQuestionSDto>(p20.Count); | ||||
|              | ||||
|             int i = 0; | ||||
|             int len = p18.Count; | ||||
|             int len = p20.Count; | ||||
|              | ||||
|             while (i < len) | ||||
|             { | ||||
|                 MedicalHistoryQuestion item = p18[i]; | ||||
|                 MedicalHistoryQuestion item = p20[i]; | ||||
|                 result.Add(item == null ? null : new MedicalHistoryQuestionSDto() | ||||
|                 { | ||||
|                     Question = item.Question, | ||||
|  | @ -243,20 +290,36 @@ namespace DocuMed.Domain.Mappers | |||
|              | ||||
|         } | ||||
|          | ||||
|         private static List<MedicalHistoryQuestionSDto> funcMain4(List<MedicalHistoryQuestion> p21, List<MedicalHistoryQuestionSDto> p22) | ||||
|         private static SectionSDto funcMain5(Section p23, SectionSDto p24) | ||||
|         { | ||||
|             if (p21 == null) | ||||
|             if (p23 == null) | ||||
|             { | ||||
|                 return null; | ||||
|             } | ||||
|             List<MedicalHistoryQuestionSDto> result = new List<MedicalHistoryQuestionSDto>(p21.Count); | ||||
|             SectionSDto result = p24 ?? new SectionSDto(); | ||||
|              | ||||
|             result.Name = p23.Name; | ||||
|             result.Detail = p23.Detail; | ||||
|             result.UniversityId = p23.UniversityId; | ||||
|             result.Id = p23.Id; | ||||
|             return result; | ||||
|              | ||||
|         } | ||||
|          | ||||
|         private static List<MedicalHistoryQuestionSDto> funcMain6(List<MedicalHistoryQuestion> p25, List<MedicalHistoryQuestionSDto> p26) | ||||
|         { | ||||
|             if (p25 == null) | ||||
|             { | ||||
|                 return null; | ||||
|             } | ||||
|             List<MedicalHistoryQuestionSDto> result = new List<MedicalHistoryQuestionSDto>(p25.Count); | ||||
|              | ||||
|             int i = 0; | ||||
|             int len = p21.Count; | ||||
|             int len = p25.Count; | ||||
|              | ||||
|             while (i < len) | ||||
|             { | ||||
|                 MedicalHistoryQuestion item = p21[i]; | ||||
|                 MedicalHistoryQuestion item = p25[i]; | ||||
|                 result.Add(item == null ? null : new MedicalHistoryQuestionSDto() | ||||
|                 { | ||||
|                     Question = item.Question, | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| @page "/MedicalHistoryTemplateActionPage" | ||||
| @page "/MedicalHistoryTemplateActionPage/{TemplateId:string}" | ||||
| @page "/MedicalHistoryTemplateActionPage/{TemplateId}" | ||||
| @inject NavigationManager NavigationManager | ||||
| @inject IRestWrapper RestWrapper | ||||
| @inject IUserUtility UserUtility | ||||
|  | @ -15,6 +15,7 @@ | |||
|             <MudCarouselItem> | ||||
|                 <div class="flex flex-col w-full h-full"> | ||||
|                     <MedicalHistoryTemplateActionStep1 @bind-ChiefComplaint="@ViewModel.PageDto.ChiefComplaint" @bind-SelectedSection="@ViewModel.SelectedSelection" /> | ||||
| 
 | ||||
|                 </div> | ||||
|             </MudCarouselItem> | ||||
|             <MudCarouselItem> | ||||
|  | @ -55,7 +56,7 @@ | |||
|                         <p class="font-extrabold my-0 mr-7 text-lg text-[--color-medicalhistory]">منتظر بمانید</p> | ||||
|                     </div> | ||||
| 
 | ||||
|                 </MudPaper>                 | ||||
|                 </MudPaper> | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|  | @ -63,7 +64,18 @@ | |||
| 
 | ||||
|                     @if (@ViewModel.CurrentStep == 4) | ||||
|                     { | ||||
|                         <MudButton @onclick="@ViewModel.CompleteStepClicked" Variant="Variant.Filled" IconSize="Size.Large" StartIcon="@Icons.Material.Filled.ChevronRight" class="font-extrabold rounded-full bg-[--color-medicalhistory]">تـــکمیل</MudButton> | ||||
|                         @if (@ViewModel.IsEditing) | ||||
|                         { | ||||
|                             <MudButton @onclick="@ViewModel.CompleteStepClicked" Variant="Variant.Filled"  | ||||
|                                        IconSize="Size.Large" StartIcon="@Icons.Material.Filled.ChevronRight"  | ||||
|                                        class="font-extrabold rounded-full bg-[--color-medicalhistory]">تـــکمیل</MudButton> | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             <MudButton @onclick="@ViewModel.CompleteStepClicked" Variant="Variant.Filled" | ||||
|                                        IconSize="Size.Large" StartIcon="@Icons.Material.Filled.ChevronRight" | ||||
|                                        class="font-extrabold rounded-full bg-[--color-medicalhistory]">ویرایش</MudButton> | ||||
|                         } | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|  | @ -83,12 +95,15 @@ | |||
| </BasePageUi> | ||||
| 
 | ||||
| @code { | ||||
| 
 | ||||
|     [Parameter] | ||||
|     public string TemplateId { get; set; } | ||||
|     public string TemplateId { get; set; } = string.Empty; | ||||
|     public MedicalHistoryTemplateActionPageViewModel ViewModel { get; set; } | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         ViewModel = new MedicalHistoryTemplateActionPageViewModel(NavigationManager,Snackbar,RestWrapper,UserUtility); | ||||
|         ViewModel = Guid.TryParse(TemplateId, out Guid templateId) ? | ||||
|             new MedicalHistoryTemplateActionPageViewModel(NavigationManager, Snackbar, RestWrapper, UserUtility, templateId) | ||||
|             : new MedicalHistoryTemplateActionPageViewModel(NavigationManager, Snackbar, RestWrapper, UserUtility); | ||||
|         await ViewModel.InitializeAsync(); | ||||
|         await base.OnInitializedAsync(); | ||||
|     } | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ public class MedicalHistoryTemplateActionPageViewModel : BaseViewModel<MedicalHi | |||
|     public List<MedicalHistoryQuestionSDto> VsQuestions { get; set; } = new(); | ||||
|     public SectionSDto? SelectedSelection { get; set; } | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     public MedicalHistoryTemplateActionPageViewModel( | ||||
|  | @ -52,20 +52,60 @@ public class MedicalHistoryTemplateActionPageViewModel : BaseViewModel<MedicalHi | |||
|         IsEditing = true; | ||||
|     } | ||||
| 
 | ||||
|     public override Task InitializeAsync() | ||||
|     public override async Task InitializeAsync() | ||||
|     { | ||||
|         return base.InitializeAsync(); | ||||
|         if (_templateId != Guid.Empty && IsEditing) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 IsProcessing = true; | ||||
|                 var token = await _userUtility.GetBearerTokenAsync(); | ||||
|                 var dto = await _restWrapper.CrudDtoApiRest<MedicalHistoryTemplateSDto, MedicalHistoryTemplateLDto, Guid>(Address.MedicalHistoryTemplateController) | ||||
|                     .ReadOne(_templateId, token); | ||||
|                 PageDto.ApplicationUserId = dto.ApplicationUserId; | ||||
|                 PageDto.ChiefComplaint = dto.ChiefComplaint; | ||||
|                 PageDto.SectionId = dto.SectionId; | ||||
|                 PageDto.Id = dto.Id; | ||||
|                 SelectedSelection = dto.Section; | ||||
|                 PiQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.PresentIllness)); | ||||
|                 PdhQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.PastDiseasesHistory)); | ||||
|                 PshQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.PastSurgeryHistory)); | ||||
|                 FhQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.FamilyHistory)); | ||||
|                 DhQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.DrugHistory)); | ||||
|                 AhQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.AddictionHistory)); | ||||
|                 VsQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.VitalSign)); | ||||
|             } | ||||
|             catch (ApiException ex) | ||||
|             { | ||||
|                 var exe = await ex.GetContentAsAsync<ApiResult>(); | ||||
|                 _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); | ||||
|             } | ||||
|             catch (Exception e) | ||||
|             { | ||||
|                 _snackbar.Add(e.Message, Severity.Error); | ||||
|             } | ||||
|             finally | ||||
|             { | ||||
| 
 | ||||
|                 IsProcessing = false; | ||||
|             } | ||||
|         } | ||||
|         await base.InitializeAsync(); | ||||
|     } | ||||
| 
 | ||||
|     public async Task CompleteStepClicked() | ||||
|     { | ||||
|         Carousel?.MoveTo(++CurrentStep); | ||||
|         ++CurrentStep; | ||||
|         StepCounter = $"{CurrentStep + 1} / 5"; | ||||
|         if (CurrentStep == 5) | ||||
|         { | ||||
|             if (IsEditing) | ||||
|                 await EditTemplateAsync(); | ||||
|             else | ||||
|                 await SubmitTemplateAsync(); | ||||
|             MedicalHistorySubmitted = true; | ||||
|             await SubmitTemplateAsync(); | ||||
|         } | ||||
|         Carousel?.MoveTo(CurrentStep); | ||||
|     } | ||||
| 
 | ||||
|     public async Task SubmitTemplateAsync() | ||||
|  | @ -105,6 +145,44 @@ public class MedicalHistoryTemplateActionPageViewModel : BaseViewModel<MedicalHi | |||
|             IsProcessing = false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public async Task EditTemplateAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             IsProcessing = true; | ||||
|             if (SelectedSelection == null) | ||||
|                 throw new Exception("لطفا بخش مورد نظر را انتخاب نمایید"); | ||||
|             PageDto.SectionId = SelectedSelection.Id; | ||||
|             var token = await _userUtility.GetBearerTokenAsync(); | ||||
|             PageDto.SectionId = SelectedSelection.Id; | ||||
|             PageDto.Questions.AddRange(PiQuestions); | ||||
|             PageDto.Questions.AddRange(PdhQuestions); | ||||
|             PageDto.Questions.AddRange(PiQuestions); | ||||
|             PageDto.Questions.AddRange(PshQuestions); | ||||
|             PageDto.Questions.AddRange(FhQuestions); | ||||
|             PageDto.Questions.AddRange(DhQuestions); | ||||
|             PageDto.Questions.AddRange(AhQuestions); | ||||
|             PageDto.Questions.AddRange(VsQuestions); | ||||
|             await _restWrapper.CrudDtoApiRest<MedicalHistoryTemplateLDto, MedicalHistoryTemplateSDto, Guid>(Address.MedicalHistoryTemplateController) | ||||
|                 .Update(PageDto, token); | ||||
| 
 | ||||
|         } | ||||
|         catch (ApiException ex) | ||||
|         { | ||||
|             var exe = await ex.GetContentAsAsync<ApiResult>(); | ||||
|             _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             _snackbar.Add(e.Message, Severity.Error); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
| 
 | ||||
|             IsProcessing = false; | ||||
|         } | ||||
|     } | ||||
|     public void RollBackStepClicked() | ||||
|     { | ||||
|         Carousel?.MoveTo(--CurrentStep); | ||||
|  |  | |||
|  | @ -8,8 +8,8 @@ | |||
|         مورد ده | ||||
|     </p> | ||||
|     <BasePartDivider Index="1" Title="شکایت اصلی بیمار" /> | ||||
|     <MudTextField T="string" ValueChanged="async cc => {ChiefComplaint=cc; await ChiefComplaintChanged.InvokeAsync(ChiefComplaint); }" Label="شکایت اصلی بیمار ( CC )" Variant="Variant.Outlined" Margin="Margin.Normal" /> | ||||
|     <MudAutocomplete T="SectionSDto" Label="بخش بیمار" Variant="Variant.Outlined" | ||||
|     <MudTextField T="string" Value="@ChiefComplaint" ValueChanged="async cc => {ChiefComplaint=cc; await ChiefComplaintChanged.InvokeAsync(ChiefComplaint); }" Label="شکایت اصلی بیمار ( CC )" Variant="Variant.Outlined" Margin="Margin.Normal" /> | ||||
|     <MudAutocomplete Value="@SelectedSection" T="SectionSDto" Label="بخش بیمار" Variant="Variant.Outlined" | ||||
|                      ToStringFunc="dto => dto.Name" | ||||
|                      SearchFunc="@SearchSection" | ||||
|                      ValueChanged="async dto => { SelectedSection=dto; await SelectedSectionChanged.InvokeAsync(SelectedSection); }"> | ||||
|  | @ -31,7 +31,6 @@ | |||
| </MudStack> | ||||
| 
 | ||||
| @code { | ||||
| 
 | ||||
|     [Parameter] | ||||
|     public string ChiefComplaint { get; set; } = string.Empty; | ||||
|     [Parameter] | ||||
|  | @ -42,6 +41,8 @@ | |||
|     [Parameter] | ||||
|     public EventCallback<SectionSDto> SelectedSectionChanged { get; set; } | ||||
| 
 | ||||
|     private MedicalHistoryTemplateLDto _editingTemplate = new(); | ||||
| 
 | ||||
|     public List<SectionSDto> Sections { get; private set; } = new List<SectionSDto>(); | ||||
| 
 | ||||
|     public async Task<IEnumerable<SectionSDto>> SearchSection(string section) | ||||
|  |  | |||
|  | @ -31,14 +31,23 @@ | |||
|   <ItemGroup> | ||||
|     <Using Include="DocuMed.Common.Extensions" /> | ||||
|     <Using Include="DocuMed.Common.Models" /> | ||||
|     <Using Include="DocuMed.Common.Models.Api" /> | ||||
|     <Using Include="DocuMed.Common.Models.Claims" /> | ||||
|     <Using Include="DocuMed.Common.Models.Entity" /> | ||||
|     <Using Include="DocuMed.Common.Models.Exception" /> | ||||
|     <Using Include="DocuMed.Domain.Dtos.LargDtos" /> | ||||
|     <Using Include="DocuMed.Domain.Dtos.SmallDtos" /> | ||||
|     <Using Include="DocuMed.Domain.Entities.MedicalHistoryTemplate" /> | ||||
|     <Using Include="DocuMed.Domain.Entities.User" /> | ||||
|     <Using Include="DocuMed.Domain.Enums" /> | ||||
|     <Using Include="DocuMed.Domain.Mappers" /> | ||||
|     <Using Include="DocuMed.Domain.Models.Settings" /> | ||||
|     <Using Include="DocuMed.Repository.Abstracts" /> | ||||
|     <Using Include="DocuMed.Repository.Extensions" /> | ||||
|     <Using Include="DocuMed.Repository.Models" /> | ||||
|     <Using Include="DocuMed.Repository.Repositories.Base" /> | ||||
|     <Using Include="DocuMed.Repository.Repositories.Base.Contracts" /> | ||||
|     <Using Include="DocuMed.Repository.Repositories.Entities.Abstracts" /> | ||||
|     <Using Include="DocuMed.Repository.Services.Contracts" /> | ||||
|     <Using Include="Microsoft.AspNetCore.Identity" /> | ||||
|     <Using Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" /> | ||||
|  |  | |||
|  | @ -1,10 +1,14 @@ | |||
| namespace DocuMed.Repository.Repositories.Base | ||||
| using DocuMed.Repository.Abstracts; | ||||
| 
 | ||||
| namespace DocuMed.Repository.Repositories.Base | ||||
| { | ||||
|     public class BaseRepository<T> : Repository<T>, IBaseRepository<T> where T : class, IApiEntity | ||||
|     { | ||||
|         public BaseRepository(ApplicationContext dbContext) : base(dbContext) | ||||
|         { | ||||
|         protected readonly ICurrentUserService CurrentUserService; | ||||
| 
 | ||||
|         public BaseRepository(ApplicationContext dbContext,ICurrentUserService currentUserService) : base(dbContext) | ||||
|         { | ||||
|             CurrentUserService = currentUserService; | ||||
|         } | ||||
| 
 | ||||
|         public virtual async ValueTask<T> GetByIdAsync(CancellationToken cancellationToken, params object[] ids) | ||||
|  | @ -55,13 +59,32 @@ | |||
|         public virtual void Delete(T entity) | ||||
|         { | ||||
|             AssertExtensions.NotNull(entity, nameof(entity)); | ||||
|             Entities.Remove(entity); | ||||
| 
 | ||||
|             Entities.Entry(entity).Property(e => e.RemovedAt) | ||||
|                 .CurrentValue = DateTime.Now; | ||||
|             Entities.Entry(entity).Property(e => e.IsRemoved) | ||||
|                 .CurrentValue = true; | ||||
|             if (CurrentUserService.UserName != null) | ||||
|                 Entities.Entry(entity).Property(e => e.RemovedBy) | ||||
|                     .CurrentValue = CurrentUserService.UserName; | ||||
|             Entities.Update(entity); | ||||
|         } | ||||
| 
 | ||||
|         public virtual void DeleteRange(IEnumerable<T> entities) | ||||
|         { | ||||
|             AssertExtensions.NotNull(entities, nameof(entities)); | ||||
|             Entities.RemoveRange(entities); | ||||
|             var apiEntities = entities.ToList(); | ||||
|             AssertExtensions.NotNull(apiEntities, nameof(entities)); | ||||
|             foreach (var entity in apiEntities) | ||||
|             { | ||||
|                 Entities.Entry(entity).Property(e => e.RemovedAt) | ||||
|                     .CurrentValue = DateTime.Now; | ||||
|                 Entities.Entry(entity).Property(e => e.IsRemoved) | ||||
|                     .CurrentValue = true; | ||||
|                 if (CurrentUserService.UserName != null) | ||||
|                     Entities.Entry(entity).Property(e => e.RemovedBy) | ||||
|                         .CurrentValue = CurrentUserService.UserName; | ||||
|                 Entities.Update(entity); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         #endregion | ||||
|  |  | |||
|  | @ -2,13 +2,15 @@ | |||
| public class RepositoryWrapper : IRepositoryWrapper | ||||
| { | ||||
|     private readonly ApplicationContext _context; | ||||
|     private readonly ICurrentUserService _currentUserService; | ||||
|     private IDbContextTransaction? _currentTransaction; | ||||
|     public RepositoryWrapper(ApplicationContext context) | ||||
|     public RepositoryWrapper(ApplicationContext context,ICurrentUserService currentUserService) | ||||
|     { | ||||
|         _context = context; | ||||
|         _currentUserService = currentUserService; | ||||
|     } | ||||
| 
 | ||||
|     public IBaseRepository<T> SetRepository<T>() where T : ApiEntity => new BaseRepository<T>(_context); | ||||
|     public IBaseRepository<T> SetRepository<T>() where T : ApiEntity => new BaseRepository<T>(_context, _currentUserService); | ||||
|      | ||||
| 
 | ||||
|     public async Task RollBackAsync(CancellationToken cancellationToken) | ||||
|  | @ -42,20 +44,21 @@ public class RepositoryWrapper : IRepositoryWrapper | |||
|             { | ||||
|                 entity.Property(e => e.CreatedAt) | ||||
|                     .CurrentValue = DateTime.Now; | ||||
|                 if (_currentUserService.UserName != null) | ||||
|                     entity.Property(e => e.CreatedBy) | ||||
|                         .CurrentValue = _currentUserService.UserName; | ||||
|             } | ||||
| 
 | ||||
|             if (entity.State == EntityState.Modified) | ||||
|             { | ||||
|                 entity.Property(e => e.ModifiedAt) | ||||
|                     .CurrentValue = DateTime.Now; | ||||
|             } | ||||
| 
 | ||||
|             if (entity.State == EntityState.Deleted) | ||||
|             { | ||||
|                 entity.Property(e => e.RemovedAt) | ||||
|                     .CurrentValue = DateTime.Now; | ||||
|                 entity.Property(e => e.IsRemoved) | ||||
|                     .CurrentValue = true; | ||||
|                 if (!entity.Property(e => e.IsRemoved).CurrentValue) | ||||
|                 { | ||||
|                     entity.Property(e => e.ModifiedAt) | ||||
|                         .CurrentValue = DateTime.Now; | ||||
|                     if (_currentUserService.UserName != null) | ||||
|                         entity.Property(e => e.ModifiedBy) | ||||
|                             .CurrentValue = _currentUserService.UserName; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| namespace DocuMed.Repository.Repositories.Entities.Abstracts; | ||||
| 
 | ||||
| public interface IMedicalHistoryTemplateRepository : IBaseRepository<MedicalHistoryTemplate>,IScopedDependency | ||||
| { | ||||
|     public Task<List<MedicalHistoryTemplateSDto>> GetMedicalHistoryTemplatesAsync(int page = 0, CancellationToken cancellationToken = default); | ||||
|     public Task<MedicalHistoryTemplateLDto> GetMedicalHistoryTemplateAsync(Guid id, CancellationToken cancellationToken = default); | ||||
| } | ||||
|  | @ -0,0 +1,32 @@ | |||
| namespace DocuMed.Repository.Repositories.Entities; | ||||
| 
 | ||||
| public class MedicalHistoryTemplateRepository : BaseRepository<MedicalHistoryTemplate>, IMedicalHistoryTemplateRepository  | ||||
| { | ||||
|     public MedicalHistoryTemplateRepository(ApplicationContext dbContext,ICurrentUserService currentUserService) : base(dbContext,currentUserService) | ||||
|     { | ||||
|     } | ||||
| 
 | ||||
|     public async Task<List<MedicalHistoryTemplateSDto>> GetMedicalHistoryTemplatesAsync(int page = 0, CancellationToken cancellationToken = default) | ||||
|     { | ||||
|         if (!Guid.TryParse(CurrentUserService.UserId, out Guid userId)) | ||||
|             throw new AppException("توکن غیرمجاز", ApiResultStatusCode.UnAuthorized); | ||||
|         var list = await TableNoTracking | ||||
|             .Where(t => t.ApplicationUserId == userId) | ||||
|             .OrderByDescending(t => t.CreatedAt) | ||||
|             .Skip(page * 15) | ||||
|             .Take(15) | ||||
|             .Select(MedicalHistoryTemplateMapper.ProjectToSDto) | ||||
|             .ToListAsync(cancellationToken); | ||||
|         return list; | ||||
|     } | ||||
| 
 | ||||
|     public async Task<MedicalHistoryTemplateLDto> GetMedicalHistoryTemplateAsync(Guid id, CancellationToken cancellationToken = default) | ||||
|     { | ||||
|         var dto = await TableNoTracking.Where(t => t.Id == id) | ||||
|             .Select(MedicalHistoryTemplateMapper.ProjectToLDto) | ||||
|             .FirstOrDefaultAsync(cancellationToken); | ||||
|         if (dto == null) | ||||
|             throw new AppException("پیش نویس پیدا نشد", ApiResultStatusCode.NotFound); | ||||
|         return dto; | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue