Compare commits

..

No commits in common. "cc8aa32447d2d52a76fc9124e7040a3c059c5956" and "b27d2c56dafb7e8438f1a2390d2e838c2f7a5e9b" have entirely different histories.

91 changed files with 497 additions and 4961 deletions

View File

@ -2,7 +2,7 @@
"ConnectionStrings": { "ConnectionStrings": {
"PostgresServer": "User ID=postgres;Password=root;Host=localhost;Port=5432;Database=iGarsonDB;", "PostgresServer": "User ID=postgres;Password=root;Host=localhost;Port=5432;Database=iGarsonDB;",
"PostgresCompose": "Host=postgres_image;Username=brizcouser;Password=brizco;Database=BrizCoDB;", "PostgresCompose": "Host=postgres_image;Username=brizcouser;Password=brizco;Database=BrizCoDB;",
"Postgres": "Host=pg-0,pg-1;Username=igarsonAgent;Password=xHTpBf4wC+bBeNg2pL6Ga7VEWKFJx7VPEUpqxwPFfOc2YYTVwFQuHfsiqoVeT9+6;Database=DocuMedDB;Load Balance Hosts=true;Target Session Attributes=primary;Application Name=iGLS" "Postgres": "Host=pg-0,pg-1;Username=igarsonAgent;Password=xHTpBf4wC+bBeNg2pL6Ga7VEWKFJx7VPEUpqxwPFfOc2YYTVwFQuHfsiqoVeT9+6;Database=BrizcoDB;Load Balance Hosts=true;Target Session Attributes=primary;Application Name=iGLS"
}, },
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
@ -14,7 +14,7 @@
} }
}, },
"SiteSettings": { "SiteSettings": {
"BaseUrl": "http://localhost:32770", "BaseUrl": "http://localhost:32769",
"UserSetting": { "UserSetting": {
"Username": "root", "Username": "root",
"Email": "info@documed.ir", "Email": "info@documed.ir",

View File

@ -1,64 +0,0 @@
namespace DocuMed.Api.Controllers;
public class CityController : ICarterModule
{
public virtual void AddRoutes(IEndpointRouteBuilder app)
{
var group = app.NewVersionedApi("City").MapGroup($"api/city");
group.MapGet("", GetAllAsync)
.WithDisplayName("GetAll")
.HasApiVersion(1.0);
group.MapGet("{id}", GetAsync)
.WithDisplayName("GetOne")
.HasApiVersion(1.0);
group.MapPost("", Post)
.HasApiVersion(1.0);
group.MapPut("", Put)
.HasApiVersion(1.0);
group.MapDelete("", Delete)
.HasApiVersion(1.0);
}
// GET:Get All Entity
public virtual async Task<IResult> GetAllAsync([FromQuery] int page, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
=> TypedResults.Ok(await repositoryWrapper.SetRepository<City>().TableNoTracking
.Select(CityMapper.ProjectToSDto).ToListAsync(cancellationToken));
// GET:Get An Entity By Id
public async Task<IResult> GetAsync(int id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
=> TypedResults.Ok(await repositoryWrapper.SetRepository<City>().GetByIdAsync(cancellationToken, id));
// POST:Add New Entity
public virtual async Task<IResult> Post([FromBody] CitySDto dto, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = City.Create(dto.Name);
repositoryWrapper.SetRepository<City>().Add(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok(ent);
}
// PUT:Update Entity
public virtual async Task<IResult> Put([FromBody] CitySDto dto, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = City.Create(dto.Name);
ent.Id = dto.Id;
repositoryWrapper.SetRepository<City>().Update(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
// DELETE:Delete Entity
public virtual async Task<IResult> Delete(int id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = await repositoryWrapper.SetRepository<City>().GetByIdAsync(cancellationToken, id);
repositoryWrapper.SetRepository<City>().Delete(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
}

View File

@ -1,64 +0,0 @@
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace DocuMed.Api.Controllers;
public class MedicalHistoryTemplateController : ICarterModule
{
public virtual void AddRoutes(IEndpointRouteBuilder app)
{
var group = app.NewVersionedApi("MedicalHistoryTemplate").MapGroup($"api/medicalhistory/template")
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser());
group.MapGet("", GetAllAsync)
.WithDisplayName("GetAll")
.HasApiVersion(1.0);
group.MapGet("{id}", GetAsync)
.WithDisplayName("GetOne")
.HasApiVersion(1.0);
group.MapPost("", Post)
.HasApiVersion(1.0);
group.MapPut("", Put)
.HasApiVersion(1.0);
group.MapDelete("", Delete)
.HasApiVersion(1.0);
}
// GET:Get All Entity
public virtual async Task<IResult> GetAllAsync([FromQuery] int page, IMedicalHistoryTemplateRepository repository, CancellationToken cancellationToken)
{
return TypedResults.Ok(await repository.GetMedicalHistoryTemplatesAsync(page,cancellationToken));
}
// GET:Get An Entity By 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, IMedicalHistoryTemplateService service, ICurrentUserService currentUserService, CancellationToken cancellationToken)
{
return TypedResults.Ok(await service.AddAsync(dto,cancellationToken));
}
// PUT:Update Entity
public virtual async Task<IResult> Put([FromBody] MedicalHistoryTemplateLDto dto, IMedicalHistoryTemplateService service,ICurrentUserService currentUserService, CancellationToken cancellationToken)
{
return TypedResults.Ok(await service.EditAsync(dto, cancellationToken));
}
// DELETE:Delete Entity
public virtual async Task<IResult> Delete(int id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = await repositoryWrapper.SetRepository<MedicalHistoryTemplate>().GetByIdAsync(cancellationToken, id);
repositoryWrapper.SetRepository<MedicalHistoryTemplate>().Delete(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
}

View File

@ -1,80 +0,0 @@
using Microsoft.IdentityModel.Tokens;
namespace DocuMed.Api.Controllers;
public class SectionController : ICarterModule
{
public virtual void AddRoutes(IEndpointRouteBuilder app)
{
var group = app.NewVersionedApi("Section").MapGroup($"api/section");
group.MapGet("", GetAllAsync)
.WithDisplayName("GetAll")
.HasApiVersion(1.0);
group.MapGet("University/{universityId}", GetAllByUniversityAsync)
.WithDisplayName("GetAllByUniversityId")
.HasApiVersion(1.0);
group.MapGet("{id}", GetAsync)
.WithDisplayName("GetOne")
.HasApiVersion(1.0);
group.MapPost("", Post)
.HasApiVersion(1.0);
group.MapPut("", Put)
.HasApiVersion(1.0);
group.MapDelete("", Delete)
.HasApiVersion(1.0);
}
// GET:Get All Entity
public virtual async Task<IResult> GetAllAsync([FromQuery] int page, IRepositoryWrapper repositoryWrapper, ICurrentUserService currentUserService, CancellationToken cancellationToken)
{
return TypedResults.Ok(await repositoryWrapper.SetRepository<Section>().TableNoTracking
.Select(SectionMapper.ProjectToSDto).ToListAsync(cancellationToken));
}
// GET:Get All Entity
public virtual async Task<IResult> GetAllByUniversityAsync(Guid universityId, IRepositoryWrapper repositoryWrapper, ICurrentUserService currentUserService, CancellationToken cancellationToken)
{
return TypedResults.Ok(await repositoryWrapper.SetRepository<Section>().TableNoTracking
.Where(s => s.UniversityId == universityId)
.Select(SectionMapper.ProjectToSDto).ToListAsync(cancellationToken));
}
// GET:Get An Entity By Id
public async Task<IResult> GetAsync(Guid id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
=> TypedResults.Ok(await repositoryWrapper.SetRepository<Section>().GetByIdAsync(cancellationToken, id));
// POST:Add New Entity
public virtual async Task<IResult> Post([FromBody] SectionSDto dto, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = Section.Create(dto.Name,dto.Detail,dto.UniversityId);
repositoryWrapper.SetRepository<Section>().Add(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok(ent);
}
// PUT:Update Entity
public virtual async Task<IResult> Put([FromBody] SectionSDto dto, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = Section.Create(dto.Name,dto.Detail, dto.UniversityId);
ent.Id = dto.Id;
repositoryWrapper.SetRepository<Section>().Update(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
// DELETE:Delete Entity
public virtual async Task<IResult> Delete(int id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = await repositoryWrapper.SetRepository<Section>().GetByIdAsync(cancellationToken, id);
repositoryWrapper.SetRepository<Section>().Delete(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
}

View File

@ -1,66 +0,0 @@
namespace DocuMed.Api.Controllers;
public class UniversityController : ICarterModule
{
public virtual void AddRoutes(IEndpointRouteBuilder app)
{
var group = app.NewVersionedApi("University")
.MapGroup($"api/university");
group.MapGet("", GetAllAsync)
.WithDisplayName("GetAll")
.HasApiVersion(1.0);
group.MapGet("{id}", GetAsync)
.WithDisplayName("GetOne")
.HasApiVersion(1.0);
group.MapPost("", Post)
.HasApiVersion(1.0);
group.MapPut("", Put)
.HasApiVersion(1.0);
group.MapDelete("", Delete)
.HasApiVersion(1.0);
}
// GET:Get All Entity
public virtual async Task<IResult> GetAllAsync([FromQuery] int page, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
=> TypedResults.Ok(await repositoryWrapper.SetRepository<University>().TableNoTracking
.Select(UniversityMapper.ProjectToSDto).ToListAsync(cancellationToken));
// GET:Get An Entity By Id
public async Task<IResult> GetAsync(int id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
=> TypedResults.Ok(await repositoryWrapper.SetRepository<University>().GetByIdAsync(cancellationToken, id));
// POST:Add New Entity
public virtual async Task<IResult> Post([FromBody] UniversitySDto dto, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = University.Create(dto.Name,dto.Address,dto.CityId);
repositoryWrapper.SetRepository<University>().Add(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok(ent);
}
// PUT:Update Entity
public virtual async Task<IResult> Put([FromBody] UniversitySDto dto, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = University.Create(dto.Name,dto.Address,dto.CityId);
ent.Id = dto.Id;
repositoryWrapper.SetRepository<University>().Update(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
// DELETE:Delete Entity
public virtual async Task<IResult> Delete(int id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = await repositoryWrapper.SetRepository<University>().GetByIdAsync(cancellationToken, id);
repositoryWrapper.SetRepository<University>().Delete(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
}

View File

@ -1,23 +0,0 @@
namespace DocuMed.Api.Controllers;
public class UserController : ICarterModule
{
public void AddRoutes(IEndpointRouteBuilder app)
{
var group = app.NewVersionedApi("User")
.MapGroup($"api/user")
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser());
group.MapPut("", EditUserAsync)
.WithDisplayName("EditUser")
.HasApiVersion(1.0);
}
public virtual async Task<IResult> EditUserAsync([FromBody]UserActionRequestDto request,IUserService userService,CancellationToken cancellationToken)
{
await userService.EditUserAsync(request, cancellationToken);
return TypedResults.Ok();
}
}

View File

@ -57,7 +57,6 @@
<Using Include="Autofac" /> <Using Include="Autofac" />
<Using Include="Autofac.Extensions.DependencyInjection" /> <Using Include="Autofac.Extensions.DependencyInjection" />
<Using Include="Carter" /> <Using Include="Carter" />
<Using Include="DocuMed.Api.WebFramework.Bases" />
<Using Include="DocuMed.Api.WebFramework.Configurations" /> <Using Include="DocuMed.Api.WebFramework.Configurations" />
<Using Include="DocuMed.Api.WebFramework.Swagger" /> <Using Include="DocuMed.Api.WebFramework.Swagger" />
<Using Include="DocuMed.Common.Extensions" /> <Using Include="DocuMed.Common.Extensions" />
@ -68,16 +67,10 @@
<Using Include="DocuMed.Common.Models.Mapper" /> <Using Include="DocuMed.Common.Models.Mapper" />
<Using Include="DocuMed.Core" /> <Using Include="DocuMed.Core" />
<Using Include="DocuMed.Core.CoreServices.Abstracts" /> <Using Include="DocuMed.Core.CoreServices.Abstracts" />
<Using Include="DocuMed.Core.EntityServices.Abstracts" />
<Using Include="DocuMed.Core.Models.Api" /> <Using Include="DocuMed.Core.Models.Api" />
<Using Include="DocuMed.Domain" /> <Using Include="DocuMed.Domain" />
<Using Include="DocuMed.Domain.Dtos.LargDtos" />
<Using Include="DocuMed.Domain.Dtos.RequestDtos" /> <Using Include="DocuMed.Domain.Dtos.RequestDtos" />
<Using Include="DocuMed.Domain.Dtos.SmallDtos" />
<Using Include="DocuMed.Domain.Entities.City" />
<Using Include="DocuMed.Domain.Entities.MedicalHistoryTemplate" />
<Using Include="DocuMed.Domain.Entities.User" /> <Using Include="DocuMed.Domain.Entities.User" />
<Using Include="DocuMed.Domain.Mappers" />
<Using Include="DocuMed.Domain.Models.Settings" /> <Using Include="DocuMed.Domain.Models.Settings" />
<Using Include="DocuMed.Infrastructure" /> <Using Include="DocuMed.Infrastructure" />
<Using Include="DocuMed.Infrastructure.Models" /> <Using Include="DocuMed.Infrastructure.Models" />
@ -86,12 +79,10 @@
<Using Include="DocuMed.Repository.Extensions" /> <Using Include="DocuMed.Repository.Extensions" />
<Using Include="DocuMed.Repository.Models" /> <Using Include="DocuMed.Repository.Models" />
<Using Include="DocuMed.Repository.Repositories.Base.Contracts" /> <Using Include="DocuMed.Repository.Repositories.Base.Contracts" />
<Using Include="DocuMed.Repository.Repositories.Entities.Abstracts" />
<Using Include="Microsoft.AspNetCore.Authentication.JwtBearer" /> <Using Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
<Using Include="Microsoft.AspNetCore.Identity" /> <Using Include="Microsoft.AspNetCore.Identity" />
<Using Include="Microsoft.AspNetCore.Mvc" /> <Using Include="Microsoft.AspNetCore.Mvc" />
<Using Include="Microsoft.AspNetCore.Mvc.Filters" /> <Using Include="Microsoft.AspNetCore.Mvc.Filters" />
<Using Include="Microsoft.EntityFrameworkCore" />
<Using Include="Microsoft.Extensions.Options" /> <Using Include="Microsoft.Extensions.Options" />
<Using Include="Serilog" /> <Using Include="Serilog" />
<Using Include="Serilog.Events" /> <Using Include="Serilog.Events" />

View File

@ -25,8 +25,7 @@
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_URLS": "http://+:80" "ASPNETCORE_URLS": "http://+:80"
}, },
"publishAllPorts": true, "publishAllPorts": true
"DockerfileRunArguments": " --network=mother -p 32770:80"
} }
}, },
"$schema": "https://json.schemastore.org/launchsettings.json", "$schema": "https://json.schemastore.org/launchsettings.json",

View File

@ -73,73 +73,6 @@ public class CrudEndpoint<TEntity,TGetAllQuery,TGetOneQuery,TCreateCommand,TUpda
} }
} }
public class CrudEndpoint<TEntity> where TEntity : ApiEntity, new()
{
private readonly string _endpointName;
public CrudEndpoint(string endpointName)
{
_endpointName = endpointName;
}
public virtual void AddRoutes(IEndpointRouteBuilder app)
{
var group = app.NewVersionedApi(_endpointName).MapGroup($"api/{_endpointName.ToLower()}");
group.MapGet("", GetAllAsync)
.WithDisplayName("GetAll")
.HasApiVersion(1.0);
group.MapGet("{id}", GetAsync)
.WithName("GetOne")
.HasApiVersion(1.0);
group.MapPost("", Post)
.HasApiVersion(1.0);
group.MapPut("", Put)
.HasApiVersion(1.0);
group.MapDelete("", Delete)
.HasApiVersion(1.0);
}
// GET:Get All Entity
public virtual async Task<IResult> GetAllAsync([FromQuery] int page, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
=> TypedResults.Ok(await repositoryWrapper.SetRepository<TEntity>().TableNoTracking.ToListAsync(cancellationToken));
// GET:Get An Entity By Id
public async Task<IResult> GetAsync(int id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
=> TypedResults.Ok(await repositoryWrapper.SetRepository<TEntity>().GetByIdAsync(cancellationToken, id));
// POST:Add New Entity
public virtual async Task<IResult> Post([FromBody] TEntity ent, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
repositoryWrapper.SetRepository<TEntity>().Add(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok(ent);
}
// PUT:Update Entity
public virtual async Task<IResult> Put([FromBody] TEntity ent,IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
repositoryWrapper.SetRepository<TEntity>().Update(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
// DELETE:Delete Entity
public virtual async Task<IResult> Delete(int id,IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken)
{
var ent = await repositoryWrapper.SetRepository<TEntity>().GetByIdAsync(cancellationToken, id);
repositoryWrapper.SetRepository<TEntity>().Delete(ent);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
return TypedResults.Ok();
}
}
[ApiController] [ApiController]
//[AllowAnonymous] //[AllowAnonymous]
[ApiResultFilter] [ApiResultFilter]

View File

@ -65,7 +65,7 @@ public static class ServiceExtensions
serviceCollection.AddDbContextFactory<ApplicationContext>(options => serviceCollection.AddDbContextFactory<ApplicationContext>(options =>
{ {
options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
options.UseNpgsql(Configuration.GetConnectionString("Postgres"), b => b.MigrationsAssembly("DocuMed.Repository")) options.UseNpgsql(Configuration.GetConnectionString("PostgresCompose"), b => b.MigrationsAssembly("DocuMed.Repository"))
.UseProjectAssembly(typeof(ApplicationUser).Assembly); .UseProjectAssembly(typeof(ApplicationUser).Assembly);
//options.EnableServiceProviderCaching(true); //options.EnableServiceProviderCaching(true);
}).BuildServiceProvider(); }).BuildServiceProvider();

View File

@ -46,6 +46,6 @@ namespace DocuMed.Common.Models.Api
public TUser User { get; set; } public TUser User { get; set; }
public string BearerToken => $"Bearer {access_token}"; public string BearerToken => $"Bearer {access_token}";
public List<string> Permissions { get; set; } = new(); public List<string> Permissions { get; set; }
} }
} }

View File

@ -1,10 +1,16 @@
using DocuMed.Domain.Models.Settings; using DocuMed.Core.BaseServices.Abstracts;
using DocuMed.Domain.Models.Settings;
using Mapster;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt; using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text; using System.Text;
namespace DocuMed.Core.BaseServices; namespace DocuMed.Core.BaseServices;
public class JwtService : IJwtService public class JwtService : IJwtService
{ {
private readonly SignInManager<ApplicationUser> _signInManager; private readonly SignInManager<ApplicationUser> _signInManager;
@ -89,8 +95,6 @@ public class JwtService : IJwtService
claims.Add(new Claim(ClaimTypes.NameIdentifier, baseUser.Id.ToString())); claims.Add(new Claim(ClaimTypes.NameIdentifier, baseUser.Id.ToString()));
if (baseUser.Email != null) if (baseUser.Email != null)
claims.Add(new Claim(ClaimTypes.Email, baseUser.Email)); claims.Add(new Claim(ClaimTypes.Email, baseUser.Email));
if(baseUser.UniversityId != null)
claims.Add(new Claim("UniversityId",baseUser.UniversityId.ToString() ?? string.Empty ));
claims.Add(new Claim(ClaimTypes.Gender, baseUser.Gender == 0 ? "Female" : "Mail")); claims.Add(new Claim(ClaimTypes.Gender, baseUser.Gender == 0 ? "Female" : "Mail"));
return claims; return claims;
@ -106,8 +110,6 @@ public class JwtService : IJwtService
claims.Add(new Claim(ClaimTypes.Role, applicationRole.EnglishName)); claims.Add(new Claim(ClaimTypes.Role, applicationRole.EnglishName));
if (baseUser.Email != null) if (baseUser.Email != null)
claims.Add(new Claim(ClaimTypes.Email, baseUser.Email)); claims.Add(new Claim(ClaimTypes.Email, baseUser.Email));
if (baseUser.UniversityId != null)
claims.Add(new Claim("UniversityId", baseUser.UniversityId.ToString() ?? string.Empty));
claims.AddRange(roleClaims); claims.AddRange(roleClaims);
claims.Add(new Claim("JwtID", jwtId)); claims.Add(new Claim("JwtID", jwtId));
claims.Add(new Claim(ClaimTypes.Gender, baseUser.Gender == 0 ? "Female" : "Mail")); claims.Add(new Claim(ClaimTypes.Gender, baseUser.Gender == 0 ? "Female" : "Mail"));

View File

@ -69,7 +69,7 @@ public class AccountService : IAccountService
user = await _userService.CreateUserAsync(phoneNumber); user = await _userService.CreateUserAsync(phoneNumber);
var token = await _userManager.GenerateTwoFactorTokenAsync(user, "Phone"); var token = await _userManager.GenerateTwoFactorTokenAsync(user, "Phone");
//await _smsService.SendVerifyCodeAsync(newPhoneNumber, token); await _smsService.SendVerifyCodeAsync(newPhoneNumber, token);
return user.SignUpStatus; return user.SignUpStatus;
} }

View File

@ -22,6 +22,7 @@
<ItemGroup> <ItemGroup>
<Folder Include="BaseServices\Abstracts\" /> <Folder Include="BaseServices\Abstracts\" />
<Folder Include="CoreServices\Abstracts\" /> <Folder Include="CoreServices\Abstracts\" />
<Folder Include="EntityServices\Abstracts\" />
<Folder Include="Models\Api\" /> <Folder Include="Models\Api\" />
<Folder Include="Abstracts\" /> <Folder Include="Abstracts\" />
</ItemGroup> </ItemGroup>
@ -36,7 +37,6 @@
<Using Include="DocuMed.Core.BaseServices.Abstracts" /> <Using Include="DocuMed.Core.BaseServices.Abstracts" />
<Using Include="DocuMed.Core.CoreServices.Abstracts" /> <Using Include="DocuMed.Core.CoreServices.Abstracts" />
<Using Include="DocuMed.Core.EntityServices.Abstracts" /> <Using Include="DocuMed.Core.EntityServices.Abstracts" />
<Using Include="DocuMed.Domain.Dtos.LargDtos" />
<Using Include="DocuMed.Domain.Dtos.RequestDtos" /> <Using Include="DocuMed.Domain.Dtos.RequestDtos" />
<Using Include="DocuMed.Domain.Dtos.SmallDtos" /> <Using Include="DocuMed.Domain.Dtos.SmallDtos" />
<Using Include="DocuMed.Domain.Entities.User" /> <Using Include="DocuMed.Domain.Entities.User" />

View File

@ -1,7 +0,0 @@
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);
}

View File

@ -1,61 +0,0 @@
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;
}
}

View File

@ -89,16 +89,12 @@ public class UserService : IUserService
user.FirstName = request.FirstName; user.FirstName = request.FirstName;
user.UserName = request.PhoneNumber; user.UserName = request.PhoneNumber;
user.PhoneNumber = request.PhoneNumber; user.PhoneNumber = request.PhoneNumber;
user.StudentId = request.StudentId;
user.FirstName = request.FirstName; user.FirstName = request.FirstName;
user.LastName = request.LastName; user.LastName = request.LastName;
user.NationalId = request.NationalId; user.NationalId = request.NationalId;
user.BirthDate = request.BirthDate; user.BirthDate = request.BirthDate;
user.Gender = request.Gender; user.Gender = request.Gender;
if (request.UniversityId != Guid.Empty)
user.UniversityId = request.UniversityId; user.UniversityId = request.UniversityId;
if (request.SectionId != Guid.Empty)
user.SectionId = request.SectionId;
var result = await _userManager.UpdateAsync(user); var result = await _userManager.UpdateAsync(user);
if (!result.Succeeded) if (!result.Succeeded)

View File

@ -28,7 +28,6 @@ public class MedicalHistoryLDto : BaseDto<MedicalHistoryLDto,MedicalHistory>
public int PulseRate { get; set; } public int PulseRate { get; set; }
public int SPO2 { get; set; } public int SPO2 { get; set; }
public int Temperature { get; set; } public int Temperature { get; set; }
public Guid ApplicationUserId { get; set; }
public List<MedicalHistoryAnswerSDto> Answers { get; set; } = new(); public List<MedicalHistoryAnswerSDto> Answers { get; set; } = new();
} }

View File

@ -4,8 +4,5 @@ public class MedicalHistoryTemplateLDto : BaseDto<MedicalHistoryTemplateLDto,Med
{ {
public string ChiefComplaint { get; set; } = string.Empty; 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(); public List<MedicalHistoryQuestionSDto> Questions { get; set; } = new();
} }

View File

@ -7,10 +7,8 @@ public class UserActionRequestDto
public DateTime BirthDate { get; set; } public DateTime BirthDate { get; set; }
public Gender Gender { get; set; } public Gender Gender { get; set; }
public string NationalId { get; set; } = string.Empty; public string NationalId { get; set; } = string.Empty;
public string StudentId { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
public Guid RoleId { get; set; } = new(); public Guid RoleId { get; set; } = new();
public string RoleName { get; set; } = string.Empty; public string RoleName { get; set; } = string.Empty;
public Guid UniversityId { get; set; } public Guid UniversityId { get; set; }
public Guid SectionId { get; set; }
} }

View File

@ -9,14 +9,9 @@ public class ApplicationUserSDto : BaseDto<ApplicationUserSDto,ApplicationUser>
public string PhoneNumber { get; set; } = string.Empty; public string PhoneNumber { get; set; } = string.Empty;
public bool PhoneNumberConfirmed { get; set; } public bool PhoneNumberConfirmed { get; set; }
public string NationalId { get; set; } = string.Empty; public string NationalId { get; set; } = string.Empty;
public string StudentId { get; set; } = string.Empty; public string Section { get; set; } = string.Empty;
public DateTime BirthDate { get; set; } public DateTime BirthDate { get; set; }
public Gender Gender { get; set; } public Gender Gender { get; set; }
public SignUpStatus SignUpStatus { get; set; } public SignUpStatus SignUpStatus { get; set; }
public Guid UniversityId { get; set; } public Guid UniversityId { get; set; }
public Guid SectionId { get; set; }
public string FullName => FirstName + " " + LastName;
} }

View File

@ -28,6 +28,4 @@ public class MedicalHistorySDto : BaseDto<MedicalHistorySDto,MedicalHistory>
public int PulseRate { get; set; } public int PulseRate { get; set; }
public int SPO2 { get; set; } public int SPO2 { get; set; }
public int Temperature { get; set; } public int Temperature { get; set; }
public string FullName => FirstName + " " + LastName;
public Guid ApplicationUserId { get; set; }
} }

View File

@ -3,6 +3,4 @@
public class MedicalHistoryTemplateSDto : BaseDto<MedicalHistoryTemplateSDto,MedicalHistoryTemplate> public class MedicalHistoryTemplateSDto : BaseDto<MedicalHistoryTemplateSDto,MedicalHistoryTemplate>
{ {
public string ChiefComplaint { get; set; } = string.Empty; public string ChiefComplaint { get; set; } = string.Empty;
public Guid SectionId { get; set; }
public Guid ApplicationUserId { get; set; }
} }

View File

@ -1,8 +0,0 @@
namespace DocuMed.Domain.Dtos.SmallDtos;
public class SectionSDto : BaseDto<SectionSDto,Section>
{
public string Name { get; set; } = string.Empty;
public string Detail { get; set; } = string.Empty;
public Guid UniversityId { get; set; }
}

View File

@ -4,5 +4,4 @@ public class UniversitySDto : BaseDto<UniversitySDto,University>
{ {
public string Name { get; set; } = string.Empty; public string Name { get; set; } = string.Empty;
public string Address { get; set; } = string.Empty; public string Address { get; set; } = string.Empty;
public Guid CityId { get; set; }
} }

View File

@ -23,11 +23,3 @@ public partial class University
return new University(name, address, cityId); return new University(name, address, cityId);
} }
} }
public partial class Section
{
public static Section Create(string name, string detail, Guid universityId)
{
return new Section(name, detail, universityId);
}
}

View File

@ -1,8 +1,5 @@
namespace DocuMed.Domain.Entities.City; namespace DocuMed.Domain.Entities.City;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[GenerateMapper]
public partial class City : ApiEntity public partial class City : ApiEntity
{ {
public City() public City()

View File

@ -1,25 +0,0 @@
namespace DocuMed.Domain.Entities.City;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[GenerateMapper]
public partial class Section : ApiEntity
{
public Section()
{
}
public Section(string name, string detail, Guid universityId)
{
Name = name;
Detail = detail;
UniversityId = universityId;
}
public string Name { get; internal set; } = string.Empty;
public string Detail { get; internal set; } = string.Empty;
public Guid UniversityId { get; internal set; }
public University? University { get; internal set; }
}

View File

@ -1,7 +1,5 @@
namespace DocuMed.Domain.Entities.City; namespace DocuMed.Domain.Entities.City;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[GenerateMapper]
public partial class University : ApiEntity public partial class University : ApiEntity
{ {
public University() public University()
@ -21,6 +19,4 @@ public partial class University : ApiEntity
public Guid CityId { get; internal set; } public Guid CityId { get; internal set; }
public City? City { get; internal set; } public City? City { get; internal set; }
public List<Section> Sections { get; internal set; } = new();
} }

View File

@ -43,8 +43,7 @@ public partial class MedicalHistory
int diastolicBloodPressure, int diastolicBloodPressure,
int pulseRate, int pulseRate,
int sPO2, int sPO2,
int temperature, int temperature)
Guid applicationUserId)
{ {
return new MedicalHistory(presentIllnessDetail, return new MedicalHistory(presentIllnessDetail,
pastDiseasesHistoryDetail, pastDiseasesHistoryDetail,
@ -56,7 +55,7 @@ public partial class MedicalHistory
systemReviewDetail, systemReviewDetail,
vitalSignDetail, vitalSignDetail,
chiefComplaint, section, firstName, lastName, fatherName, nationalId, age, birthDate, systolicBloodPressure, chiefComplaint, section, firstName, lastName, fatherName, nationalId, age, birthDate, systolicBloodPressure,
diastolicBloodPressure, pulseRate, sPO2, temperature, applicationUserId); diastolicBloodPressure, pulseRate, sPO2, temperature);
} }
} }

View File

@ -1,7 +1,9 @@
namespace DocuMed.Domain.Entities.MedicalHistory; namespace DocuMed.Domain.Entities.MedicalHistory;
[AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] [AdaptTwoWays("[name]SDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) },
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) }, MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)] MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[AdaptTwoWays("[name]LDto", IgnoreAttributes = new[] { typeof(AdaptIgnoreAttribute) },
MapType = MapType.Map | MapType.MapToTarget | MapType.Projection)]
[GenerateMapper] [GenerateMapper]
public partial class MedicalHistory : ApiEntity public partial class MedicalHistory : ApiEntity
@ -32,8 +34,7 @@ public partial class MedicalHistory : ApiEntity
int diastolicBloodPressure, int diastolicBloodPressure,
int pulseRate, int pulseRate,
int spo2, int spo2,
int temperature, int temperature)
Guid applicationUserId)
{ {
PresentIllnessDetail = presentIllnessDetail; PresentIllnessDetail = presentIllnessDetail;
PastDiseasesHistoryDetail = pastDiseasesHistoryDetail; PastDiseasesHistoryDetail = pastDiseasesHistoryDetail;
@ -57,7 +58,6 @@ public partial class MedicalHistory : ApiEntity
PulseRate = pulseRate; PulseRate = pulseRate;
SPO2 = spo2; SPO2 = spo2;
Temperature = temperature; Temperature = temperature;
ApplicationUserId = applicationUserId;
} }
public string ChiefComplaint { get; internal set; } = string.Empty; public string ChiefComplaint { get; internal set; } = string.Empty;
public string Section { get; internal set; } = string.Empty; public string Section { get; internal set; } = string.Empty;
@ -86,8 +86,5 @@ public partial class MedicalHistory : ApiEntity
public int SPO2 { get; internal set; } public int SPO2 { get; internal set; }
public int Temperature { get; internal set; } public int Temperature { get; internal set; }
public Guid ApplicationUserId { get; internal set; }
public ApplicationUser? ApplicationUser { get; internal set; }
public List<MedicalHistoryAnswer> Answers { get; internal set; } = new(); public List<MedicalHistoryAnswer> Answers { get; internal set; } = new();
} }

View File

@ -24,8 +24,8 @@ public partial class MedicalHistoryTemplate
return mhQuestion; return mhQuestion;
} }
public static MedicalHistoryTemplate Create(string chiefComplaint,Guid sectionId,Guid applicationUserId) public static MedicalHistoryTemplate Create(string chiefComplaint)
{ {
return new MedicalHistoryTemplate(chiefComplaint, sectionId, applicationUserId); return new MedicalHistoryTemplate(chiefComplaint);
} }
} }

View File

@ -12,17 +12,12 @@ public partial class MedicalHistoryTemplate : ApiEntity
{ {
} }
public MedicalHistoryTemplate(string chiefComplaint,Guid sectionId,Guid applicationUserId) public MedicalHistoryTemplate(string chiefComplaint)
{ {
ChiefComplaint = chiefComplaint; ChiefComplaint = chiefComplaint;
SectionId = sectionId;
ApplicationUserId = applicationUserId;
} }
public string ChiefComplaint { get; internal set; } = string.Empty; 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(); public List<MedicalHistoryQuestion> Questions { get; internal set; } = new();
} }

View File

@ -7,14 +7,11 @@ public class ApplicationUser : IdentityUser<Guid>
public string FirstName { get; set; } = string.Empty; public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty;
public string NationalId { get; set; } = string.Empty; public string NationalId { get; set; } = string.Empty;
public string StudentId { get; set; } = string.Empty; public string Section { get; set; } = string.Empty;
public DateTime BirthDate { get; set; } public DateTime BirthDate { get; set; }
public Gender Gender { get; set; } public Gender Gender { get; set; }
public SignUpStatus SignUpStatus { get; set; } public SignUpStatus SignUpStatus { get; set; }
public Guid? UniversityId { get; set; } public Guid? UniversityId { get; set; }
public University? University { get; set; } public University? University { get; set; }
public Guid? SectionId { get; set; }
public Section? Section { get; set; }
} }

View File

@ -7,7 +7,5 @@ public enum MedicalHistoryQuestionType
[Display(Name = "پرسش و پاسخ")] [Display(Name = "پرسش و پاسخ")]
Interrogatively, Interrogatively,
[Display(Name = "بله و خیر")] [Display(Name = "بله و خیر")]
YesOrNo, YesOrNo
[Display(Name = "انتخابی")]
Selective
} }

View File

@ -14,12 +14,11 @@ namespace DocuMed.Domain.Mappers
FirstName = p1.FirstName, FirstName = p1.FirstName,
LastName = p1.LastName, LastName = p1.LastName,
NationalId = p1.NationalId, NationalId = p1.NationalId,
StudentId = p1.StudentId, Section = p1.Section,
BirthDate = p1.BirthDate, BirthDate = p1.BirthDate,
Gender = p1.Gender, Gender = p1.Gender,
SignUpStatus = p1.SignUpStatus, SignUpStatus = p1.SignUpStatus,
UniversityId = (Guid?)p1.UniversityId, UniversityId = p1.UniversityId,
SectionId = (Guid?)p1.SectionId,
Id = p1.Id, Id = p1.Id,
UserName = p1.UserName, UserName = p1.UserName,
Email = p1.Email, Email = p1.Email,
@ -38,12 +37,11 @@ namespace DocuMed.Domain.Mappers
result.FirstName = p2.FirstName; result.FirstName = p2.FirstName;
result.LastName = p2.LastName; result.LastName = p2.LastName;
result.NationalId = p2.NationalId; result.NationalId = p2.NationalId;
result.StudentId = p2.StudentId; result.Section = p2.Section;
result.BirthDate = p2.BirthDate; result.BirthDate = p2.BirthDate;
result.Gender = p2.Gender; result.Gender = p2.Gender;
result.SignUpStatus = p2.SignUpStatus; result.SignUpStatus = p2.SignUpStatus;
result.UniversityId = (Guid?)p2.UniversityId; result.UniversityId = p2.UniversityId;
result.SectionId = (Guid?)p2.SectionId;
result.Id = p2.Id; result.Id = p2.Id;
result.UserName = p2.UserName; result.UserName = p2.UserName;
result.Email = p2.Email; result.Email = p2.Email;
@ -57,12 +55,11 @@ namespace DocuMed.Domain.Mappers
FirstName = p4.FirstName, FirstName = p4.FirstName,
LastName = p4.LastName, LastName = p4.LastName,
NationalId = p4.NationalId, NationalId = p4.NationalId,
StudentId = p4.StudentId, Section = p4.Section,
BirthDate = p4.BirthDate, BirthDate = p4.BirthDate,
Gender = p4.Gender, Gender = p4.Gender,
SignUpStatus = p4.SignUpStatus, SignUpStatus = p4.SignUpStatus,
UniversityId = (Guid?)p4.UniversityId, UniversityId = p4.UniversityId,
SectionId = (Guid?)p4.SectionId,
Id = p4.Id, Id = p4.Id,
UserName = p4.UserName, UserName = p4.UserName,
Email = p4.Email, Email = p4.Email,
@ -80,12 +77,11 @@ namespace DocuMed.Domain.Mappers
PhoneNumber = p5.PhoneNumber, PhoneNumber = p5.PhoneNumber,
PhoneNumberConfirmed = p5.PhoneNumberConfirmed, PhoneNumberConfirmed = p5.PhoneNumberConfirmed,
NationalId = p5.NationalId, NationalId = p5.NationalId,
StudentId = p5.StudentId, Section = p5.Section,
BirthDate = p5.BirthDate, BirthDate = p5.BirthDate,
Gender = p5.Gender, Gender = p5.Gender,
SignUpStatus = p5.SignUpStatus, SignUpStatus = p5.SignUpStatus,
UniversityId = p5.UniversityId == null ? default(Guid) : (Guid)p5.UniversityId, UniversityId = p5.UniversityId,
SectionId = p5.SectionId == null ? default(Guid) : (Guid)p5.SectionId,
Id = p5.Id Id = p5.Id
}; };
} }
@ -104,12 +100,11 @@ namespace DocuMed.Domain.Mappers
result.PhoneNumber = p6.PhoneNumber; result.PhoneNumber = p6.PhoneNumber;
result.PhoneNumberConfirmed = p6.PhoneNumberConfirmed; result.PhoneNumberConfirmed = p6.PhoneNumberConfirmed;
result.NationalId = p6.NationalId; result.NationalId = p6.NationalId;
result.StudentId = p6.StudentId; result.Section = p6.Section;
result.BirthDate = p6.BirthDate; result.BirthDate = p6.BirthDate;
result.Gender = p6.Gender; result.Gender = p6.Gender;
result.SignUpStatus = p6.SignUpStatus; result.SignUpStatus = p6.SignUpStatus;
result.UniversityId = p6.UniversityId == null ? default(Guid) : (Guid)p6.UniversityId; result.UniversityId = p6.UniversityId;
result.SectionId = p6.SectionId == null ? default(Guid) : (Guid)p6.SectionId;
result.Id = p6.Id; result.Id = p6.Id;
return result; return result;
@ -123,12 +118,11 @@ namespace DocuMed.Domain.Mappers
PhoneNumber = p8.PhoneNumber, PhoneNumber = p8.PhoneNumber,
PhoneNumberConfirmed = p8.PhoneNumberConfirmed, PhoneNumberConfirmed = p8.PhoneNumberConfirmed,
NationalId = p8.NationalId, NationalId = p8.NationalId,
StudentId = p8.StudentId, Section = p8.Section,
BirthDate = p8.BirthDate, BirthDate = p8.BirthDate,
Gender = p8.Gender, Gender = p8.Gender,
SignUpStatus = p8.SignUpStatus, SignUpStatus = p8.SignUpStatus,
UniversityId = p8.UniversityId == null ? default(Guid) : (Guid)p8.UniversityId, UniversityId = p8.UniversityId,
SectionId = p8.SectionId == null ? default(Guid) : (Guid)p8.SectionId,
Id = p8.Id Id = p8.Id
}; };
} }

View File

@ -1,244 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using DocuMed.Domain.Dtos.LargDtos;
using DocuMed.Domain.Dtos.SmallDtos;
using DocuMed.Domain.Entities.City;
namespace DocuMed.Domain.Mappers
{
public static partial class CityMapper
{
public static City AdaptToCity(this CitySDto p1)
{
return p1 == null ? null : new City()
{
Name = p1.Name,
Id = p1.Id
};
}
public static City AdaptTo(this CitySDto p2, City p3)
{
if (p2 == null)
{
return null;
}
City result = p3 ?? new City();
result.Name = p2.Name;
result.Id = p2.Id;
return result;
}
public static Expression<Func<CitySDto, City>> ProjectToCity => p4 => new City()
{
Name = p4.Name,
Id = p4.Id
};
public static CitySDto AdaptToSDto(this City p5)
{
return p5 == null ? null : new CitySDto()
{
Name = p5.Name,
Id = p5.Id
};
}
public static CitySDto AdaptTo(this City p6, CitySDto p7)
{
if (p6 == null)
{
return null;
}
CitySDto result = p7 ?? new CitySDto();
result.Name = p6.Name;
result.Id = p6.Id;
return result;
}
public static Expression<Func<City, CitySDto>> ProjectToSDto => p8 => new CitySDto()
{
Name = p8.Name,
Id = p8.Id
};
public static City AdaptToCity(this CityLDto p9)
{
return p9 == null ? null : new City()
{
Name = p9.Name,
Universities = funcMain1(p9.Universities),
Id = p9.Id
};
}
public static City AdaptTo(this CityLDto p11, City p12)
{
if (p11 == null)
{
return null;
}
City result = p12 ?? new City();
result.Name = p11.Name;
result.Universities = funcMain2(p11.Universities, result.Universities);
result.Id = p11.Id;
return result;
}
public static Expression<Func<CityLDto, City>> ProjectLDtoToCity => p15 => new City()
{
Name = p15.Name,
Universities = p15.Universities.Select<UniversitySDto, University>(p16 => new University()
{
Name = p16.Name,
Address = p16.Address,
CityId = p16.CityId,
Id = p16.Id
}).ToList<University>(),
Id = p15.Id
};
public static CityLDto AdaptToLDto(this City p17)
{
return p17 == null ? null : new CityLDto()
{
Name = p17.Name,
Universities = funcMain3(p17.Universities),
Id = p17.Id
};
}
public static CityLDto AdaptTo(this City p19, CityLDto p20)
{
if (p19 == null)
{
return null;
}
CityLDto result = p20 ?? new CityLDto();
result.Name = p19.Name;
result.Universities = funcMain4(p19.Universities, result.Universities);
result.Id = p19.Id;
return result;
}
public static Expression<Func<City, CityLDto>> ProjectToLDto => p23 => new CityLDto()
{
Name = p23.Name,
Universities = p23.Universities.Select<University, UniversitySDto>(p24 => new UniversitySDto()
{
Name = p24.Name,
Address = p24.Address,
CityId = p24.CityId,
Id = p24.Id
}).ToList<UniversitySDto>(),
Id = p23.Id
};
private static List<University> funcMain1(List<UniversitySDto> p10)
{
if (p10 == null)
{
return null;
}
List<University> result = new List<University>(p10.Count);
int i = 0;
int len = p10.Count;
while (i < len)
{
UniversitySDto item = p10[i];
result.Add(item == null ? null : new University()
{
Name = item.Name,
Address = item.Address,
CityId = item.CityId,
Id = item.Id
});
i++;
}
return result;
}
private static List<University> funcMain2(List<UniversitySDto> p13, List<University> p14)
{
if (p13 == null)
{
return null;
}
List<University> result = new List<University>(p13.Count);
int i = 0;
int len = p13.Count;
while (i < len)
{
UniversitySDto item = p13[i];
result.Add(item == null ? null : new University()
{
Name = item.Name,
Address = item.Address,
CityId = item.CityId,
Id = item.Id
});
i++;
}
return result;
}
private static List<UniversitySDto> funcMain3(List<University> p18)
{
if (p18 == null)
{
return null;
}
List<UniversitySDto> result = new List<UniversitySDto>(p18.Count);
int i = 0;
int len = p18.Count;
while (i < len)
{
University item = p18[i];
result.Add(item == null ? null : new UniversitySDto()
{
Name = item.Name,
Address = item.Address,
CityId = item.CityId,
Id = item.Id
});
i++;
}
return result;
}
private static List<UniversitySDto> funcMain4(List<University> p21, List<UniversitySDto> p22)
{
if (p21 == null)
{
return null;
}
List<UniversitySDto> result = new List<UniversitySDto>(p21.Count);
int i = 0;
int len = p21.Count;
while (i < len)
{
University item = p21[i];
result.Add(item == null ? null : new UniversitySDto()
{
Name = item.Name,
Address = item.Address,
CityId = item.CityId,
Id = item.Id
});
i++;
}
return result;
}
}
}

View File

@ -36,7 +36,6 @@ namespace DocuMed.Domain.Mappers
PulseRate = p1.PulseRate, PulseRate = p1.PulseRate,
SPO2 = p1.SPO2, SPO2 = p1.SPO2,
Temperature = p1.Temperature, Temperature = p1.Temperature,
ApplicationUserId = p1.ApplicationUserId,
Id = p1.Id Id = p1.Id
}; };
} }
@ -70,7 +69,6 @@ namespace DocuMed.Domain.Mappers
result.PulseRate = p2.PulseRate; result.PulseRate = p2.PulseRate;
result.SPO2 = p2.SPO2; result.SPO2 = p2.SPO2;
result.Temperature = p2.Temperature; result.Temperature = p2.Temperature;
result.ApplicationUserId = p2.ApplicationUserId;
result.Id = p2.Id; result.Id = p2.Id;
return result; return result;
@ -99,7 +97,6 @@ namespace DocuMed.Domain.Mappers
PulseRate = p4.PulseRate, PulseRate = p4.PulseRate,
SPO2 = p4.SPO2, SPO2 = p4.SPO2,
Temperature = p4.Temperature, Temperature = p4.Temperature,
ApplicationUserId = p4.ApplicationUserId,
Id = p4.Id Id = p4.Id
}; };
public static MedicalHistorySDto AdaptToSDto(this MedicalHistory p5) public static MedicalHistorySDto AdaptToSDto(this MedicalHistory p5)
@ -128,7 +125,6 @@ namespace DocuMed.Domain.Mappers
PulseRate = p5.PulseRate, PulseRate = p5.PulseRate,
SPO2 = p5.SPO2, SPO2 = p5.SPO2,
Temperature = p5.Temperature, Temperature = p5.Temperature,
ApplicationUserId = p5.ApplicationUserId,
Id = p5.Id Id = p5.Id
}; };
} }
@ -162,7 +158,6 @@ namespace DocuMed.Domain.Mappers
result.PulseRate = p6.PulseRate; result.PulseRate = p6.PulseRate;
result.SPO2 = p6.SPO2; result.SPO2 = p6.SPO2;
result.Temperature = p6.Temperature; result.Temperature = p6.Temperature;
result.ApplicationUserId = p6.ApplicationUserId;
result.Id = p6.Id; result.Id = p6.Id;
return result; return result;
@ -191,7 +186,6 @@ namespace DocuMed.Domain.Mappers
PulseRate = p8.PulseRate, PulseRate = p8.PulseRate,
SPO2 = p8.SPO2, SPO2 = p8.SPO2,
Temperature = p8.Temperature, Temperature = p8.Temperature,
ApplicationUserId = p8.ApplicationUserId,
Id = p8.Id Id = p8.Id
}; };
public static MedicalHistory AdaptToMedicalHistory(this MedicalHistoryLDto p9) public static MedicalHistory AdaptToMedicalHistory(this MedicalHistoryLDto p9)
@ -220,7 +214,6 @@ namespace DocuMed.Domain.Mappers
PulseRate = p9.PulseRate, PulseRate = p9.PulseRate,
SPO2 = p9.SPO2, SPO2 = p9.SPO2,
Temperature = p9.Temperature, Temperature = p9.Temperature,
ApplicationUserId = p9.ApplicationUserId,
Answers = funcMain1(p9.Answers), Answers = funcMain1(p9.Answers),
Id = p9.Id Id = p9.Id
}; };
@ -255,7 +248,6 @@ namespace DocuMed.Domain.Mappers
result.PulseRate = p11.PulseRate; result.PulseRate = p11.PulseRate;
result.SPO2 = p11.SPO2; result.SPO2 = p11.SPO2;
result.Temperature = p11.Temperature; result.Temperature = p11.Temperature;
result.ApplicationUserId = p11.ApplicationUserId;
result.Answers = funcMain2(p11.Answers, result.Answers); result.Answers = funcMain2(p11.Answers, result.Answers);
result.Id = p11.Id; result.Id = p11.Id;
return result; return result;
@ -285,7 +277,6 @@ namespace DocuMed.Domain.Mappers
PulseRate = p15.PulseRate, PulseRate = p15.PulseRate,
SPO2 = p15.SPO2, SPO2 = p15.SPO2,
Temperature = p15.Temperature, Temperature = p15.Temperature,
ApplicationUserId = p15.ApplicationUserId,
Answers = p15.Answers.Select<MedicalHistoryAnswerSDto, MedicalHistoryAnswer>(p16 => new MedicalHistoryAnswer() Answers = p15.Answers.Select<MedicalHistoryAnswerSDto, MedicalHistoryAnswer>(p16 => new MedicalHistoryAnswer()
{ {
Answer = p16.Answer, Answer = p16.Answer,
@ -323,7 +314,6 @@ namespace DocuMed.Domain.Mappers
PulseRate = p17.PulseRate, PulseRate = p17.PulseRate,
SPO2 = p17.SPO2, SPO2 = p17.SPO2,
Temperature = p17.Temperature, Temperature = p17.Temperature,
ApplicationUserId = p17.ApplicationUserId,
Answers = funcMain3(p17.Answers), Answers = funcMain3(p17.Answers),
Id = p17.Id Id = p17.Id
}; };
@ -358,7 +348,6 @@ namespace DocuMed.Domain.Mappers
result.PulseRate = p19.PulseRate; result.PulseRate = p19.PulseRate;
result.SPO2 = p19.SPO2; result.SPO2 = p19.SPO2;
result.Temperature = p19.Temperature; result.Temperature = p19.Temperature;
result.ApplicationUserId = p19.ApplicationUserId;
result.Answers = funcMain4(p19.Answers, result.Answers); result.Answers = funcMain4(p19.Answers, result.Answers);
result.Id = p19.Id; result.Id = p19.Id;
return result; return result;
@ -388,7 +377,6 @@ namespace DocuMed.Domain.Mappers
PulseRate = p23.PulseRate, PulseRate = p23.PulseRate,
SPO2 = p23.SPO2, SPO2 = p23.SPO2,
Temperature = p23.Temperature, Temperature = p23.Temperature,
ApplicationUserId = p23.ApplicationUserId,
Answers = p23.Answers.Select<MedicalHistoryAnswer, MedicalHistoryAnswerSDto>(p24 => new MedicalHistoryAnswerSDto() Answers = p23.Answers.Select<MedicalHistoryAnswer, MedicalHistoryAnswerSDto>(p24 => new MedicalHistoryAnswerSDto()
{ {
Answer = p24.Answer, Answer = p24.Answer,

View File

@ -4,7 +4,6 @@ using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using DocuMed.Domain.Dtos.LargDtos; using DocuMed.Domain.Dtos.LargDtos;
using DocuMed.Domain.Dtos.SmallDtos; using DocuMed.Domain.Dtos.SmallDtos;
using DocuMed.Domain.Entities.City;
using DocuMed.Domain.Entities.MedicalHistoryTemplate; using DocuMed.Domain.Entities.MedicalHistoryTemplate;
namespace DocuMed.Domain.Mappers namespace DocuMed.Domain.Mappers
@ -16,8 +15,6 @@ namespace DocuMed.Domain.Mappers
return p1 == null ? null : new MedicalHistoryTemplate() return p1 == null ? null : new MedicalHistoryTemplate()
{ {
ChiefComplaint = p1.ChiefComplaint, ChiefComplaint = p1.ChiefComplaint,
SectionId = p1.SectionId,
ApplicationUserId = p1.ApplicationUserId,
Id = p1.Id Id = p1.Id
}; };
} }
@ -30,8 +27,6 @@ namespace DocuMed.Domain.Mappers
MedicalHistoryTemplate result = p3 ?? new MedicalHistoryTemplate(); MedicalHistoryTemplate result = p3 ?? new MedicalHistoryTemplate();
result.ChiefComplaint = p2.ChiefComplaint; result.ChiefComplaint = p2.ChiefComplaint;
result.SectionId = p2.SectionId;
result.ApplicationUserId = p2.ApplicationUserId;
result.Id = p2.Id; result.Id = p2.Id;
return result; return result;
@ -39,8 +34,6 @@ namespace DocuMed.Domain.Mappers
public static Expression<Func<MedicalHistoryTemplateSDto, MedicalHistoryTemplate>> ProjectToMedicalHistoryTemplate => p4 => new MedicalHistoryTemplate() public static Expression<Func<MedicalHistoryTemplateSDto, MedicalHistoryTemplate>> ProjectToMedicalHistoryTemplate => p4 => new MedicalHistoryTemplate()
{ {
ChiefComplaint = p4.ChiefComplaint, ChiefComplaint = p4.ChiefComplaint,
SectionId = p4.SectionId,
ApplicationUserId = p4.ApplicationUserId,
Id = p4.Id Id = p4.Id
}; };
public static MedicalHistoryTemplateSDto AdaptToSDto(this MedicalHistoryTemplate p5) public static MedicalHistoryTemplateSDto AdaptToSDto(this MedicalHistoryTemplate p5)
@ -48,8 +41,6 @@ namespace DocuMed.Domain.Mappers
return p5 == null ? null : new MedicalHistoryTemplateSDto() return p5 == null ? null : new MedicalHistoryTemplateSDto()
{ {
ChiefComplaint = p5.ChiefComplaint, ChiefComplaint = p5.ChiefComplaint,
SectionId = p5.SectionId,
ApplicationUserId = p5.ApplicationUserId,
Id = p5.Id Id = p5.Id
}; };
} }
@ -62,8 +53,6 @@ namespace DocuMed.Domain.Mappers
MedicalHistoryTemplateSDto result = p7 ?? new MedicalHistoryTemplateSDto(); MedicalHistoryTemplateSDto result = p7 ?? new MedicalHistoryTemplateSDto();
result.ChiefComplaint = p6.ChiefComplaint; result.ChiefComplaint = p6.ChiefComplaint;
result.SectionId = p6.SectionId;
result.ApplicationUserId = p6.ApplicationUserId;
result.Id = p6.Id; result.Id = p6.Id;
return result; return result;
@ -71,8 +60,6 @@ namespace DocuMed.Domain.Mappers
public static Expression<Func<MedicalHistoryTemplate, MedicalHistoryTemplateSDto>> ProjectToSDto => p8 => new MedicalHistoryTemplateSDto() public static Expression<Func<MedicalHistoryTemplate, MedicalHistoryTemplateSDto>> ProjectToSDto => p8 => new MedicalHistoryTemplateSDto()
{ {
ChiefComplaint = p8.ChiefComplaint, ChiefComplaint = p8.ChiefComplaint,
SectionId = p8.SectionId,
ApplicationUserId = p8.ApplicationUserId,
Id = p8.Id Id = p8.Id
}; };
public static MedicalHistoryTemplate AdaptToMedicalHistoryTemplate(this MedicalHistoryTemplateLDto p9) public static MedicalHistoryTemplate AdaptToMedicalHistoryTemplate(this MedicalHistoryTemplateLDto p9)
@ -80,15 +67,6 @@ namespace DocuMed.Domain.Mappers
return p9 == null ? null : new MedicalHistoryTemplate() return p9 == null ? null : new MedicalHistoryTemplate()
{ {
ChiefComplaint = p9.ChiefComplaint, 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), Questions = funcMain1(p9.Questions),
Id = p9.Id Id = p9.Id
}; };
@ -102,92 +80,59 @@ namespace DocuMed.Domain.Mappers
MedicalHistoryTemplate result = p12 ?? new MedicalHistoryTemplate(); MedicalHistoryTemplate result = p12 ?? new MedicalHistoryTemplate();
result.ChiefComplaint = p11.ChiefComplaint; result.ChiefComplaint = p11.ChiefComplaint;
result.SectionId = p11.SectionId; result.Questions = funcMain2(p11.Questions, result.Questions);
result.Section = funcMain2(p11.Section, result.Section);
result.ApplicationUserId = p11.ApplicationUserId;
result.Questions = funcMain3(p11.Questions, result.Questions);
result.Id = p11.Id; result.Id = p11.Id;
return result; return result;
} }
public static Expression<Func<MedicalHistoryTemplateLDto, MedicalHistoryTemplate>> ProjectLDtoToMedicalHistoryTemplate => p17 => new MedicalHistoryTemplate() public static Expression<Func<MedicalHistoryTemplateLDto, MedicalHistoryTemplate>> ProjectLDtoToMedicalHistoryTemplate => p15 => new MedicalHistoryTemplate()
{
ChiefComplaint = p15.ChiefComplaint,
Questions = p15.Questions.Select<MedicalHistoryQuestionSDto, MedicalHistoryQuestion>(p16 => new MedicalHistoryQuestion()
{
Question = p16.Question,
Part = p16.Part,
QuestionType = p16.QuestionType,
MedicalHistoryTemplateId = p16.MedicalHistoryTemplateId,
Id = p16.Id
}).ToList<MedicalHistoryQuestion>(),
Id = p15.Id
};
public static MedicalHistoryTemplateLDto AdaptToLDto(this MedicalHistoryTemplate p17)
{
return p17 == null ? null : new MedicalHistoryTemplateLDto()
{ {
ChiefComplaint = p17.ChiefComplaint, ChiefComplaint = p17.ChiefComplaint,
SectionId = p17.SectionId, Questions = funcMain3(p17.Questions),
Section = p17.Section == null ? null : new Section()
{
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 = p17.Id Id = p17.Id
}; };
public static MedicalHistoryTemplateLDto AdaptToLDto(this MedicalHistoryTemplate p19)
{
return p19 == null ? null : new MedicalHistoryTemplateLDto()
{
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 p21, MedicalHistoryTemplateLDto p22) public static MedicalHistoryTemplateLDto AdaptTo(this MedicalHistoryTemplate p19, MedicalHistoryTemplateLDto p20)
{ {
if (p21 == null) if (p19 == null)
{ {
return null; return null;
} }
MedicalHistoryTemplateLDto result = p22 ?? new MedicalHistoryTemplateLDto(); MedicalHistoryTemplateLDto result = p20 ?? new MedicalHistoryTemplateLDto();
result.ChiefComplaint = p21.ChiefComplaint; result.ChiefComplaint = p19.ChiefComplaint;
result.SectionId = p21.SectionId; result.Questions = funcMain4(p19.Questions, result.Questions);
result.Section = funcMain5(p21.Section, result.Section); result.Id = p19.Id;
result.ApplicationUserId = p21.ApplicationUserId;
result.Questions = funcMain6(p21.Questions, result.Questions);
result.Id = p21.Id;
return result; return result;
} }
public static Expression<Func<MedicalHistoryTemplate, MedicalHistoryTemplateLDto>> ProjectToLDto => p27 => new MedicalHistoryTemplateLDto() public static Expression<Func<MedicalHistoryTemplate, MedicalHistoryTemplateLDto>> ProjectToLDto => p23 => new MedicalHistoryTemplateLDto()
{ {
ChiefComplaint = p27.ChiefComplaint, ChiefComplaint = p23.ChiefComplaint,
SectionId = p27.SectionId, Questions = p23.Questions.Select<MedicalHistoryQuestion, MedicalHistoryQuestionSDto>(p24 => new MedicalHistoryQuestionSDto()
Section = p27.Section == null ? null : new SectionSDto()
{ {
Name = p27.Section.Name, Question = p24.Question,
Detail = p27.Section.Detail, Part = p24.Part,
UniversityId = p27.Section.UniversityId, QuestionType = p24.QuestionType,
Id = p27.Section.Id MedicalHistoryTemplateId = p24.MedicalHistoryTemplateId,
}, Id = p24.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>(), }).ToList<MedicalHistoryQuestionSDto>(),
Id = p27.Id Id = p23.Id
}; };
private static List<MedicalHistoryQuestion> funcMain1(List<MedicalHistoryQuestionSDto> p10) private static List<MedicalHistoryQuestion> funcMain1(List<MedicalHistoryQuestionSDto> p10)
@ -218,36 +163,20 @@ namespace DocuMed.Domain.Mappers
} }
private static Section funcMain2(SectionSDto p13, Section p14) private static List<MedicalHistoryQuestion> funcMain2(List<MedicalHistoryQuestionSDto> p13, List<MedicalHistoryQuestion> p14)
{ {
if (p13 == null) if (p13 == null)
{ {
return null; return null;
} }
Section result = p14 ?? new Section(); List<MedicalHistoryQuestion> result = new List<MedicalHistoryQuestion>(p13.Count);
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 i = 0;
int len = p15.Count; int len = p13.Count;
while (i < len) while (i < len)
{ {
MedicalHistoryQuestionSDto item = p15[i]; MedicalHistoryQuestionSDto item = p13[i];
result.Add(item == null ? null : new MedicalHistoryQuestion() result.Add(item == null ? null : new MedicalHistoryQuestion()
{ {
Question = item.Question, Question = item.Question,
@ -262,20 +191,20 @@ namespace DocuMed.Domain.Mappers
} }
private static List<MedicalHistoryQuestionSDto> funcMain4(List<MedicalHistoryQuestion> p20) private static List<MedicalHistoryQuestionSDto> funcMain3(List<MedicalHistoryQuestion> p18)
{ {
if (p20 == null) if (p18 == null)
{ {
return null; return null;
} }
List<MedicalHistoryQuestionSDto> result = new List<MedicalHistoryQuestionSDto>(p20.Count); List<MedicalHistoryQuestionSDto> result = new List<MedicalHistoryQuestionSDto>(p18.Count);
int i = 0; int i = 0;
int len = p20.Count; int len = p18.Count;
while (i < len) while (i < len)
{ {
MedicalHistoryQuestion item = p20[i]; MedicalHistoryQuestion item = p18[i];
result.Add(item == null ? null : new MedicalHistoryQuestionSDto() result.Add(item == null ? null : new MedicalHistoryQuestionSDto()
{ {
Question = item.Question, Question = item.Question,
@ -290,36 +219,20 @@ namespace DocuMed.Domain.Mappers
} }
private static SectionSDto funcMain5(Section p23, SectionSDto p24) private static List<MedicalHistoryQuestionSDto> funcMain4(List<MedicalHistoryQuestion> p21, List<MedicalHistoryQuestionSDto> p22)
{ {
if (p23 == null) if (p21 == null)
{ {
return null; return null;
} }
SectionSDto result = p24 ?? new SectionSDto(); List<MedicalHistoryQuestionSDto> result = new List<MedicalHistoryQuestionSDto>(p21.Count);
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 i = 0;
int len = p25.Count; int len = p21.Count;
while (i < len) while (i < len)
{ {
MedicalHistoryQuestion item = p25[i]; MedicalHistoryQuestion item = p21[i];
result.Add(item == null ? null : new MedicalHistoryQuestionSDto() result.Add(item == null ? null : new MedicalHistoryQuestionSDto()
{ {
Question = item.Question, Question = item.Question,

View File

@ -1,75 +0,0 @@
using System;
using System.Linq.Expressions;
using DocuMed.Domain.Dtos.SmallDtos;
using DocuMed.Domain.Entities.City;
namespace DocuMed.Domain.Mappers
{
public static partial class SectionMapper
{
public static Section AdaptToSection(this SectionSDto p1)
{
return p1 == null ? null : new Section()
{
Name = p1.Name,
Detail = p1.Detail,
UniversityId = p1.UniversityId,
Id = p1.Id
};
}
public static Section AdaptTo(this SectionSDto p2, Section p3)
{
if (p2 == null)
{
return null;
}
Section result = p3 ?? new Section();
result.Name = p2.Name;
result.Detail = p2.Detail;
result.UniversityId = p2.UniversityId;
result.Id = p2.Id;
return result;
}
public static Expression<Func<SectionSDto, Section>> ProjectToSection => p4 => new Section()
{
Name = p4.Name,
Detail = p4.Detail,
UniversityId = p4.UniversityId,
Id = p4.Id
};
public static SectionSDto AdaptToSDto(this Section p5)
{
return p5 == null ? null : new SectionSDto()
{
Name = p5.Name,
Detail = p5.Detail,
UniversityId = p5.UniversityId,
Id = p5.Id
};
}
public static SectionSDto AdaptTo(this Section p6, SectionSDto p7)
{
if (p6 == null)
{
return null;
}
SectionSDto result = p7 ?? new SectionSDto();
result.Name = p6.Name;
result.Detail = p6.Detail;
result.UniversityId = p6.UniversityId;
result.Id = p6.Id;
return result;
}
public static Expression<Func<Section, SectionSDto>> ProjectToSDto => p8 => new SectionSDto()
{
Name = p8.Name,
Detail = p8.Detail,
UniversityId = p8.UniversityId,
Id = p8.Id
};
}
}

View File

@ -1,75 +0,0 @@
using System;
using System.Linq.Expressions;
using DocuMed.Domain.Dtos.SmallDtos;
using DocuMed.Domain.Entities.City;
namespace DocuMed.Domain.Mappers
{
public static partial class UniversityMapper
{
public static University AdaptToUniversity(this UniversitySDto p1)
{
return p1 == null ? null : new University()
{
Name = p1.Name,
Address = p1.Address,
CityId = p1.CityId,
Id = p1.Id
};
}
public static University AdaptTo(this UniversitySDto p2, University p3)
{
if (p2 == null)
{
return null;
}
University result = p3 ?? new University();
result.Name = p2.Name;
result.Address = p2.Address;
result.CityId = p2.CityId;
result.Id = p2.Id;
return result;
}
public static Expression<Func<UniversitySDto, University>> ProjectToUniversity => p4 => new University()
{
Name = p4.Name,
Address = p4.Address,
CityId = p4.CityId,
Id = p4.Id
};
public static UniversitySDto AdaptToSDto(this University p5)
{
return p5 == null ? null : new UniversitySDto()
{
Name = p5.Name,
Address = p5.Address,
CityId = p5.CityId,
Id = p5.Id
};
}
public static UniversitySDto AdaptTo(this University p6, UniversitySDto p7)
{
if (p6 == null)
{
return null;
}
UniversitySDto result = p7 ?? new UniversitySDto();
result.Name = p6.Name;
result.Address = p6.Address;
result.CityId = p6.CityId;
result.Id = p6.Id;
return result;
}
public static Expression<Func<University, UniversitySDto>> ProjectToSDto => p8 => new UniversitySDto()
{
Name = p8.Name,
Address = p8.Address,
CityId = p8.CityId,
Id = p8.Id
};
}
}

View File

@ -12,15 +12,10 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Blazored.LocalStorage" Version="4.4.0" />
<PackageReference Include="Blazorise.LottieAnimation" Version="1.3.1" /> <PackageReference Include="Blazorise.LottieAnimation" Version="1.3.1" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.10" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.10" PrivateAssets="all" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.10" PrivateAssets="all" />
<PackageReference Include="MudBlazor" Version="6.10.0" /> <PackageReference Include="MudBlazor" Version="6.10.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Refit" Version="7.0.0" />
<PackageReference Include="Refit.HttpClientFactory" Version="7.0.0" />
<PackageReference Include="Refit.Newtonsoft.Json" Version="7.0.0" />
<PackageReference Include="Toolbelt.Blazor.PWA.Updater" Version="2.1.0.1" /> <PackageReference Include="Toolbelt.Blazor.PWA.Updater" Version="2.1.0.1" />
</ItemGroup> </ItemGroup>
@ -30,7 +25,6 @@
<ItemGroup> <ItemGroup>
<Folder Include="Models\ItemModels\" /> <Folder Include="Models\ItemModels\" />
<Folder Include="Helpers\" />
<Folder Include="wwwroot\assets\lotties\" /> <Folder Include="wwwroot\assets\lotties\" />
</ItemGroup> </ItemGroup>
@ -39,31 +33,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Using Include="Blazored.LocalStorage" />
<Using Include="DocuMed.Common.Extensions" />
<Using Include="DocuMed.Common.Models.Api" />
<Using Include="DocuMed.Domain.Dtos.LargDtos" />
<Using Include="DocuMed.Domain.Dtos.RequestDtos" />
<Using Include="DocuMed.Domain.Dtos.SmallDtos" />
<Using Include="DocuMed.Domain.Entities.City" />
<Using Include="DocuMed.Domain.Entities.MedicalHistory" />
<Using Include="DocuMed.Domain.Entities.MedicalHistoryTemplate" />
<Using Include="DocuMed.Domain.Enums" />
<Using Include="DocuMed.Domain.Models" />
<Using Include="DocuMed.PWA" />
<Using Include="DocuMed.PWA.Models" /> <Using Include="DocuMed.PWA.Models" />
<Using Include="DocuMed.PWA.Models.Api" /> <Using Include="DocuMed.PWA.Models.Entities" />
<Using Include="DocuMed.PWA.Services.RestServices" /> <Using Include="DocuMed.PWA.Models.Enums" />
<Using Include="DocuMed.PWA.Utilities" />
<Using Include="Microsoft.AspNetCore.Components" />
<Using Include="Microsoft.AspNetCore.Components.Web" />
<Using Include="Microsoft.AspNetCore.Components.WebAssembly.Hosting" />
<Using Include="Microsoft.IdentityModel.Tokens" />
<Using Include="MudBlazor" />
<Using Include="MudBlazor.Services" />
<Using Include="Refit" />
<Using Include="System.Reflection" />
<Using Include="Toolbelt.Blazor.Extensions.DependencyInjection" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,12 +0,0 @@
namespace DocuMed.PWA.Models;
public static class Address
{
public const string BaseAddress = "http://localhost:32770/api";
public const string AuthController = $"{BaseAddress}/auth";
public const string CityController = $"{BaseAddress}/city";
public const string UniversityController = $"{BaseAddress}/university";
public const string SectionController = $"{BaseAddress}/section";
public const string UserController = $"{BaseAddress}/user";
public const string MedicalHistoryTemplateController = $"{BaseAddress}/medicalhistory/template";
}

View File

@ -1,25 +0,0 @@
namespace DocuMed.PWA.Models.Api;
public class ApiResult
{
public ApiResult(bool isSuccess, ApiResultStatusCode statusCode, string message = null)
{
IsSuccess = isSuccess;
StatusCode = statusCode;
Message = message ?? statusCode.ToDisplay();
}
public bool IsSuccess { get; set; }
public ApiResultStatusCode StatusCode { get; set; }
public string Message { get; set; }
}
public class ApiResult<TData> : ApiResult where TData : class
{
public ApiResult(bool isSuccess, ApiResultStatusCode statusCode, TData data, string message = null) : base(isSuccess, statusCode, message)
{
Data = data;
}
public TData Data { get; set; }
}

View File

@ -1,33 +0,0 @@
namespace DocuMed.PWA.Models;
public class BaseViewModel
{
public bool IsProcessing { get; set; } = false;
public virtual void Initialize()
{
}
public virtual Task InitializeAsync()
{
return Task.CompletedTask;
}
}
public class BaseViewModel<TPageDto>
{
public bool IsProcessing { get; set; } = false;
public TPageDto PageDto { get; set; }
public BaseViewModel()
{
PageDto = Activator.CreateInstance<TPageDto>();
}
public virtual void Initialize()
{
}
public virtual Task InitializeAsync()
{
return Task.CompletedTask;
}
}

View File

@ -0,0 +1,11 @@
namespace DocuMed.PWA.Models.Entities;
public class MedicalHistory
{
public string Name { get; set; } = string.Empty;
public string Section { get; set; } = string.Empty;
public int Aag { get; set; }
public string CC { get; set; } = string.Empty;
public Gender Gender { get; set; }
}

View File

@ -0,0 +1,7 @@
namespace DocuMed.PWA.Models.Entities;
public class MedicalHistoryQuestion
{
public string Title { get; set; } = string.Empty;
public MedicalHistoryQuestionType Type { get; set; }
}

View File

@ -0,0 +1,10 @@
namespace DocuMed.PWA.Models.Entities
{
public class MedicalHistorySystemReview
{
public string Title { get; set; } = string.Empty;
public string System { get; set; } = string.Empty;
public bool IsSign { get; set; }
public bool IsSymptom { get; set; }
}
}

View File

@ -0,0 +1,7 @@
namespace DocuMed.PWA.Models.Entities;
public class MedicalHistoryTemplate
{
public string CC { get; set; } = string.Empty;
public string Section { get; set; } = string.Empty;
}

View File

@ -0,0 +1,11 @@
using System.ComponentModel.DataAnnotations;
namespace DocuMed.PWA.Models.Enums;
public enum Gender
{
[Display(Name = "مرد")]
Male,
[Display(Name = "زن")]
Female
}

View File

@ -0,0 +1,8 @@
namespace DocuMed.PWA.Models.Enums;
public enum MedicalHistoryQuestionType
{
Hourly,
Interrogatively,
YesOrNo
}

View File

@ -1,7 +0,0 @@
namespace DocuMed.PWA.Models;
public static class LocalStorageKeys
{
public const string Token = nameof(Token);
public const string UserInfo = nameof(UserInfo);
}

View File

@ -1,6 +1,5 @@
@page "/HomePage" @page "/HomePage"
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject IUserUtility UserUtility
<MudStack class="w-screen h-screen bg-[#356859]"> <MudStack class="w-screen h-screen bg-[#356859]">
@ -12,8 +11,8 @@
</MudImage> </MudImage>
</MudAvatar> </MudAvatar>
<MudStack class="justify-center "> <MudStack class="justify-center ">
<p class="font-bold text-lg text-white font-iranyekan">@ViewModel?.User.FullName</p> <p class="font-bold text-lg text-white font-iranyekan">امیرحسین خادمی</p>
<p class="-mt-3 text-white font-light font-iranyekan">@ViewModel?.User.PhoneNumber</p> <p class="-mt-3 text-white font-light font-iranyekan">09214802813</p>
</MudStack> </MudStack>
</MudStack> </MudStack>
<MudButton class="my-auto ml-5 mr-auto font-extrabold bg-white rounded-lg">اطفال</MudButton> <MudButton class="my-auto ml-5 mr-auto font-extrabold bg-white rounded-lg">اطفال</MudButton>
@ -29,7 +28,7 @@
</div> </div>
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-2 "> <div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-2 ">
@foreach (var item in @ViewModel.MedicalHistories) @foreach(var item in _medicalHistories)
{ {
<MedicalHistoryItemTemplate MedicalHistory="@item" /> <MedicalHistoryItemTemplate MedicalHistory="@item" />
} }
@ -75,22 +74,65 @@
</MudStack> </MudStack>
@code { @code {
private HomePageViewModel? ViewModel { get; set; }
public void ProfileClicked() => NavigationManager.NavigateTo("ProfilePage"); public void ProfileClicked() => NavigationManager.NavigateTo("ProfilePage");
public void CreateMedicalHistoryClicked() => NavigationManager.NavigateTo("MedicalHistoryActionPage"); public void CreateMedicalHistoryClicked() => NavigationManager.NavigateTo("MedicalHistoryActionPage");
public void MedicalHistoryTemplatesClicked() => NavigationManager.NavigateTo("MedicalHistoryTemplatesPage"); public void MedicalHistoryTemplatesClicked() => NavigationManager.NavigateTo("MedicalHistoryTemplatesPage");
public void MedicalOrdersClicked() => NavigationManager.NavigateTo("MedicalOrdersPage"); public void MedicalOrdersClicked() => NavigationManager.NavigateTo("MedicalOrdersPage");
protected override async Task OnInitializedAsync() private List<MedicalHistory> _medicalHistories = new List<MedicalHistory>();
protected override void OnInitialized()
{ {
ViewModel = new HomePageViewModel(UserUtility); _medicalHistories.Add(new MedicalHistory
await ViewModel.InitializeAsync(); {
await base.OnInitializedAsync(); Name = "امیرحسین معتمدی",
Aag = 35,
CC = "سردرد",
Section = "داخلی",
Gender = Gender.Male
});
_medicalHistories.Add(new MedicalHistory
{
Name = "محمد امینی",
Aag = 40,
CC = "معده درد",
Section = "داخلی",
Gender = Gender.Male
});
_medicalHistories.Add(new MedicalHistory
{
Name = "زیبا بروفه",
Aag = 20,
CC = "سوختگی",
Section = "سوختگی",
Gender = Gender.Female
});
_medicalHistories.Add(new MedicalHistory
{
Name = "روشنک فدایی",
Aag = 18,
CC = "دردسینه",
Section = "داخلی",
Gender = Gender.Female
});
_medicalHistories.Add(new MedicalHistory
{
Name = "سطلان محمدی",
Aag = 28,
CC = "روانی",
Section = "روان",
Gender = Gender.Male
});
_medicalHistories.Add(new MedicalHistory
{
Name = "سعید سعیدی",
Aag = 60,
CC = "بی هوشی",
Section = "داخلی",
Gender = Gender.Male
});
base.OnInitialized();
} }
} }

View File

@ -1,62 +0,0 @@
namespace DocuMed.PWA.Pages;
public class HomePageViewModel : BaseViewModel
{
private readonly IUserUtility _userUtility;
public HomePageViewModel(IUserUtility userUtility)
{
_userUtility = userUtility;
}
public List<MedicalHistorySDto> MedicalHistories { get; private set; } = new List<MedicalHistorySDto>();
public ApplicationUserSDto User { get; private set; } = new ApplicationUserSDto();
public override async Task InitializeAsync()
{
User = await _userUtility.GetUserAsync();
MedicalHistories.Add(new MedicalHistorySDto
{
FirstName = "امیرحسین ",
LastName = "معتمدی",
Age = 35,
ChiefComplaint = "سردرد",
Section = "داخلی",
});
MedicalHistories.Add(new MedicalHistorySDto
{
FirstName = "امیرحسین ",
LastName = "معتمدی",
Age = 35,
ChiefComplaint = "سردرد",
Section = "داخلی",
});
MedicalHistories.Add(new MedicalHistorySDto
{
FirstName = "امیرحسین ",
LastName = "معتمدی",
Age = 35,
ChiefComplaint = "سردرد",
Section = "داخلی",
});
MedicalHistories.Add(new MedicalHistorySDto
{
FirstName = "امیرحسین ",
LastName = "معتمدی",
Age = 35,
ChiefComplaint = "سردرد",
Section = "داخلی",
});
MedicalHistories.Add(new MedicalHistorySDto
{
FirstName = "امیرحسین ",
LastName = "معتمدی",
Age = 35,
ChiefComplaint = "سردرد",
Section = "داخلی",
});
await base.InitializeAsync();
}
}

View File

@ -1,10 +1,5 @@
@page "/" @page "/"
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject IRestWrapper RestWrapper
@inject ISnackbar Snackbar
@inject ILocalStorageService LocalStorage
@inject IUserUtility UserUtility
<style> <style>
.mud-input-label { .mud-input-label {
background-color: #FFFBE6; background-color: #FFFBE6;
@ -24,19 +19,16 @@
<div class="flex flex-col h-full mx-5"> <div class="flex flex-col h-full mx-5">
<div class="my-auto"> <div class="my-auto">
<div class="-mt-8"> <div class="-mt-8">
<dotlottie-player src="https://lottie.host/752358b3-21b0-4448-b8f4-0f2a2acc998b/DZAZuyYyol.json" <dotlottie-player
src="https://lottie.host/752358b3-21b0-4448-b8f4-0f2a2acc998b/DZAZuyYyol.json"
background="transparent" speed="1" class="m-auto w-60 h-60" loop autoplay /> background="transparent" speed="1" class="m-auto w-60 h-60" loop autoplay />
</div> </div>
<p class="mx-auto text-lg font-extrabold text-center font-iranyekan"> <p class="mx-auto text-lg font-extrabold text-center font-iranyekan">شرح حال نویسی بیمار راحت تر
شرح حال نویسی بیمار راحت تر
از از
همیشه همیشه</p>
</p> <p class="mx-auto text-xs text-center font-iranyekan">نرم افزار داکیومد با امکانات بسیار زیاد
<p class="mx-auto text-xs text-center font-iranyekan">
نرم افزار داکیومد با امکانات بسیار زیاد
خود خود
مثل شرح حال نویسی همراه و همیار همیشگی پزشکان محترم مثل شرح حال نویسی همراه و همیار همیشگی پزشکان محترم</p>
</p>
</div> </div>
</div> </div>
</MudCarouselItem> </MudCarouselItem>
@ -44,18 +36,15 @@
<div class="flex flex-col h-full mx-5"> <div class="flex flex-col h-full mx-5">
<div class="my-auto"> <div class="my-auto">
<div class="-mt-8 -mb-3"> <div class="-mt-8 -mb-3">
<dotlottie-player src="https://lottie.host/9ca6089d-388f-4eef-8050-8181c1d945a1/B7oM9NN9O4.json" <dotlottie-player
src="https://lottie.host/9ca6089d-388f-4eef-8050-8181c1d945a1/B7oM9NN9O4.json"
background="transparent" speed="1" class="m-auto w-60 h-60" loop autoplay /> background="transparent" speed="1" class="m-auto w-60 h-60" loop autoplay />
</div> </div>
<p class="mx-auto text-lg font-extrabold text-center font-iranyekan"> <p class="mx-auto text-lg font-extrabold text-center font-iranyekan">اوردر های شما همه در یک
اوردر های شما همه در یک اپلیکیشن</p>
اپلیکیشن <p class="mx-auto text-xs text-center font-iranyekan">نرم افزار داکیومد با امکانات بسیار زیاد
</p>
<p class="mx-auto text-xs text-center font-iranyekan">
نرم افزار داکیومد با امکانات بسیار زیاد
خود خود
مثل شرح حال نویسی همیار همیشگی پزشکان محترم مثل شرح حال نویسی همیار همیشگی پزشکان محترم</p>
</p>
</div> </div>
</div> </div>
</MudCarouselItem> </MudCarouselItem>
@ -63,17 +52,15 @@
<div class="flex flex-col h-full mx-5"> <div class="flex flex-col h-full mx-5">
<div class="my-auto"> <div class="my-auto">
<div class="-mt-8 -mb-10"> <div class="-mt-8 -mb-10">
<dotlottie-player src="https://lottie.host/87dfb50f-e91f-45c6-b8dc-d3a2436c533c/5DPvXG0W1t.json" <dotlottie-player
src="https://lottie.host/87dfb50f-e91f-45c6-b8dc-d3a2436c533c/5DPvXG0W1t.json"
background="transparent" speed="1" class="m-auto w-72 h-72" loop autoplay /> background="transparent" speed="1" class="m-auto w-72 h-72" loop autoplay />
</div> </div>
<p class="mx-auto text-lg font-extrabold text-center font-iranyekan"> <p class="mx-auto text-lg font-extrabold text-center font-iranyekan">نرم افزار جامع داکیـــــومد
نرم افزار جامع داکیـــــومد
</p> </p>
<p class="mx-auto text-xs text-center font-iranyekan"> <p class="mx-auto text-xs text-center font-iranyekan">نرم افزار داکیومد با امکانات بسیار زیاد
نرم افزار داکیومد با امکانات بسیار زیاد
خود خود
مثل تهیه پیشنویس شرح حال همراه همیشگی پزشکان محترم مثل تهیه پیشنویس شرح حال همراه همیشگی پزشکان محترم</p>
</p>
</div> </div>
</div> </div>
</MudCarouselItem> </MudCarouselItem>
@ -91,12 +78,12 @@
وارد کنید وارد کنید
</p> </p>
<MudForm @ref="_confirmPhoneNumberForm"> <MudForm @ref="confirmPhoneNumberForm">
<MudTextField Required="true" RequiredError="لطفا شماره تلفن را وارد کنید" <MudTextField Required="true" RequiredError="لطفا شماره تلفن را وارد کنید"
@bind-Value="@_phoneNumber" InputType="InputType.Telephone" T="string" Label="شماره تلفن همراه" @bind-Value="@phoneNumber" InputType="InputType.Telephone" T="string" Label="شماره تلفن همراه"
Variant="Variant.Outlined" /> Variant="Variant.Outlined" />
</MudForm> </MudForm>
<BaseButtonUi IsProcessing="_isProcessing" OnClickCallback="ConfirmPhoneNumber" Content="ثبت شماره تلفن" <BaseButtonUi OnClickCallback="ConfirmPhoneNumber" Content="ثبت شماره تلفن"
Icon="@Icons.Material.TwoTone.Phone" Color="Color.Secondary" Variant="Variant.Filled"> Icon="@Icons.Material.TwoTone.Phone" Color="Color.Secondary" Variant="Variant.Filled">
</BaseButtonUi> </BaseButtonUi>
<p class="mx-3 text-justify"> <p class="mx-3 text-justify">
@ -118,10 +105,10 @@
وارد کنید وارد کنید
</p> </p>
<MudTextField class="text-sm" T="string" InputType="InputType.Telephone" @bind-Value="@_verifyCode" Label="کد ارسال شده را وارد کنید" <MudTextField class="text-sm" T="string" Label="کد ارسال شده را وارد کنید"
Variant="Variant.Outlined" /> Variant="Variant.Outlined" />
<BaseButtonUi IsProcessing="_isProcessing" OnClickCallback="ConfirmVerifyCode" Content="تایید کد" <BaseButtonUi OnClickCallback="ConfirmVerifyCode" Content="تایید کد"
Icon="@Icons.Material.TwoTone.Verified" Color="Color.Secondary" Variant="Variant.Filled"> Icon="@Icons.Material.TwoTone.Verified" Color="Color.Secondary" Variant="Variant.Filled">
</BaseButtonUi> </BaseButtonUi>
@ -144,55 +131,18 @@
<div class="flex flex-col h-full"> <div class="flex flex-col h-full">
<MudStack class="w-screen p-5 my-auto font-iranyekan"> <MudStack class="w-screen p-5 my-auto font-iranyekan">
<p class="text-lg font-extrabold font-iranyekan">ثبت نام</p> <p class="text-lg font-extrabold font-iranyekan">ثبت نام</p>
<p class="text-xs text-justify"> <p class="text-xs text-justify">برای ثبت نام به اپلیکیشن داکیومد باید اطلاعات کامل خود را وارد
برای ثبت نام به اپلیکیشن داکیومد باید اطلاعات کامل خود را وارد
کنید کنید
</p> </p>
<MudForm @ref="_confirmSignUpForm"> <MudTextField class="text-sm" T="string" Label="نام" Variant="Variant.Outlined" />
<MudTextField Required="true" RequiredError="نام خود را وارد کنید" @bind-Value="@_signUpRequest.FirstName" class="text-sm my-5" T="string" Label="نام" Variant="Variant.Outlined" /> <MudTextField class="text-sm" T="string" Label="نام خانوادگی" Variant="Variant.Outlined" />
<MudTextField Required="true" RequiredError="نام خانوادگی خود را وارد کنید" @bind-Value="@_signUpRequest.LastName" class="text-sm my-5" T="string" Label="نام خانوادگی" Variant="Variant.Outlined" /> <MudTextField class="text-sm" T="string" @bind-Value="@phoneNumber" Label="شماره تلفن همراه"
<MudTextField class="text-sm my-5" T="string" @bind-Value="@_phoneNumber" Label="شماره تلفن همراه"
Variant="Variant.Outlined" /> Variant="Variant.Outlined" />
<MudAutocomplete T="string" Label="شهر شما" Variant="Variant.Outlined" />
<MudAutocomplete T="string" Label="دانشگاه" Variant="Variant.Outlined" />
<MudAutocomplete ToStringFunc="dto => dto.Name" class="my-5" @bind-Value="@_selectedCity" <BaseButtonUi OnClickCallback="ConfirmSignUp" Content="تکمیل ثبت نام"
SearchFunc="SearchCity"
T="CitySDto"
Label="شهر شما"
Variant="Variant.Outlined">
<ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false">
<MudListItem>
<div class="flex flex-row w-full mx-auto">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p>
</div>
</MudListItem>
</MudList>
</ProgressIndicatorInPopoverTemplate>
<ItemTemplate Context="e">
<p>@e.Name</p>
</ItemTemplate>
</MudAutocomplete>
<MudAutocomplete ToStringFunc="dto => dto.Name" class="my-5" @bind-Value="@_selectedUni" SearchFunc="SearchUniversity" T="UniversitySDto" Label="دانشگاه" Variant="Variant.Outlined">
<ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false">
<MudListItem>
<div class="flex flex-row w-full mx-auto">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p>
</div>
</MudListItem>
</MudList>
</ProgressIndicatorInPopoverTemplate>
<ItemTemplate Context="e">
<p>@e.Name</p>
</ItemTemplate>
</MudAutocomplete>
</MudForm>
<BaseButtonUi IsProcessing="_isProcessing" OnClickCallback="ConfirmSignUp" Content="تکمیل ثبت نام"
Icon="@Icons.Material.TwoTone.Login" Color="Color.Primary" Variant="Variant.Filled"> Icon="@Icons.Material.TwoTone.Login" Color="Color.Primary" Variant="Variant.Filled">
</BaseButtonUi> </BaseButtonUi>
</MudStack> </MudStack>
@ -204,188 +154,29 @@
@code @code
{ {
private List<CitySDto> _cities = new List<CitySDto>();
private List<UniversitySDto> _universities = new List<UniversitySDto>();
private SignUpRequestDto _signUpRequest = new SignUpRequestDto();
private MudCarousel<object>? _carousel; private MudCarousel<object>? _carousel;
private int _currentSignOnStep = 0; private int _currentSignOnStep = 0;
private MudForm? _confirmPhoneNumberForm; MudForm? confirmPhoneNumberForm;
private MudForm? _confirmSignUpForm;
private CitySDto _selectedCity;
private UniversitySDto _selectedUni;
private string _phoneNumber = string.Empty;
private string _verifyCode = string.Empty;
private bool _isProcessing = false;
private SignUpStatus _signUpStatus;
protected override async Task OnInitializedAsync() private string phoneNumber = string.Empty;
{
var token = await UserUtility.GetBearerTokenAsync();
if (!token.IsNullOrEmpty())
{
var user = await UserUtility.GetUserAsync();
if (user.SignUpStatus == SignUpStatus.SignUpCompleted)
NavigationManager.NavigateTo("HomePage");
if(user.SignUpStatus==SignUpStatus.PhoneNumberVerified)
{
_phoneNumber = user.PhoneNumber;
_currentSignOnStep = 2;
_carousel?.MoveTo(_currentSignOnStep);
}
}
await base.OnInitializedAsync();
}
private async Task ConfirmPhoneNumber() private void ConfirmPhoneNumber()
{ {
try confirmPhoneNumberForm?.Validate();
{ if (confirmPhoneNumberForm != null && confirmPhoneNumberForm.IsValid)
_confirmPhoneNumberForm?.Validate();
if (_confirmPhoneNumberForm is { IsValid: true })
{
_isProcessing = true;
_signUpStatus = await RestWrapper.AuthRestApi.GetVerifyCodeAsync(_phoneNumber);
_carousel?.MoveTo(++_currentSignOnStep); _carousel?.MoveTo(++_currentSignOnStep);
} }
} private void ConfirmVerifyCode()
catch (ApiException ex)
{ {
var exe = await ex.GetContentAsAsync<ApiResult>();
if (exe != null)
Snackbar.Add(exe.Message, Severity.Error);
Snackbar.Add(ex.Content, Severity.Error);
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
}
finally
{
_isProcessing = false;
}
}
private async Task ConfirmVerifyCode()
{
try
{
_isProcessing = true;
var rest = await RestWrapper.AuthRestApi.LoginWithVerifyCodeAsync(new LoginRequestDto { UserName = _phoneNumber, VerifyCode = _verifyCode });
await UserUtility.SetBearerTokenAsync(rest.BearerToken);
await UserUtility.SetUserAsync(rest.User);
if (_signUpStatus == SignUpStatus.SignUpCompleted)
NavigationManager.NavigateTo("HomePage");
else
_carousel?.MoveTo(++_currentSignOnStep); _carousel?.MoveTo(++_currentSignOnStep);
} }
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
if (exe != null)
Snackbar.Add(exe.Message, Severity.Error);
Snackbar.Add(ex.Content, Severity.Error);
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
}
finally
{
_isProcessing = false;
}
}
private void PhoneNumberRollBack() private void PhoneNumberRollBack()
{ {
_carousel?.MoveTo(--_currentSignOnStep); _carousel?.MoveTo(--_currentSignOnStep);
} }
private async Task ConfirmSignUp() private void ConfirmSignUp()
{ {
try
{
_confirmSignUpForm?.Validate();
if (_confirmSignUpForm is { IsValid: true })
{
_isProcessing = true;
_signUpRequest.CityId = _selectedCity.Id;
_signUpRequest.UniversityId = _selectedUni.Id;
var token = await UserUtility.GetBearerTokenAsync();
var rest = await RestWrapper.AuthRestApi.CompleteSignUpAsync(_signUpRequest, token);
await UserUtility.SetBearerTokenAsync(rest.BearerToken);
await UserUtility.SetUserAsync(rest.User);
NavigationManager.NavigateTo("HomePage"); NavigationManager.NavigateTo("HomePage");
} }
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
if (exe != null)
Snackbar.Add(exe.Message, Severity.Error);
Snackbar.Add(ex.Content, Severity.Error);
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
}
finally
{
_isProcessing = false;
}
}
private async Task<IEnumerable<CitySDto>> SearchCity(string city)
{
try
{
if (_cities.Count == 0)
{
var token = await UserUtility.GetBearerTokenAsync();
_cities = await RestWrapper.CrudDtoApiRest<City, CitySDto, Guid>(Address.CityController).ReadAll(0, token);
}
if (city.IsNullOrEmpty())
return _cities;
return _cities.Where(c => c.Name.Contains(city));
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
if (exe != null)
Snackbar.Add(exe.Message, Severity.Error);
Snackbar.Add(ex.Content, Severity.Error);
return _cities;
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
return _cities;
}
}
private async Task<IEnumerable<UniversitySDto>> SearchUniversity(string uni)
{
try
{
if (_universities.Count == 0)
{
var token = await UserUtility.GetBearerTokenAsync();
_universities = await RestWrapper.CrudDtoApiRest<University, UniversitySDto, Guid>(Address.UniversityController).ReadAll(0, token);
}
if (uni.IsNullOrEmpty())
return _universities;
return _universities.Where(c => c.Name.Contains(uni));
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
if (exe != null)
Snackbar.Add(exe.Message, Severity.Error);
Snackbar.Add(ex.Content, Severity.Error);
return _universities;
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
return _universities;
}
}
} }

View File

@ -1,6 +0,0 @@
namespace DocuMed.PWA.Pages;
public class IndexViewModel
{
}

View File

@ -1,111 +1,88 @@
@page "/MedicalHistoryTemplateActionPage" @page "/MedicalHistoryTemplateActionPage"
@page "/MedicalHistoryTemplateActionPage/{TemplateId}"
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject IRestWrapper RestWrapper
@inject IUserUtility UserUtility
@inject ISnackbar Snackbar
<BasePageUi Title="افزودن یک شرحال جدید" Description="لطفا اطلاعات بیمار را با دقت کامل وارد کنید"> <BasePageUi Title="افزودن یک شرحال جدید" Description="لطفا اطلاعات بیمار را با دقت کامل وارد کنید">
<div class="flex flex-col w-full h-full rounded-t-xl"> <div class="flex flex-col w-full h-full rounded-t-xl">
<MudCarousel class="w-full h-full overflow-x-hidden overflow-y-scroll" @ref="@ViewModel.Carousel" ShowArrows="false" <MudCarousel class="w-full h-full overflow-x-hidden overflow-y-scroll" @ref="_carousel" ShowArrows="false"
ShowBullets="false" EnableSwipeGesture="false" AutoCycle="false" TData="object"> ShowBullets="false" EnableSwipeGesture="false" AutoCycle="false" TData="object">
<MudCarouselItem> <MudCarouselItem>
<div class="flex flex-col w-full h-full"> <div class="flex flex-col w-full h-full">
<MedicalHistoryTemplateActionStep1 @bind-ChiefComplaint="@ViewModel.PageDto.ChiefComplaint" @bind-SelectedSection="@ViewModel.SelectedSelection" /> <MedicalHistoryTemplateActionStep1 />
</div> </div>
</MudCarouselItem> </MudCarouselItem>
<MudCarouselItem> <MudCarouselItem>
<div class="flex flex-col h-full"> <div class="flex flex-col h-full">
<MedicalHistoryTemplateActionStep2 PiQuestions="@ViewModel.PiQuestions" /> <MedicalHistoryTemplateActionStep2 />
</div> </div>
</MudCarouselItem> </MudCarouselItem>
<MudCarouselItem> <MudCarouselItem>
<div class="flex flex-col h-full"> <div class="flex flex-col h-full">
<MedicalHistoryTemplateActionStep3 PdhQuestions="@ViewModel.PdhQuestions" PshQuestions="@ViewModel.PshQuestions" /> <MedicalHistoryTemplateActionStep3 />
</div> </div>
</MudCarouselItem> </MudCarouselItem>
<MudCarouselItem> <MudCarouselItem>
<div class="flex flex-col h-full"> <div class="flex flex-col h-full">
<MedicalHistoryTemplateActionStep4 FamilyHistories="@ViewModel.FhQuestions" DrugHistories="@ViewModel.DhQuestions" AhMedicines="@ViewModel.AhQuestions" /> <MedicalHistoryTemplateActionStep4 />
</div> </div>
</MudCarouselItem> </MudCarouselItem>
<MudCarouselItem> <MudCarouselItem>
<div class="flex flex-col h-full"> <div class="flex flex-col h-full">
<MedicalHistoryTemplateActionStep5 VitalSigns="@ViewModel.VsQuestions" /> <MedicalHistoryTemplateActionStep5 />
</div> </div>
</MudCarouselItem> </MudCarouselItem>
<MudCarouselItem> <MudCarouselItem>
<div class="flex flex-col h-full"> <div class="flex flex-col h-full">
<MedicalHistoryTemplateActionStep6 SubmittedOnClick="@ViewModel.SubmitCreateTemplateAsync" /> <MedicalHistoryTemplateActionStep6 SubmittedOnClick="CompleteCreateMedicalHistory" />
</div> </div>
</MudCarouselItem> </MudCarouselItem>
</MudCarousel> </MudCarousel>
@if (!@ViewModel.MedicalHistorySubmitted) @if(!medicalHistorySubmited){
{
if (@ViewModel.IsProcessing)
{
<MudPaper class="bottom-0 left-0 fixed w-full bg-gray-700 px-3 pt-4 pb-3 rounded-t-xl flex flex-row"> <MudPaper class="bottom-0 left-0 fixed w-full bg-gray-700 px-3 pt-4 pb-3 rounded-t-xl flex flex-row">
<div class="flex flex-row w-full mx-auto"> @if (_currentStep == 4)
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Color="Color.Warning" Indeterminate="true" /> {
<p class="font-extrabold my-0 mr-7 text-lg text-[--color-medicalhistory]">منتظر بمانید</p> <MudButton @onclick="CompleteStepClicked" Variant="Variant.Filled" IconSize="Size.Large" StartIcon="@Icons.Material.Filled.ChevronRight" class="font-extrabold rounded-full bg-[--color-medicalhistory]">تـــکمیل</MudButton>
</div>
</MudPaper>
} }
else else
{ {
<MudPaper class="bottom-0 left-0 fixed w-full bg-gray-700 px-3 pt-4 pb-3 rounded-t-xl flex flex-row"> <MudButton @onclick="CompleteStepClicked" Variant="Variant.Outlined" IconSize="Size.Large"
@if (@ViewModel.CurrentStep == 4)
{
@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
{
<MudButton @onclick="@ViewModel.CompleteStepClicked" Variant="Variant.Outlined" IconSize="Size.Large"
StartIcon="@Icons.Material.Filled.ChevronRight" class="font-extrabold rounded-full border-[--color-medicalhistory] text-[--color-medicalhistory]"> StartIcon="@Icons.Material.Filled.ChevronRight" class="font-extrabold rounded-full border-[--color-medicalhistory] text-[--color-medicalhistory]">
مرحله بعد مرحله بعد
</MudButton> </MudButton>
} }
<p class="my-auto text-lg text-[--color-medicalhistory] font-extrabold text-center grow">@ViewModel.StepCounter</p> <p class="my-auto text-lg text-[--color-medicalhistory] font-extrabold text-center grow">@_stepCounter</p>
<MudButton @onclick="@ViewModel.RollBackStepClicked" IconSize="Size.Large" EndIcon="@Icons.Material.Filled.ChevronLeft" <MudButton @onclick="RollBackStepClicked" IconSize="Size.Large" EndIcon="@Icons.Material.Filled.ChevronLeft"
class="font-extrabold text-[--color-medicalhistory] rounded-full">مرحله قبل</MudButton> class="font-extrabold text-[--color-medicalhistory] rounded-full">مرحله قبل</MudButton>
</MudPaper> </MudPaper>
} }
}
</div> </div>
</BasePageUi> </BasePageUi>
@code { @code {
private MudCarousel<object>? _carousel;
[Parameter] private int _currentStep = 0;
public string TemplateId { get; set; } = string.Empty; private string _stepCounter = "1 / 5";
public MedicalHistoryTemplateActionPageViewModel ViewModel { get; set; } private bool medicalHistorySubmited = false;
protected override async Task OnInitializedAsync() private void CompleteStepClicked()
{ {
ViewModel = Guid.TryParse(TemplateId, out Guid templateId) ? _carousel?.MoveTo(++_currentStep);
new MedicalHistoryTemplateActionPageViewModel(NavigationManager, Snackbar, RestWrapper, UserUtility, templateId) _stepCounter = string.Format("{0} / 5", _currentStep + 1);
: new MedicalHistoryTemplateActionPageViewModel(NavigationManager, Snackbar, RestWrapper, UserUtility); if (_currentStep == 5)
await ViewModel.InitializeAsync(); medicalHistorySubmited = true;
await base.OnInitializedAsync(); }
private void RollBackStepClicked()
{
_carousel?.MoveTo(--_currentStep);
_stepCounter = string.Format("{0} / 5", _currentStep + 1);
} }
private void CompleteCreateMedicalHistory()
{
NavigationManager.NavigateTo("HomePage");
}
} }

View File

@ -1,196 +0,0 @@
namespace DocuMed.PWA.Pages;
public class MedicalHistoryTemplateActionPageViewModel : BaseViewModel<MedicalHistoryTemplateLDto>
{
private readonly NavigationManager _navigationManager;
private readonly ISnackbar _snackbar;
private readonly IRestWrapper _restWrapper;
private readonly IUserUtility _userUtility;
private readonly Guid _templateId;
public MudCarousel<object>? Carousel { get; set; }
public bool MedicalHistorySubmitted { get; set; }
public int CurrentStep { get; set; } = 0;
public string StepCounter { get; set; } = "1 / 5";
public bool IsEditing { get; set; } = false;
public List<MedicalHistoryQuestionSDto> PiQuestions { get; set; } = new();
public List<MedicalHistoryQuestionSDto> PdhQuestions { get; set; } = new();
public List<MedicalHistoryQuestionSDto> PshQuestions { get; set; } = new();
public List<MedicalHistoryQuestionSDto> FhQuestions { get; set; } = new();
public List<MedicalHistoryQuestionSDto> DhQuestions { get; set; } = new();
public List<MedicalHistoryQuestionSDto> AhQuestions { get; set; } = new();
public List<MedicalHistoryQuestionSDto> VsQuestions { get; set; } = new();
public SectionSDto? SelectedSelection { get; set; }
public MedicalHistoryTemplateActionPageViewModel(
NavigationManager navigationManager,
ISnackbar snackbar,
IRestWrapper restWrapper,
IUserUtility userUtility)
{
_navigationManager = navigationManager;
_snackbar = snackbar;
_restWrapper = restWrapper;
_userUtility = userUtility;
}
public MedicalHistoryTemplateActionPageViewModel(
NavigationManager navigationManager,
ISnackbar snackbar,
IRestWrapper restWrapper,
IUserUtility userUtility,
Guid templateId)
{
_navigationManager = navigationManager;
_snackbar = snackbar;
_restWrapper = restWrapper;
_userUtility = userUtility;
_templateId = templateId;
IsEditing = true;
}
public override async Task 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()
{
++CurrentStep;
StepCounter = $"{CurrentStep + 1} / 5";
if (CurrentStep == 5)
{
if (IsEditing)
await EditTemplateAsync();
else
await SubmitTemplateAsync();
MedicalHistorySubmitted = true;
}
Carousel?.MoveTo(CurrentStep);
}
public async Task SubmitTemplateAsync()
{
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)
.Create(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 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);
StepCounter = $"{CurrentStep + 1} / 5";
}
public void SubmitCreateTemplateAsync()
{
_navigationManager.NavigateTo("HomePage");
}
}

View File

@ -1,71 +1,13 @@
@inject IRestWrapper RestWrapper
@inject IUserUtility UserUtility
<MudStack class="my-auto text-center font-iranyekan"> <MudStack class="my-auto text-center font-iranyekan">
<p class="text-lg font-extrabold">افزودن پیش نویس شرح حال جدید</p> <p class="text-lg font-extrabold">افزودن پیش نویس شرح حال جدید</p>
<p class="text-center text-md"> <p class="text-center text-md">لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از
طراحان گرافیک است چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی طراحان گرافیک است چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی
مورد ده مورد ده</p>
</p>
<BasePartDivider Index="1" Title="شکایت اصلی بیمار" /> <BasePartDivider Index="1" Title="شکایت اصلی بیمار" />
<MudTextField T="string" Value="@ChiefComplaint" ValueChanged="async cc => {ChiefComplaint=cc; await ChiefComplaintChanged.InvokeAsync(ChiefComplaint); }" Label="شکایت اصلی بیمار ( CC )" Variant="Variant.Outlined" Margin="Margin.Normal" /> <MudAutocomplete T="string" Label="شکایت اصلی بیمار ( CC )" Variant="Variant.Outlined" Margin="Margin.Normal" />
<MudAutocomplete Value="@SelectedSection" T="SectionSDto" Label="بخش بیمار" Variant="Variant.Outlined" <MudAutocomplete T="string" Label="بخش بیمار" Variant="Variant.Outlined" />
ToStringFunc="dto => dto.Name"
SearchFunc="@SearchSection"
ValueChanged="async dto => { SelectedSection=dto; await SelectedSectionChanged.InvokeAsync(SelectedSection); }">
<ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false">
<MudListItem>
<div class="flex flex-row w-full mx-auto">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p>
</div>
</MudListItem>
</MudList>
</ProgressIndicatorInPopoverTemplate>
<ItemTemplate Context="e">
<p>@e.Name</p>
</ItemTemplate>
</MudAutocomplete>
</MudStack> </MudStack>
@code { @code {
[Parameter]
public string ChiefComplaint { get; set; } = string.Empty;
[Parameter]
public EventCallback<string> ChiefComplaintChanged { get; set; }
[Parameter]
public SectionSDto SelectedSection { get; set; } = new();
[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)
{
try
{
var token = await UserUtility.GetBearerTokenAsync();
var user = await UserUtility.GetUserAsync();
Sections = await RestWrapper.SectionRestApi.GetByUniversityAsync(user.UniversityId, token);
if (section.IsNullOrEmpty())
return Sections;
return Sections.Where(c => c.Name.Contains(section));
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
return Sections;
}
catch (Exception e)
{
return Sections;
}
}
} }

View File

@ -1,15 +1,14 @@
@using DocuMed.Domain.Entities.MedicalHistoryTemplate
<MudStack class="pb-20 font-iranyekan"> <MudStack class="pb-20 font-iranyekan">
<BasePartDivider Index="2" Title="تاریخچه بیماری فعلی ( PI )" /> <BasePartDivider Index="2" Title="تاریخچه بیماری فعلی ( PI )" />
<MudAlert Severity="Severity.Info">شما میتوانید سوال های هر بخش ها را به صورت کامل تنظیم نمایید</MudAlert> <MudAlert Severity="Severity.Info">شما میتوانید سوال های هر بخش ها را به صورت کامل تنظیم نمایید</MudAlert>
@foreach (var item in PiQuestions) @foreach (var item in Questions)
{ {
<MedicalHistoryQuestionTemplateItemTemplate Question="@item" QuestionRemoved="RemoveQuestion" /> <MedicalHistoryQuestionTemplateItemTemplate QuestionRemoved="RemoveQuestion" />
} }
<MudSelect @bind-Value="@_questionType" T="MedicalHistoryQuestionType" ToStringFunc="(e=>e.ToDisplay())" Label="نوع سوال" Variant="Variant.Outlined"> <MudSelect @bind-Value="@_questionType" T="MedicalHistoryQuestionType" Label="نوع سوال" Variant="Variant.Outlined">
<MudSelectItem Value="@MedicalHistoryQuestionType.Hourly" /> <MudSelectItem Value="@MedicalHistoryQuestionType.Hourly" />
<MudSelectItem Value="@MedicalHistoryQuestionType.Interrogatively" /> <MudSelectItem Value="@MedicalHistoryQuestionType.Interrogatively" />
@ -17,11 +16,10 @@
</MudSelect> </MudSelect>
<MudTextField @bind-Value="@_questionTitle" Margin="Margin.None" T="string" Label="عنوان سوال" Lines="1" <MudTextField @bind-Value="@_questionTitle" Margin="Margin.None" T="string" Label="عنوان سوال" Lines="1"
Variant="Variant.Outlined" /> Variant="Variant.Outlined" />
<MudAutocomplete T="string" Label="وابستگی به سوال قبلی" Variant="Variant.Outlined" />
@* <MudAutocomplete T="string" Label="وابستگی به سوال قبلی" Variant="Variant.Outlined" /> *@ <MudButton @onclick="AddQuestion" Variant="Variant.Filled" IconSize="Size.Large" DisableElevation="true"
class="font-extrabold text-lg rounded-md py-4 bg-[--color-medicalhistory] text-gray-800">
<MudButton @onclick="AddQuestion" Variant="Variant.Filled" DisableElevation="true"
class="font-extrabold text-lg right-0 rounded-md py-3 bg-[--color-medicalhistory] text-gray-800">
+ افزودن + افزودن
</MudButton> </MudButton>
@ -31,24 +29,22 @@
@code @code
{ {
private MedicalHistoryQuestionType _questionType; private MedicalHistoryQuestionType _questionType;
private string EnumConvertFunc() => string.Empty;
private string _questionTitle = string.Empty; private string _questionTitle = string.Empty;
private MedicalHistoryPart _questionPart = MedicalHistoryPart.PresentIllness;
[Parameter]
public List<MedicalHistoryQuestionSDto> PiQuestions { get; set; } = new();
private void RemoveQuestion(MedicalHistoryQuestionSDto question) public List<MedicalHistoryQuestion> Questions { get; set; } = new();
private void RemoveQuestion(MedicalHistoryQuestion question)
{ {
PiQuestions.Remove(question); Questions.Remove(question);
} }
private void AddQuestion() private void AddQuestion()
{ {
PiQuestions.Add(new MedicalHistoryQuestionSDto Questions.Add(new MedicalHistoryQuestion
{ {
Part = _questionPart, Title = _questionTitle,
Question = _questionTitle, Type = _questionType
QuestionType = _questionType
}); });
_questionTitle = string.Empty;
} }
} }

View File

@ -1,36 +1,34 @@
@using DocuMed.Domain.Entities.MedicalHistoryTemplate
<MudStack class="pb-20 font-iranyekan"> <MudStack class="pb-20 font-iranyekan">
<BasePartDivider Index="3" Title="تاریخچه بیماری قبلی ( PI )" /> <BasePartDivider Index="3" Title="تاریخچه بیماری قبلی ( PI )" />
@foreach (var item in PdhQuestions) @foreach (var item in PIQuestions)
{ {
<MedicalHistoryQuestionTemplateItemTemplate Question="item" QuestionRemoved="RemovePiQuestion" /> <MedicalHistoryQuestionTemplateItemTemplate Question="item" QuestionRemoved="RemovePIQuestion" />
} }
<MudSelect @bind-Value="@_pdhQuestionType" T="MedicalHistoryQuestionType" ToStringFunc="(e=>e.ToDisplay())" Label="نوع سوال" Variant="Variant.Outlined"> <MudSelect @bind-Value="@_piQuestionType" T="MedicalHistoryQuestionType" Label="نوع سوال" Variant="Variant.Outlined">
<MudSelectItem Value="@MedicalHistoryQuestionType.Hourly" /> <MudSelectItem Value="@MedicalHistoryQuestionType.Hourly" />
<MudSelectItem Value="@MedicalHistoryQuestionType.Interrogatively" /> <MudSelectItem Value="@MedicalHistoryQuestionType.Interrogatively" />
<MudSelectItem Value="@MedicalHistoryQuestionType.YesOrNo" /> <MudSelectItem Value="@MedicalHistoryQuestionType.YesOrNo" />
</MudSelect> </MudSelect>
<MudTextField @bind-Value="@_pdhQuestionTitle" Margin="Margin.None" T="string" Label="عنوان سوال" Lines="1" <MudTextField @bind-Value="@_piQuestionTitle" Margin="Margin.None" T="string" Label="عنوان سوال" Lines="1"
Variant="Variant.Outlined" /> Variant="Variant.Outlined" />
<MudButton @onclick="AddPiQuestion" Variant="Variant.Filled" IconSize="Size.Large" DisableElevation="true" <MudButton @onclick="AddPIQuestion" Variant="Variant.Filled" IconSize="Size.Large" DisableElevation="true"
class="font-extrabold text-lg rounded-md py-4 bg-[--color-medicalhistory] text-gray-800"> class="font-extrabold text-lg rounded-md py-4 bg-[--color-medicalhistory] text-gray-800">
+ افزودن + افزودن
</MudButton> </MudButton>
<BasePartDivider Index="4" class="mt-9" Title="تاریخچه جراحی های قبلی ( PSH )" /> <BasePartDivider Index="4" class="mt-9" Title="تاریخچه جراحی های قبلی ( PSH )" />
@foreach (var item in PshQuestions) @foreach (var item in PIQuestions)
{ {
<MedicalHistoryQuestionTemplateItemTemplate Question="item" QuestionRemoved="RemovePshQuestion" /> <MedicalHistoryQuestionTemplateItemTemplate Question="item" QuestionRemoved="RemovePSHQuestion" />
} }
<MudSelect @bind-Value="@_pshQuestionType" <MudSelect @bind-Value="@_pshQuestionType"
ToStringFunc="(e=>e.ToDisplay())"
T="MedicalHistoryQuestionType" T="MedicalHistoryQuestionType"
Label="نوع سوال" Label="نوع سوال"
Variant="Variant.Outlined"> Variant="Variant.Outlined">
@ -45,7 +43,7 @@
Label="عنوان سوال" Lines="1" Label="عنوان سوال" Lines="1"
Variant="Variant.Outlined" /> Variant="Variant.Outlined" />
<MudButton @onclick="AddPshQuestion" Variant="Variant.Filled" IconSize="Size.Large" DisableElevation="true" <MudButton @onclick="AddPSHQuestion" Variant="Variant.Filled" IconSize="Size.Large" DisableElevation="true"
class="font-extrabold text-lg rounded-md py-4 bg-[--color-medicalhistory] text-gray-800"> class="font-extrabold text-lg rounded-md py-4 bg-[--color-medicalhistory] text-gray-800">
+ افزودن + افزودن
</MudButton> </MudButton>
@ -55,45 +53,37 @@
@code @code
{ {
[Parameter] private string _piQuestionTitle = string.Empty;
public List<MedicalHistoryQuestionSDto> PdhQuestions { get; set; } = new(); private MedicalHistoryQuestionType _piQuestionType;
[Parameter]
public List<MedicalHistoryQuestionSDto> PshQuestions { get; set; } = new();
private string _pdhQuestionTitle = string.Empty;
private MedicalHistoryQuestionType _pdhQuestionType;
private string _pshQuestionTitle = string.Empty; private string _pshQuestionTitle = string.Empty;
private MedicalHistoryQuestionType _pshQuestionType; private MedicalHistoryQuestionType _pshQuestionType;
public List<MedicalHistoryQuestion> PIQuestions { get; set; } = new();
public List<MedicalHistoryQuestion> PSHQuestions { get; set; } = new();
private void RemovePiQuestion(MedicalHistoryQuestionSDto question) private void RemovePIQuestion(MedicalHistoryQuestion question)
{ {
PdhQuestions.Remove(question); PIQuestions.Remove(question);
} }
private void AddPiQuestion() private void AddPIQuestion()
{ {
PdhQuestions.Add(new MedicalHistoryQuestionSDto PIQuestions.Add(new MedicalHistoryQuestion
{ {
QuestionType = _pdhQuestionType, Title = _piQuestionTitle,
Part = MedicalHistoryPart.PastDiseasesHistory, Type = _piQuestionType
Question = _pdhQuestionTitle
}); });
_pdhQuestionTitle = string.Empty;
} }
private void RemovePshQuestion(MedicalHistoryQuestionSDto question) private void RemovePSHQuestion(MedicalHistoryQuestion question)
{ {
PshQuestions.Remove(question); PSHQuestions.Remove(question);
} }
private void AddPshQuestion() private void AddPSHQuestion()
{ {
PshQuestions.Add(new MedicalHistoryQuestionSDto PSHQuestions.Add(new MedicalHistoryQuestion
{ {
Part = MedicalHistoryPart.PastSurgeryHistory, Title = _pshQuestionTitle,
QuestionType = _pshQuestionType, Type = _pshQuestionType
Question = _pshQuestionTitle
}); });
_pshQuestionTitle = string.Empty;
} }
} }

View File

@ -1,4 +1,3 @@
@using DocuMed.Domain.Entities.MedicalHistoryTemplate
<MudStack class="pb-20 font-iranyekan"> <MudStack class="pb-20 font-iranyekan">
<BasePartDivider Index="5" Title="تاریخچه بیماری های خانوادگی ( FH )" /> <BasePartDivider Index="5" Title="تاریخچه بیماری های خانوادگی ( FH )" />
@ -7,8 +6,7 @@
<MedicalHistoryQuestionTemplateItemTemplate Question="item" QuestionRemoved="RemoveFamilyHistory" /> <MedicalHistoryQuestionTemplateItemTemplate Question="item" QuestionRemoved="RemoveFamilyHistory" />
} }
<MudSelect @bind-Value="@_familyHistoryQuestionType" <MudSelect @bind-Value="@_familyHistoryQuestionType" T="MedicalHistoryQuestionType" Label="نوع سوال" Variant="Variant.Outlined">
ToStringFunc="(e=>e.ToDisplay())" T="MedicalHistoryQuestionType" Label="نوع سوال" Variant="Variant.Outlined">
<MudSelectItem Value="@MedicalHistoryQuestionType.Hourly" /> <MudSelectItem Value="@MedicalHistoryQuestionType.Hourly" />
<MudSelectItem Value="@MedicalHistoryQuestionType.Interrogatively" /> <MudSelectItem Value="@MedicalHistoryQuestionType.Interrogatively" />
@ -30,7 +28,7 @@
{ {
<MudCard @onclick="()=>RemoveDrugHistory(item)" class="text-center"> <MudCard @onclick="()=>RemoveDrugHistory(item)" class="text-center">
<MudCardContent> <MudCardContent>
<p class="font-extrabold text-gray-600 text-md">@item.Question</p> <p class="font-extrabold text-gray-600 text-md">@item</p>
</MudCardContent> </MudCardContent>
</MudCard> </MudCard>
} }
@ -47,11 +45,11 @@
<BasePartDivider Index="7" class="mt-9" Title="مواد مصرفی ( HH )" /> <BasePartDivider Index="7" class="mt-9" Title="مواد مصرفی ( HH )" />
<div class="grid mx-1 gap-2 grid-cols-2 md:grid-cols-4"> <div class="grid mx-1 gap-2 grid-cols-2 md:grid-cols-4">
@foreach (var item in AhMedicines) @foreach (var item in HHMedicines)
{ {
<MudCard @onclick="()=>RemoveHhMedicine(item)" class="text-center"> <MudCard @onclick="()=>RemoveHHMedicine(item)" class="text-center">
<MudCardContent> <MudCardContent>
<p class="font-extrabold text-gray-600 text-md">@item.Question</p> <p class="font-extrabold text-gray-600 text-md">@item</p>
</MudCardContent> </MudCardContent>
</MudCard> </MudCard>
} }
@ -60,7 +58,7 @@
<div class="flex flex-row"> <div class="flex flex-row">
<MudTextField @bind-Value="@_hhName" class="grow" T="string" Label="نام دارو مورد نظر" Variant="Variant.Outlined" /> <MudTextField @bind-Value="@_hhName" class="grow" T="string" Label="نام دارو مورد نظر" Variant="Variant.Outlined" />
<MudButton Variant="Variant.Outlined" @onclick="AddHhMedicine" Color="Color.Info" IconSize="Size.Large" DisableElevation="false" class="mx-2 mt-1.5 mb-0.5 pt-2 text-4xl rounded-md"> <MudButton Variant="Variant.Outlined" @onclick="AddHHMedicine" Color="Color.Info" IconSize="Size.Large" DisableElevation="false" class="mx-2 mt-1.5 mb-0.5 pt-2 text-4xl rounded-md">
+ +
</MudButton> </MudButton>
</div> </div>
@ -71,58 +69,45 @@
@code { @code {
private string _familyHistoryQuestionTitle = string.Empty; private string _familyHistoryQuestionTitle = string.Empty;
private MedicalHistoryQuestionType _familyHistoryQuestionType; private MedicalHistoryQuestionType _familyHistoryQuestionType;
[Parameter]
public List<MedicalHistoryQuestionSDto> FamilyHistories { get; set; } = new(); public List<MedicalHistoryQuestion> FamilyHistories { get; set; } = new();
private void RemoveFamilyHistory(MedicalHistoryQuestionSDto question)
private void RemoveFamilyHistory(MedicalHistoryQuestion question)
{ {
FamilyHistories.Remove(question); FamilyHistories.Remove(question);
} }
private void AddFamilyHistory() private void AddFamilyHistory()
{ {
FamilyHistories.Add(new MedicalHistoryQuestionSDto FamilyHistories.Add(new MedicalHistoryQuestion
{ {
Question = _familyHistoryQuestionTitle, Title = _familyHistoryQuestionTitle,
QuestionType = _familyHistoryQuestionType, Type = _familyHistoryQuestionType
Part = MedicalHistoryPart.FamilyHistory
}); });
_familyHistoryQuestionTitle = String.Empty;
} }
private string _drugHistoryName = string.Empty; private string _drugHistoryName = string.Empty;
[Parameter] public List<string> DrugHistories { get; set; } = new();
public List<MedicalHistoryQuestionSDto> DrugHistories { get; set; } = new(); private void RemoveDrugHistory(string medicine)
private void RemoveDrugHistory(MedicalHistoryQuestionSDto medicine)
{ {
DrugHistories.Remove(medicine); DrugHistories.Remove(medicine);
} }
private void AddDrugHistory() private void AddDrugHistory()
{ {
DrugHistories.Add(new MedicalHistoryQuestionSDto DrugHistories.Add(_drugHistoryName);
{
Question = _drugHistoryName,
QuestionType = MedicalHistoryQuestionType.Selective,
Part = MedicalHistoryPart.DrugHistory
});
_drugHistoryName = string.Empty; _drugHistoryName = string.Empty;
} }
private string _hhName = string.Empty; private string _hhName = string.Empty;
[Parameter] public List<string> HHMedicines { get; set; } = new();
public List<MedicalHistoryQuestionSDto> AhMedicines { get; set; } = new(); private void RemoveHHMedicine(string medicine)
private void RemoveHhMedicine(MedicalHistoryQuestionSDto medicine)
{ {
AhMedicines.Remove(medicine); HHMedicines.Remove(medicine);
} }
private void AddHhMedicine() private void AddHHMedicine()
{ {
AhMedicines.Add(new MedicalHistoryQuestionSDto HHMedicines.Add(_hhName);
{
Part = MedicalHistoryPart.AddictionHistory,
Question = _hhName,
QuestionType = MedicalHistoryQuestionType.Selective
});
_hhName = string.Empty; _hhName = string.Empty;
} }
} }

View File

@ -1,18 +1,18 @@
<MudStack class="pb-20 font-iranyekan"> <MudStack class="pb-20 font-iranyekan">
<BasePartDivider Index="8" Title="ظاهر کلی بیمار ( GA )" /> <BasePartDivider Index="8" Title="ظاهر کلی بیمار ( GA )" />
<div class="grid mx-1 gap-2 grid-cols-1 md:grid-cols-2"> <div class="grid mx-1 gap-2 grid-cols-1 md:grid-cols-2">
@foreach (var item in VitalSigns) @foreach (var item in GeneralAppearances)
{ {
<MudCard @onclick="()=>RemoveGeneralAppearance(item)" class="text-center"> <MudCard @onclick="()=>RemoveGeneralAppearance(item)" class="text-center">
<MudCardContent> <MudCardContent>
<p class="font-extrabold text-gray-600 text-md">@item.Question</p> <p class="font-extrabold text-gray-600 text-md">@item</p>
</MudCardContent> </MudCardContent>
</MudCard> </MudCard>
} }
</div> </div>
<div class="flex flex-row"> <div class="flex flex-row">
<MudTextField @bind-Value="@_vitalSign" class="grow" T="string" Label="نام دارو مورد نظر" Variant="Variant.Outlined" /> <MudTextField @bind-Value="@_generalAppearance" class="grow" T="string" Label="نام دارو مورد نظر" Variant="Variant.Outlined" />
<MudButton Variant="Variant.Outlined" @onclick="AddGeneralAppearance" Color="Color.Info" IconSize="Size.Large" DisableElevation="false" class="mx-2 mt-1.5 mb-0.5 pt-2 text-4xl rounded-md"> <MudButton Variant="Variant.Outlined" @onclick="AddGeneralAppearance" Color="Color.Info" IconSize="Size.Large" DisableElevation="false" class="mx-2 mt-1.5 mb-0.5 pt-2 text-4xl rounded-md">
+ +
@ -27,18 +27,18 @@
<div class="flex flex-row"> <div class="flex flex-row">
<div> <div>
<p>@item.Question</p> <p>@item.Title</p>
<div class="flex flex-row"> <div class="flex flex-row">
<MudPaper Elevation="0" Class="mx-1 mt-1 bg-gray-200 w-fit text-center rounded-full py-0.5 px-3 text-gray-800 text-xs"> <MudPaper Elevation="0" Class="mx-1 mt-1 bg-gray-200 w-fit text-center rounded-full py-0.5 px-3 text-gray-800 text-xs">
معده @item.System
</MudPaper> </MudPaper>
@if(true) @if(@item.IsSign)
{ {
<MudPaper Elevation="0" Class="mx-1 mt-1 bg-gray-200 w-fit text-center rounded-full py-0.5 px-3 text-gray-800 text-xs"> <MudPaper Elevation="0" Class="mx-1 mt-1 bg-gray-200 w-fit text-center rounded-full py-0.5 px-3 text-gray-800 text-xs">
Sign Sign
</MudPaper> </MudPaper>
} }
@if (true) @if (@item.IsSymptom)
{ {
<MudPaper Elevation="0" Class="mx-1 mt-1 bg-gray-200 w-fit text-center rounded-full py-0.5 px-3 text-gray-800 text-xs"> <MudPaper Elevation="0" Class="mx-1 mt-1 bg-gray-200 w-fit text-center rounded-full py-0.5 px-3 text-gray-800 text-xs">
Symptom Symptom
@ -71,42 +71,36 @@
</MudStack> </MudStack>
@code { @code {
private string _vitalSign = string.Empty; private string _generalAppearance = string.Empty;
[Parameter] public List<string> GeneralAppearances { get; set; } = new();
public List<MedicalHistoryQuestionSDto> VitalSigns { get; set; } = new(); private void RemoveGeneralAppearance(string medicine)
private void RemoveGeneralAppearance(MedicalHistoryQuestionSDto generalAppearance)
{ {
VitalSigns.Remove(generalAppearance); GeneralAppearances.Remove(medicine);
} }
private void AddGeneralAppearance() private void AddGeneralAppearance()
{ {
VitalSigns.Add(new MedicalHistoryQuestionSDto GeneralAppearances.Add(_generalAppearance);
{ _generalAppearance = string.Empty;
Question = _vitalSign,
QuestionType = MedicalHistoryQuestionType.Selective,
Part = MedicalHistoryPart.VitalSign
});
_vitalSign = string.Empty;
} }
private string _reviewOfSystemTitle = string.Empty; private string _reviewOfSystemTitle = string.Empty;
private string _reviewOfSystemSystem = string.Empty; private string _reviewOfSystemSystem = string.Empty;
private bool _reviewOfSystemIsSign; private bool _reviewOfSystemIsSign;
private bool _reviewOfSystemIsSymptom; private bool _reviewOfSystemIsSymptom;
public List<MedicalHistoryQuestionSDto> ReviewOfSystems { get; set; } = new(); public List<MedicalHistorySystemReview> ReviewOfSystems { get; set; } = new();
private void RemoveReviewOfSystems(MedicalHistoryQuestionSDto review) private void RemoveReviewOfSystems(MedicalHistorySystemReview review)
{ {
ReviewOfSystems.Remove(review); ReviewOfSystems.Remove(review);
} }
private void AddReviewOfSystems() private void AddReviewOfSystems()
{ {
// ReviewOfSystems.Add(new MedicalHistorySystemReview ReviewOfSystems.Add(new MedicalHistorySystemReview
// { {
// Title = _reviewOfSystemTitle, Title = _reviewOfSystemTitle,
// IsSign = _reviewOfSystemIsSign, IsSign = _reviewOfSystemIsSign,
// IsSymptom = _reviewOfSystemIsSymptom, IsSymptom = _reviewOfSystemIsSymptom,
// System = _reviewOfSystemSystem System = _reviewOfSystemSystem
// }); });
_reviewOfSystemTitle = string.Empty; _reviewOfSystemTitle = string.Empty;
} }
} }

View File

@ -1,50 +1,63 @@
@page "/MedicalHistoryTemplatesPage" @page "/MedicalHistoryTemplatesPage"
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject ISnackbar Snackbar
@inject IRestWrapper RestWrapper
@inject IUserUtility UserUtility
<BasePageUi Title="پیش نویس های" Description="پیش نویس های شرح های سرعت و دقت شما را افزایش میدهد"> <BasePageUi Title="پیش نویس های شرح حال نویسی" Description="پیش نویس های شرح های سرعت و دقت شما را افزایش میدهد">
<MudStack> <MudStack>
<div class="flex flex-row mr-1 mt-5"> <div class="flex flex-row mr-1 mt-5">
<div> <div>
<p class="font-extrabold text-[#356859]">تمامی پیش نویس های شما</p> <p class="font-extrabold text-[#356859]">تمامی پیش نویس های شما</p>
<p class="text-xs font-light ">شما میتوانید پیش نویس جدید اضافه کنید</p> <p class="text-xs font-light ">شما میتوانید پیش نویس جدید اضافه کنید</p>
</div> </div>
<MudButton @onclick="ViewModel.CreateMedicalHistoryTemplateClicked" DisableElevation="false" class="text-[#356859] my-auto mr-auto font-extrabold bg-white rounded-lg drop-shadow-md">+ افزودن</MudButton> <MudButton @onclick="CreateMedicalHistoryTemplateClicked" DisableElevation="false" class="text-[#356859] my-auto mr-auto font-extrabold bg-white rounded-lg drop-shadow-md">+ افزودن</MudButton>
</div> </div>
<MudTextField class="text-sm" InputType="InputType.Search" T="string" Label="جست جو پیش نویس" Variant="Variant.Outlined"/> <MudTextField class="text-sm" InputType="InputType.Search" T="string" Label="جست جو پیش نویس" Variant="Variant.Outlined"/>
<div class="grid grid-cols-2 gap-3 w-full sm:grid-cols-3 md:grid-cols-4"> <div class="grid grid-cols-2 gap-3 sm:grid-cols-3 md:grid-cols-4">
@if (@ViewModel.IsProcessing)
{
@for (int i = 0; i < 4; i++)
{
<MudCard class="bg-transparent p-4 rounded-lg" Elevation="0">
<MudSkeleton class="mb-4 mx-10 h-10" SkeletonType="SkeletonType.Rectangle" Animation="Animation.Wave" />
<MudSkeleton Animation="Animation.Wave" />
</MudCard>
}
}
else
{
@foreach (var item in ViewModel.PageDto) @foreach(var item in _medicalHistoryTemplates)
{ {
<MedicalHistoryTemplateItemTemplate Clicked="ViewModel.MedicalHistoryTemplateClicked" MedicalHistoryTemplate="@item" /> <MedicalHistoryTemplateItemTemplate Clicked="MedicalHistoryTemplateClicked" MedicalHistoryTemplate="@item" />
} }
}
</div> </div>
</MudStack> </MudStack>
</BasePageUi> </BasePageUi>
@code @code
{ {
public MedicalHistoryTemplatesPageViewModel ViewModel { get; set; } private void CreateMedicalHistoryTemplateClicked() => NavigationManager.NavigateTo("MedicalHistoryTemplateActionPage");
protected override async Task OnInitializedAsync() private void MedicalHistoryTemplateClicked() => NavigationManager.NavigateTo("MedicalHistoryTemplateActionPage");
private List<MedicalHistoryTemplate> _medicalHistoryTemplates = new();
protected override void OnInitialized()
{ {
ViewModel = new MedicalHistoryTemplatesPageViewModel(NavigationManager, UserUtility, RestWrapper, Snackbar); _medicalHistoryTemplates.Add(new MedicalHistoryTemplate
await ViewModel.InitializeAsync(); {
await base.OnInitializedAsync(); CC = "سردرد",
Section = "داخلی"
});
_medicalHistoryTemplates.Add(new MedicalHistoryTemplate
{
CC = "بدن درد",
Section = "فیزیو"
});
_medicalHistoryTemplates.Add(new MedicalHistoryTemplate
{
CC = "بی خوابی",
Section = "داخلی"
});
_medicalHistoryTemplates.Add(new MedicalHistoryTemplate
{
CC = "دردپهلو",
Section = "داخلی"
});
_medicalHistoryTemplates.Add(new MedicalHistoryTemplate
{
CC = "سوختگی",
Section = "سوختگی"
});
_medicalHistoryTemplates.Add(new MedicalHistoryTemplate
{
CC = "شکستگی",
Section = "فیزیو"
});
base.OnInitialized();
} }
} }

View File

@ -1,49 +0,0 @@
namespace DocuMed.PWA.Pages;
public class MedicalHistoryTemplatesPageViewModel : BaseViewModel<List<MedicalHistoryTemplateSDto>>
{
private readonly NavigationManager _navigationManager;
private readonly IUserUtility _userUtility;
private readonly IRestWrapper _restWrapper;
private readonly ISnackbar _snackbar;
public MedicalHistoryTemplatesPageViewModel(NavigationManager navigationManager,IUserUtility userUtility , IRestWrapper restWrapper,ISnackbar snackbar)
{
_navigationManager = navigationManager;
_userUtility = userUtility;
_restWrapper = restWrapper;
_snackbar = snackbar;
}
public void CreateMedicalHistoryTemplateClicked() => _navigationManager.NavigateTo("MedicalHistoryTemplateActionPage");
public void MedicalHistoryTemplateClicked(MedicalHistoryTemplateSDto template) => _navigationManager.NavigateTo($"MedicalHistoryTemplateActionPage/{template.Id.ToString()}");
public override async Task InitializeAsync()
{
try
{
IsProcessing = true;
await Task.Delay(500);
var token = await _userUtility.GetBearerTokenAsync();
var list = await _restWrapper
.CrudDtoApiRest<MedicalHistoryTemplateLDto, MedicalHistoryTemplateSDto, Guid>( Address.MedicalHistoryTemplateController)
.ReadAll(0, token);
PageDto = list;
}
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();
}
}

View File

@ -1,104 +1,30 @@
@page "/ProfilePage" @page "/ProfilePage"
@inject IRestWrapper RestWrapper @using System.Reflection
@inject ISnackbar Snackbar
@inject IUserUtility UserUtility
@inject NavigationManager NavigationManager
<BasePageUi Title="پروفایل شما" Description="اطلاعات پروفایل شما باید دقیق و کامل باشد"> <BasePageUi Title="پروفایل شما" Description="اطلاعات پروفایل شما باید دقیق و کامل باشد">
<MudStack class="pb-10"> <MudStack class="pb-10">
<MudTextField @bind-Value="@ViewModel.User.FirstName" T="string" Label="نـــــــام" Variant="Variant.Outlined" /> <MudTextField T="string" Label="نـــــــام" Variant="Variant.Outlined" />
<MudTextField @bind-Value="@ViewModel.User.LastName" T="string" Label="نام خانوادگی" Variant="Variant.Outlined" /> <MudTextField T="string" Label="نام خانوادگی" Variant="Variant.Outlined" />
<MudTextField @bind-Value="@ViewModel.User.PhoneNumber" T="string" Label="شماره تماس" Variant="Variant.Outlined" /> <MudTextField T="string" Label="شماره تماس" Variant="Variant.Outlined" />
<MudTextField @bind-Value="@ViewModel.User.StudentId" T="string" Label="شماره دانشجویی" Variant="Variant.Outlined" /> <MudTextField T="string" Label="شماره دانشجویی" Variant="Variant.Outlined" />
<MudAutocomplete T="string" Label="شهر شما" Variant="Variant.Outlined" />
<MudAutocomplete T="string" Label="دانشگاه" Variant="Variant.Outlined" />
<MudAutocomplete T="string" Label="بخش فعلی" Variant="Variant.Outlined" />
<MudAutocomplete @bind-Value="@ViewModel.SelectedCity" <BaseButtonUi Icon="@Icons.Material.TwoTone.Check" Content="ویرایش پروفایل" Variant="Variant.Filled" Color="Color.Primary"/>
SearchFunc="@ViewModel.SearchCity"
T="CitySDto"
ToStringFunc="dto => dto.Name"
Label="شهر شما"
Variant="Variant.Outlined">
<ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false">
<MudListItem>
<div class="flex flex-row w-full mx-auto">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p>
</div>
</MudListItem>
</MudList>
</ProgressIndicatorInPopoverTemplate>
<ItemTemplate Context="e">
<p>@e.Name</p>
</ItemTemplate>
</MudAutocomplete>
<MudAutocomplete @bind-Value="@ViewModel.SelectedUni" <BaseButtonUi Icon="@Icons.Material.TwoTone.Close" Content="خروج از حساب کاربری" Variant="Variant.Outlined" Color="Color.Error" />
ToStringFunc="dto => dto.Name"
SearchFunc="@ViewModel.SearchUniversity"
T="UniversitySDto" Label="دانشگاه" Variant="Variant.Outlined">
<ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false">
<MudListItem>
<div class="flex flex-row w-full mx-auto">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p>
</div>
</MudListItem>
</MudList>
</ProgressIndicatorInPopoverTemplate>
<ItemTemplate Context="e">
<p>@e.Name</p>
</ItemTemplate>
</MudAutocomplete>
<MudAutocomplete T="SectionSDto" Label="بخش فعلی" Variant="Variant.Outlined"
ToStringFunc="dto => dto.Name"
SearchFunc="@ViewModel.SearchSection"
@bind-Value="@ViewModel.SelectedSection">
<ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false">
<MudListItem>
<div class="flex flex-row w-full mx-auto">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p>
</div>
</MudListItem>
</MudList>
</ProgressIndicatorInPopoverTemplate>
<ItemTemplate Context="e">
<p>@e.Name</p>
</ItemTemplate>
</MudAutocomplete>
<BaseButtonUi IsProcessing="@ViewModel.IsProcessing"
Icon="@Icons.Material.TwoTone.Check"
@onclick="@ViewModel.SubmitEditAsync"
Content="ویرایش پروفایل"
Variant="Variant.Filled"
Color="Color.Primary" />
<BaseButtonUi Icon="@Icons.Material.TwoTone.Close"
@onclick="@ViewModel.LogoutAsync" Content="خروج از حساب کاربری" Variant="Variant.Outlined" Color="Color.Error" />
</MudStack> </MudStack>
<div class="bg-gray-300 rounded-md mt-auto py-4 px-6 flex flex-row"> <div class="bg-gray-300 rounded-md mt-auto py-4 px-6 flex flex-row">
<p class="my-auto">نسخه برنامه </p> <p class="my-auto">نسخه برنامه </p>
<p class="font-extrabold text-lg mr-auto">@ViewModel.Version</p> <p class="font-extrabold text-lg mr-auto">@_version</p>
</div> </div>
</BasePageUi> </BasePageUi>
@code { @code {
private readonly string _version = Assembly.GetAssembly(typeof(Program))?.GetName()?.Version?.ToString() ?? string.Empty;
private ProfilePageViewModel ViewModel { get; set; }
protected override async Task OnInitializedAsync()
{
ViewModel = new ProfilePageViewModel(UserUtility, RestWrapper, Snackbar, NavigationManager);
await ViewModel.InitializeAsync();
await base.OnInitializedAsync();
}
} }

View File

@ -1,175 +0,0 @@
using DocuMed.Domain.Entities.City;
using Mapster;
namespace DocuMed.PWA.Pages;
public class ProfilePageViewModel : BaseViewModel
{
private readonly NavigationManager _navigationManager;
public IUserUtility UserUtility { get; }
public IRestWrapper RestWrapper { get; }
public ISnackbar Snackbar { get; }
public ApplicationUserSDto User { get; set; } = new();
public List<CitySDto> Cities { get; private set; } = new List<CitySDto>();
public List<UniversitySDto> Universities { get; private set; } = new List<UniversitySDto>();
public List<SectionSDto> Sections { get; private set; } = new List<SectionSDto>();
public SectionSDto? SelectedSection { get; set; }
public CitySDto? SelectedCity { get; set; }
public UniversitySDto? SelectedUni { get; set; }
public readonly string Version = Assembly.GetAssembly(typeof(Program))?.GetName()?.Version?.ToString() ?? string.Empty;
public ProfilePageViewModel(IUserUtility userUtility, IRestWrapper restWrapper, ISnackbar snackbar,NavigationManager navigationManager)
{
_navigationManager = navigationManager;
UserUtility = userUtility;
RestWrapper = restWrapper;
Snackbar = snackbar;
}
public override async Task InitializeAsync()
{
User = await UserUtility.GetUserAsync();
var token = await UserUtility.GetBearerTokenAsync();
Cities = await RestWrapper.CrudDtoApiRest<City, CitySDto, Guid>(Address.CityController).ReadAll(0, token);
Universities = await RestWrapper.CrudDtoApiRest<University, UniversitySDto, Guid>(Address.UniversityController).ReadAll(0, token);
if (User.UniversityId != Guid.Empty)
{
SelectedUni = Universities.FirstOrDefault(u => u.Id == User.UniversityId);
SelectedCity = Cities.FirstOrDefault(c => c.Id == SelectedUni?.CityId);
if (SelectedUni != null)
if (User.SectionId != Guid.Empty)
{
Sections = await RestWrapper.SectionRestApi.GetByUniversityAsync(SelectedUni.Id, token);
SelectedSection = Sections.FirstOrDefault(s => s.Id == User.SectionId);
}
}
await base.InitializeAsync();
}
public async Task SubmitEditAsync()
{
try
{
IsProcessing = true;
var token = await UserUtility.GetBearerTokenAsync();
var request = User.Adapt<UserActionRequestDto>();
if (SelectedUni != null)
{
request.UniversityId = SelectedUni.Id;
User.UniversityId = SelectedUni.Id;
}
if (SelectedSection != null)
{
request.SectionId = SelectedSection.Id;
User.SectionId = SelectedSection.Id;
}
await RestWrapper.UserRestApi.UpdateUserAsync(request, token);
await UserUtility.SetUserAsync(User);
Snackbar.Add("ویرایش حساب کاربری با موفقیت انجام شد", Severity.Success);
}
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 async Task LogoutAsync()
{
await UserUtility.LogoutAsync();
_navigationManager.NavigateTo("");
}
public async Task<IEnumerable<CitySDto>> SearchCity(string city)
{
try
{
if (Cities.Count == 0)
{
var token = await UserUtility.GetBearerTokenAsync();
Cities = await RestWrapper.CrudDtoApiRest<City, CitySDto, Guid>(Address.CityController).ReadAll(0, token);
}
if (city.IsNullOrEmpty())
return Cities;
return Cities.Where(c => c.Name.Contains(city));
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
Snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
return Cities;
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
return Cities;
}
}
public async Task<IEnumerable<SectionSDto>> SearchSection(string section)
{
try
{
if (SelectedUni != null)
{
var token = await UserUtility.GetBearerTokenAsync();
Sections = await RestWrapper.SectionRestApi.GetByUniversityAsync(SelectedUni.Id, token);
}
if (section.IsNullOrEmpty())
return Sections;
return Sections.Where(c => c.Name.Contains(section));
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
Snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
return Sections;
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
return Sections;
}
}
public async Task<IEnumerable<UniversitySDto>> SearchUniversity(string uni)
{
try
{
if (Universities.Count == 0)
{
var token = await UserUtility.GetBearerTokenAsync();
Universities = await RestWrapper.CrudDtoApiRest<University, UniversitySDto, Guid>(Address.UniversityController).ReadAll(0, token);
}
if (uni.IsNullOrEmpty())
return Universities;
return Universities.Where(c => c.Name.Contains(uni));
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
Snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
return Universities;
}
catch (Exception e)
{
Snackbar.Add(e.Message, Severity.Error);
return Universities;
}
}
}

View File

@ -1,17 +1,14 @@
using DocuMed.PWA;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using MudBlazor.Services;
using Toolbelt.Blazor.Extensions.DependencyInjection;
var builder = WebAssemblyHostBuilder.CreateDefault(args); var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after"); builder.RootComponents.Add<HeadOutlet>("head::after");
builder.Services.AddMudServices(config => builder.Services.AddMudServices();
{
config.SnackbarConfiguration.VisibleStateDuration = 3500;
config.SnackbarConfiguration.HideTransitionDuration = 200;
config.SnackbarConfiguration.ShowTransitionDuration = 200;
config.SnackbarConfiguration.SnackbarVariant = Variant.Filled;
config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight;
});
builder.Services.AddScoped<IRestWrapper, RestWrapper>(); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddScoped<IUserUtility, UserUtility>();
builder.Services.AddBlazoredLocalStorage();
builder.Services.AddPWAUpdater(); builder.Services.AddPWAUpdater();
await builder.Build().RunAsync(); await builder.Build().RunAsync();

View File

@ -1,13 +0,0 @@
namespace DocuMed.PWA.Services.RestServices;
public interface IAuthRestApi
{
[Get("/verifycode")]
public Task<SignUpStatus> GetVerifyCodeAsync([Query] string phoneNumber);
[Post("/login/code")]
public Task<AccessToken<ApplicationUserSDto>> LoginWithVerifyCodeAsync([Body] LoginRequestDto request);
[Post("/signup")]
public Task<AccessToken<ApplicationUserSDto>> CompleteSignUpAsync([Body] SignUpRequestDto request, [Header("Authorization")] string authorization);
}

View File

@ -1,42 +0,0 @@
namespace DocuMed.PWA.Services.RestServices;
public interface ICrudApiRest<T, in TKey> where T : class
{
[Post("")]
Task<T> Create([Body] T payload, [Header("Authorization")] string authorization);
[Get("")]
Task<List<T>> ReadAll([Query] int page,[Header("Authorization")] string authorization);
[Get("/{key}")]
Task<T> ReadOne(TKey key, [Header("Authorization")] string authorization);
[Put("")]
Task Update([Body] T payload, [Header("Authorization")] string authorization);
[Delete("/{key}")]
Task Delete(TKey key, [Header("Authorization")] string authorization);
}
public interface ICrudDtoApiRest<T, TDto, in TKey> where T : class where TDto : class
{
[Post("")]
Task<T> Create([Body] T payload, [Header("Authorization")] string authorization);
[Post("")]
Task<T> Create([Body] TDto payload, [Header("Authorization")] string authorization);
[Get("")]
Task<List<TDto>> ReadAll([Query]int page,[Header("Authorization")] string authorization);
[Get("/{key}")]
Task<TDto> ReadOne(TKey key, [Header("Authorization")] string authorization);
[Put("")]
Task Update([Body] T payload, [Header("Authorization")] string authorization);
[Put("")]
Task Update([Body] TDto payload, [Header("Authorization")] string authorization);
[Delete("/{key}")]
Task Delete(TKey key, [Header("Authorization")] string authorization);
}

View File

@ -1,12 +0,0 @@
namespace DocuMed.PWA.Services.RestServices;
public interface IRestWrapper
{
public ICrudApiRest<T, TKey> CrudApiRest<T, TKey>(string address) where T : class;
public ICrudDtoApiRest<T, TDto, TKey> CrudDtoApiRest<T, TDto, TKey>(string address) where T : class where TDto : class;
public IAuthRestApi AuthRestApi { get; }
public ISectionRestApi SectionRestApi { get; }
public IUserRestApi UserRestApi { get; }
}

View File

@ -1,7 +0,0 @@
namespace DocuMed.PWA.Services.RestServices;
public interface ISectionRestApi : ICrudDtoApiRest<Section,SectionSDto,Guid>
{
[Get("/university/{universityId}")]
Task<List<SectionSDto>> GetByUniversityAsync(Guid universityId, [Header("Authorization")] string authorization);
}

View File

@ -1,9 +0,0 @@
namespace DocuMed.PWA.Services.RestServices;
public interface IUserRestApi
{
[Put("")]
Task UpdateUserAsync([Body]UserActionRequestDto request, [Header("Authorization")] string authorization);
}

View File

@ -1,26 +0,0 @@
using Newtonsoft.Json;
namespace DocuMed.PWA.Services.RestServices;
public class RestWrapper : IRestWrapper
{
private static RefitSettings setting = new RefitSettings(new NewtonsoftJsonContentSerializer(new JsonSerializerSettings
{
Formatting = Newtonsoft.Json.Formatting.Indented,
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,
}));
public ICrudApiRest<T, TKey> CrudApiRest<T, TKey>(string address) where T : class
{
return RestService.For<ICrudApiRest<T, TKey>>(address, setting);
}
public ICrudDtoApiRest<T, TDto, TKey> CrudDtoApiRest<T, TDto, TKey>(string address) where T : class where TDto : class
{
return RestService.For<ICrudDtoApiRest<T, TDto, TKey>>(address, setting);
}
public IAuthRestApi AuthRestApi => RestService.For<IAuthRestApi>(Address.AuthController, setting);
public ISectionRestApi SectionRestApi => RestService.For<ISectionRestApi>(Address.SectionController, setting);
public IUserRestApi UserRestApi => RestService.For<IUserRestApi>(Address.UserController, setting);
}

View File

@ -1,26 +1,25 @@
@using DocuMed.Domain.Dtos.SmallDtos
<MudCard Class="mx-3 my-1 rounded-md" Elevation="2"> <MudCard Class="mx-3 my-1 rounded-md" Elevation="2">
<div class="flex flex-row"> <div class="flex flex-row">
<div class="bg-[--color-primary] rounded-r-lg w-2"></div> <div class="bg-[--color-primary] rounded-r-lg w-2"></div>
<MudStack class="grow mx-3.5 my-4"> <MudStack class="grow mx-3.5 my-4">
<div class="flex flex-row"> <div class="flex flex-row">
<p class="font-extrabold font-iranyekan text-base my-auto text-[#37966F]">@MedicalHistory.FullName</p> <p class="font-extrabold font-iranyekan text-base my-auto text-[#37966F]">@MedicalHistory.Name</p>
<MudPaper Elevation="0" <MudPaper Elevation="0"
class="bg-[#FFDACF] text-[#D03405] rounded-full py-0.5 px-3 my-auto mr-auto text-xs font-iranyekan"> class="bg-[#FFDACF] text-[#D03405] rounded-full py-0.5 px-3 my-auto mr-auto text-xs font-iranyekan">
<p>@MedicalHistory.ChiefComplaint در بخش @MedicalHistory.Section</p> <p>@MedicalHistory.CC در بخش @MedicalHistory.Section</p>
</MudPaper> </MudPaper>
</div> </div>
<MudGrid Row="true" Class="items-center justify-stretch"> <MudGrid Row="true" Class="items-center justify-stretch">
<MudItem xs="4"> <MudItem xs="4">
<MudPaper Elevation="0" Class="bg-gray-200 text-center rounded-full py-0.5 px-3 text-gray-700 text-xs"> <MudPaper Elevation="0" Class="bg-gray-200 text-center rounded-full py-0.5 px-3 text-gray-700 text-xs">
@MedicalHistory.Age ساله @MedicalHistory.Aag ساله
</MudPaper> </MudPaper>
</MudItem> </MudItem>
<MudItem xs="4"> <MudItem xs="4">
<MudPaper Elevation="0" Class="bg-gray-200 text-center rounded-full py-0.5 px-3 text-gray-700 text-xs"> <MudPaper Elevation="0" Class="bg-gray-200 text-center rounded-full py-0.5 px-3 text-gray-700 text-xs">
مرد @MedicalHistory.Gender.ToString()
</MudPaper> </MudPaper>
</MudItem> </MudItem>
<MudItem xs="4"> <MudItem xs="4">
@ -39,6 +38,6 @@
@code { @code {
[Parameter] [Parameter]
public MedicalHistorySDto MedicalHistory { get; set; } = new(); public MedicalHistory MedicalHistory { get; set; } = new();
} }

View File

@ -2,10 +2,10 @@
<div class="flex flex-row"> <div class="flex flex-row">
<div> <div>
<p>@Question.Question</p> <p>@Question.Title</p>
<MudPaper Elevation="0" <MudPaper Elevation="0"
Class="mt-1 bg-gray-200 w-fit text-center rounded-full py-0.5 px-3 text-gray-800 text-xs"> Class="mt-1 bg-gray-200 w-fit text-center rounded-full py-0.5 px-3 text-gray-800 text-xs">
@Question.QuestionType.ToDisplay() @Question.Type.ToString();
</MudPaper> </MudPaper>
</div> </div>
<MudIconButton @onclick="async ()=> await QuestionRemoved.InvokeAsync(Question)" class="mr-auto" Color="Color.Error" Icon="@Icons.Material.Filled.Close" /> <MudIconButton @onclick="async ()=> await QuestionRemoved.InvokeAsync(Question)" class="mr-auto" Color="Color.Error" Icon="@Icons.Material.Filled.Close" />
@ -15,9 +15,9 @@
@code { @code {
[Parameter] [Parameter]
public MedicalHistoryQuestionSDto Question { get; set; } = new MedicalHistoryQuestionSDto(); public MedicalHistoryQuestion Question { get; set; } = new MedicalHistoryQuestion();
[Parameter] [Parameter]
public EventCallback<MedicalHistoryQuestionSDto> QuestionRemoved { get; set; } public EventCallback<MedicalHistoryQuestion> QuestionRemoved { get; set; }
} }

View File

@ -1,10 +1,10 @@
<MudCard @onclick="(async () => { await Clicked.InvokeAsync(MedicalHistoryTemplate); })" Elevation="2" class="rounded-lg"> <MudCard @onclick="(async () => { await Clicked.InvokeAsync(MedicalHistoryTemplate); })" Elevation="2" class="rounded-lg">
<MudCardContent> <MudCardContent>
<p class="text-center font-extrabold mt-1 text-gray-600 text-lg">@MedicalHistoryTemplate.ChiefComplaint</p> <p class="text-center font-extrabold mt-1 text-gray-600 text-lg">@MedicalHistoryTemplate.CC</p>
<MudPaper Elevation="0" <MudPaper Elevation="0"
class="bg-[#FFDACF] text-center text-[#D03405] rounded-full py-0.5 mt-3 mr-auto text-xs font-iranyekan"> class="bg-[#FFDACF] text-center text-[#D03405] rounded-full py-0.5 mt-3 mr-auto text-xs font-iranyekan">
<p>بخش @MedicalHistoryTemplate.ChiefComplaint</p> <p>بخش @MedicalHistoryTemplate.Section</p>
</MudPaper> </MudPaper>
</MudCardContent> </MudCardContent>
</MudCard> </MudCard>
@ -12,8 +12,8 @@
@code { @code {
[Parameter] [Parameter]
public MedicalHistoryTemplateSDto MedicalHistoryTemplate { get; set; } = new(); public MedicalHistoryTemplate MedicalHistoryTemplate { get; set; } = new();
[Parameter] [Parameter]
public EventCallback<MedicalHistoryTemplateSDto> Clicked { get; set; } public EventCallback<MedicalHistoryTemplate> Clicked { get; set; }
} }

View File

@ -2,18 +2,8 @@
Color="@Color" Color="@Color"
@onclick="OnClickCallback" @onclick="OnClickCallback"
@attributes="CapturedAttributes" @attributes="CapturedAttributes"
Disabled="IsProcessing"
DisableElevation="true" DisableElevation="true"
class="rounded-md"> class="rounded-md">
@if (IsProcessing)
{
<div class="flex flex-row w-full mx-auto">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" />
<p class="font-extrabold my-1 mx-auto text-lg">منتظر بمانید</p>
</div>
}
else
{
<div class="flex flex-row w-full"> <div class="flex flex-row w-full">
@if (Variant == Variant.Filled) @if (Variant == Variant.Filled)
{ {
@ -29,7 +19,6 @@
} }
<p class="my-auto mx-auto font-extrabold">@Content</p> <p class="my-auto mx-auto font-extrabold">@Content</p>
</div> </div>
}
</MudButton> </MudButton>
@code @code
{ {
@ -44,9 +33,6 @@
[Parameter] [Parameter]
public string Icon { get; set; } = string.Empty; public string Icon { get; set; } = string.Empty;
[Parameter]
public bool IsProcessing { get; set; } = false;
[Parameter] [Parameter]
public EventCallback OnClickCallback { get; set; } public EventCallback OnClickCallback { get; set; }

View File

@ -1,11 +0,0 @@
namespace DocuMed.PWA.Utilities;
public interface IUserUtility
{
public Task<string> GetBearerTokenAsync();
public Task SetBearerTokenAsync(string token);
public Task<ApplicationUserSDto> GetUserAsync();
public Task SetUserAsync(ApplicationUserSDto user);
public Task LogoutAsync();
}

View File

@ -1,28 +0,0 @@
using DocuMed.Common.Models.Claims;
namespace DocuMed.PWA.Utilities;
public class UserUtility : IUserUtility
{
private readonly ILocalStorageService _localStorageService;
public UserUtility(ILocalStorageService localStorageService)
{
_localStorageService = localStorageService;
}
public async Task<string> GetBearerTokenAsync() => await _localStorageService.GetItemAsStringAsync(LocalStorageKeys.Token);
public async Task SetBearerTokenAsync(string token) => await _localStorageService.SetItemAsStringAsync(LocalStorageKeys.Token, token);
public async Task<ApplicationUserSDto> GetUserAsync() => await _localStorageService.GetItemAsync<ApplicationUserSDto>(LocalStorageKeys.UserInfo);
public async Task SetUserAsync(ApplicationUserSDto user) => await _localStorageService.SetItemAsync<ApplicationUserSDto>(LocalStorageKeys.UserInfo, user);
public async Task LogoutAsync()
{
await _localStorageService.RemoveItemAsync(LocalStorageKeys.Token);
await _localStorageService.RemoveItemAsync(LocalStorageKeys.UserInfo);
}
//public AccessToken<ApplicationUserSDto>? AccessToken { get; set; }
//public List<string> UserClaims => AccessToken == null ? new List<string>() : AccessToken.Permissions;
//public bool HasPermissionTo(string permission) => UserClaims.Any(c => c == permission);
}

View File

@ -1,11 +0,0 @@
namespace DocuMed.PWA.Utilities;
public class UtilityWrapper
{
private static UtilityWrapper? _instance;
public static UtilityWrapper Instance
{
get { return _instance ??= new UtilityWrapper(); }
}
}

View File

@ -504,9 +504,6 @@ video {
.left-0 { .left-0 {
left: 0px; left: 0px;
} }
.right-0 {
right: 0px;
}
.z-50 { .z-50 {
z-index: 50; z-index: 50;
} }
@ -517,10 +514,6 @@ video {
margin-left: 0.25rem; margin-left: 0.25rem;
margin-right: 0.25rem; margin-right: 0.25rem;
} }
.mx-10 {
margin-left: 2.5rem;
margin-right: 2.5rem;
}
.mx-2 { .mx-2 {
margin-left: 0.5rem; margin-left: 0.5rem;
margin-right: 0.5rem; margin-right: 0.5rem;
@ -545,10 +538,6 @@ video {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
.my-0 {
margin-top: 0px;
margin-bottom: 0px;
}
.my-1 { .my-1 {
margin-top: 0.25rem; margin-top: 0.25rem;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
@ -561,10 +550,6 @@ video {
margin-top: 1rem; margin-top: 1rem;
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.my-5 {
margin-top: 1.25rem;
margin-bottom: 1.25rem;
}
.my-auto { .my-auto {
margin-top: auto; margin-top: auto;
margin-bottom: auto; margin-bottom: auto;
@ -578,9 +563,6 @@ video {
.-mb-8 { .-mb-8 {
margin-bottom: -2rem; margin-bottom: -2rem;
} }
.-ml-4 {
margin-left: -1rem;
}
.-ml-6 { .-ml-6 {
margin-left: -1.5rem; margin-left: -1.5rem;
} }
@ -617,9 +599,6 @@ video {
.mb-3 { .mb-3 {
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
} }
.mb-4 {
margin-bottom: 1rem;
}
.mb-8 { .mb-8 {
margin-bottom: 2rem; margin-bottom: 2rem;
} }
@ -647,9 +626,6 @@ video {
.mr-5 { .mr-5 {
margin-right: 1.25rem; margin-right: 1.25rem;
} }
.mr-7 {
margin-right: 1.75rem;
}
.mr-auto { .mr-auto {
margin-right: auto; margin-right: auto;
} }
@ -885,9 +861,6 @@ video {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(55 65 81 / var(--tw-bg-opacity)); background-color: rgb(55 65 81 / var(--tw-bg-opacity));
} }
.bg-transparent {
background-color: transparent;
}
.bg-white { .bg-white {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(255 255 255 / var(--tw-bg-opacity));
@ -898,9 +871,6 @@ video {
.bg-opacity-70 { .bg-opacity-70 {
--tw-bg-opacity: 0.7; --tw-bg-opacity: 0.7;
} }
.p-4 {
padding: 1rem;
}
.p-5 { .p-5 {
padding: 1.25rem; padding: 1.25rem;
} }
@ -932,10 +902,6 @@ video {
padding-top: 0.5rem; padding-top: 0.5rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
} }
.py-3 {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
}
.py-4 { .py-4 {
padding-top: 1rem; padding-top: 1rem;
padding-bottom: 1rem; padding-bottom: 1rem;

View File

@ -557,10 +557,6 @@ video {
left: 0px; left: 0px;
} }
.right-0 {
right: 0px;
}
.z-50 { .z-50 {
z-index: 50; z-index: 50;
} }
@ -574,11 +570,6 @@ video {
margin-right: 0.25rem; margin-right: 0.25rem;
} }
.mx-10 {
margin-left: 2.5rem;
margin-right: 2.5rem;
}
.mx-2 { .mx-2 {
margin-left: 0.5rem; margin-left: 0.5rem;
margin-right: 0.5rem; margin-right: 0.5rem;
@ -609,11 +600,6 @@ video {
margin-right: auto; margin-right: auto;
} }
.my-0 {
margin-top: 0px;
margin-bottom: 0px;
}
.my-1 { .my-1 {
margin-top: 0.25rem; margin-top: 0.25rem;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
@ -629,11 +615,6 @@ video {
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.my-5 {
margin-top: 1.25rem;
margin-bottom: 1.25rem;
}
.my-auto { .my-auto {
margin-top: auto; margin-top: auto;
margin-bottom: auto; margin-bottom: auto;
@ -651,10 +632,6 @@ video {
margin-bottom: -2rem; margin-bottom: -2rem;
} }
.-ml-4 {
margin-left: -1rem;
}
.-ml-6 { .-ml-6 {
margin-left: -1.5rem; margin-left: -1.5rem;
} }
@ -703,10 +680,6 @@ video {
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
} }
.mb-4 {
margin-bottom: 1rem;
}
.mb-8 { .mb-8 {
margin-bottom: 2rem; margin-bottom: 2rem;
} }
@ -743,10 +716,6 @@ video {
margin-right: 1.25rem; margin-right: 1.25rem;
} }
.mr-7 {
margin-right: 1.75rem;
}
.mr-auto { .mr-auto {
margin-right: auto; margin-right: auto;
} }
@ -1056,10 +1025,6 @@ video {
background-color: rgb(55 65 81 / var(--tw-bg-opacity)); background-color: rgb(55 65 81 / var(--tw-bg-opacity));
} }
.bg-transparent {
background-color: transparent;
}
.bg-white { .bg-white {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity)); background-color: rgb(255 255 255 / var(--tw-bg-opacity));
@ -1073,10 +1038,6 @@ video {
--tw-bg-opacity: 0.7; --tw-bg-opacity: 0.7;
} }
.p-4 {
padding: 1rem;
}
.p-5 { .p-5 {
padding: 1.25rem; padding: 1.25rem;
} }
@ -1116,11 +1077,6 @@ video {
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
} }
.py-3 {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
}
.py-4 { .py-4 {
padding-top: 1rem; padding-top: 1rem;
padding-bottom: 1rem; padding-bottom: 1rem;

View File

@ -31,23 +31,14 @@
<ItemGroup> <ItemGroup>
<Using Include="DocuMed.Common.Extensions" /> <Using Include="DocuMed.Common.Extensions" />
<Using Include="DocuMed.Common.Models" /> <Using Include="DocuMed.Common.Models" />
<Using Include="DocuMed.Common.Models.Api" />
<Using Include="DocuMed.Common.Models.Claims" /> <Using Include="DocuMed.Common.Models.Claims" />
<Using Include="DocuMed.Common.Models.Entity" /> <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.Entities.User" />
<Using Include="DocuMed.Domain.Enums" /> <Using Include="DocuMed.Domain.Enums" />
<Using Include="DocuMed.Domain.Mappers" />
<Using Include="DocuMed.Domain.Models.Settings" /> <Using Include="DocuMed.Domain.Models.Settings" />
<Using Include="DocuMed.Repository.Abstracts" />
<Using Include="DocuMed.Repository.Extensions" /> <Using Include="DocuMed.Repository.Extensions" />
<Using Include="DocuMed.Repository.Models" /> <Using Include="DocuMed.Repository.Models" />
<Using Include="DocuMed.Repository.Repositories.Base" />
<Using Include="DocuMed.Repository.Repositories.Base.Contracts" /> <Using Include="DocuMed.Repository.Repositories.Base.Contracts" />
<Using Include="DocuMed.Repository.Repositories.Entities.Abstracts" />
<Using Include="DocuMed.Repository.Services.Contracts" /> <Using Include="DocuMed.Repository.Services.Contracts" />
<Using Include="Microsoft.AspNetCore.Identity" /> <Using Include="Microsoft.AspNetCore.Identity" />
<Using Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" /> <Using Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" />

View File

@ -1,832 +0,0 @@
// <auto-generated />
using System;
using DocuMed.Repository.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace DocuMed.Repository.Migrations
{
[DbContext(typeof(ApplicationContext))]
[Migration("20231022193344_init")]
partial class init
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasDefaultSchema("public")
.HasAnnotation("ProductVersion", "7.0.11")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("DocuMed.Domain.Entities.City.City", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Cities", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.Section", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Detail")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.Property<Guid>("UniversityId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("UniversityId");
b.ToTable("Sections", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.University", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("Address")
.IsRequired()
.HasColumnType("text");
b.Property<Guid>("CityId")
.HasColumnType("uuid");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CityId");
b.ToTable("Universities", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistory", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("AddictionHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Age")
.HasColumnType("integer");
b.Property<string>("AllergyDetail")
.IsRequired()
.HasColumnType("text");
b.Property<Guid>("ApplicationUserId")
.HasColumnType("uuid");
b.Property<DateTime>("BirthDate")
.HasColumnType("timestamp without time zone");
b.Property<string>("ChiefComplaint")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<int>("DiastolicBloodPressure")
.HasColumnType("integer");
b.Property<string>("DrugHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<string>("FamilyHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<string>("FatherName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("NationalId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("PastDiseasesHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<string>("PastSurgeryHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<string>("PresentIllnessDetail")
.IsRequired()
.HasColumnType("text");
b.Property<int>("PulseRate")
.HasColumnType("integer");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SPO2")
.HasColumnType("integer");
b.Property<string>("Section")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SystemReviewDetail")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SystolicBloodPressure")
.HasColumnType("integer");
b.Property<int>("Temperature")
.HasColumnType("integer");
b.Property<string>("VitalSignDetail")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ApplicationUserId");
b.ToTable("MedicalHistories", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistoryAnswer", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("Answer")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<Guid>("MedicalHistoryId")
.HasColumnType("uuid");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Part")
.HasColumnType("integer");
b.Property<string>("Question")
.IsRequired()
.HasColumnType("text");
b.Property<int>("QuestionType")
.HasColumnType("integer");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("MedicalHistoryId");
b.ToTable("MedicalHistoryAnswers", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryQuestion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<Guid>("MedicalHistoryTemplateId")
.HasColumnType("uuid");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Part")
.HasColumnType("integer");
b.Property<string>("Question")
.IsRequired()
.HasColumnType("text");
b.Property<int>("QuestionType")
.HasColumnType("integer");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("MedicalHistoryTemplateId");
b.ToTable("MedicalHistoryQuestions", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryTemplate", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<Guid>("ApplicationUserId")
.HasColumnType("uuid");
b.Property<string>("ChiefComplaint")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.Property<Guid>("SectionId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("ApplicationUserId");
b.ToTable("MedicalHistoryTemplates", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.User.ApplicationRole", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<string>("EnglishName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PersianName")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("Roles", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.User.ApplicationUser", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<DateTime>("BirthDate")
.HasColumnType("timestamp without time zone");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Gender")
.HasColumnType("integer");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NationalId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<Guid?>("SectionId")
.HasColumnType("uuid");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<int>("SignUpStatus")
.HasColumnType("integer");
b.Property<string>("StudentId")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<Guid?>("UniversityId")
.HasColumnType("uuid");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.HasIndex("SectionId");
b.HasIndex("UniversityId");
b.ToTable("Users", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<System.Guid>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<Guid>("RoleId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("RoleClaims", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<Guid>("UserId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Claims", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<Guid>("UserId")
.HasColumnType("uuid");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("Logins", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<System.Guid>", b =>
{
b.Property<Guid>("UserId")
.HasColumnType("uuid");
b.Property<Guid>("RoleId")
.HasColumnType("uuid");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("UserRoles", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
{
b.Property<Guid>("UserId")
.HasColumnType("uuid");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("Tokens", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.Section", b =>
{
b.HasOne("DocuMed.Domain.Entities.City.University", "University")
.WithMany("Sections")
.HasForeignKey("UniversityId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("University");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.University", b =>
{
b.HasOne("DocuMed.Domain.Entities.City.City", "City")
.WithMany("Universities")
.HasForeignKey("CityId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("City");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistory", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", "ApplicationUser")
.WithMany()
.HasForeignKey("ApplicationUserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("ApplicationUser");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistoryAnswer", b =>
{
b.HasOne("DocuMed.Domain.Entities.MedicalHistory.MedicalHistory", "MedicalHistory")
.WithMany("Answers")
.HasForeignKey("MedicalHistoryId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("MedicalHistory");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryQuestion", b =>
{
b.HasOne("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryTemplate", "MedicalHistoryTemplate")
.WithMany("Questions")
.HasForeignKey("MedicalHistoryTemplateId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("MedicalHistoryTemplate");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryTemplate", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", "ApplicationUser")
.WithMany()
.HasForeignKey("ApplicationUserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("ApplicationUser");
});
modelBuilder.Entity("DocuMed.Domain.Entities.User.ApplicationUser", b =>
{
b.HasOne("DocuMed.Domain.Entities.City.Section", "Section")
.WithMany()
.HasForeignKey("SectionId");
b.HasOne("DocuMed.Domain.Entities.City.University", "University")
.WithMany()
.HasForeignKey("UniversityId");
b.Navigation("Section");
b.Navigation("University");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.City", b =>
{
b.Navigation("Universities");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.University", b =>
{
b.Navigation("Sections");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistory", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryTemplate", b =>
{
b.Navigation("Questions");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -1,570 +0,0 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace DocuMed.Repository.Migrations
{
/// <inheritdoc />
public partial class init : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.EnsureSchema(
name: "public");
migrationBuilder.CreateTable(
name: "Cities",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
RemovedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedBy = table.Column<string>(type: "text", nullable: false),
IsRemoved = table.Column<bool>(type: "boolean", nullable: false),
RemovedBy = table.Column<string>(type: "text", nullable: false),
ModifiedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
ModifiedBy = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Cities", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Roles",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
Description = table.Column<string>(type: "text", nullable: false),
EnglishName = table.Column<string>(type: "text", nullable: false),
PersianName = table.Column<string>(type: "text", nullable: false),
Name = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
NormalizedName = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
ConcurrencyStamp = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Roles", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Universities",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
Address = table.Column<string>(type: "text", nullable: false),
CityId = table.Column<Guid>(type: "uuid", nullable: false),
RemovedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedBy = table.Column<string>(type: "text", nullable: false),
IsRemoved = table.Column<bool>(type: "boolean", nullable: false),
RemovedBy = table.Column<string>(type: "text", nullable: false),
ModifiedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
ModifiedBy = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Universities", x => x.Id);
table.ForeignKey(
name: "FK_Universities_Cities_CityId",
column: x => x.CityId,
principalSchema: "public",
principalTable: "Cities",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "RoleClaims",
schema: "public",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
RoleId = table.Column<Guid>(type: "uuid", nullable: false),
ClaimType = table.Column<string>(type: "text", nullable: true),
ClaimValue = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_RoleClaims", x => x.Id);
table.ForeignKey(
name: "FK_RoleClaims_Roles_RoleId",
column: x => x.RoleId,
principalSchema: "public",
principalTable: "Roles",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "Sections",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
Detail = table.Column<string>(type: "text", nullable: false),
UniversityId = table.Column<Guid>(type: "uuid", nullable: false),
RemovedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedBy = table.Column<string>(type: "text", nullable: false),
IsRemoved = table.Column<bool>(type: "boolean", nullable: false),
RemovedBy = table.Column<string>(type: "text", nullable: false),
ModifiedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
ModifiedBy = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Sections", x => x.Id);
table.ForeignKey(
name: "FK_Sections_Universities_UniversityId",
column: x => x.UniversityId,
principalSchema: "public",
principalTable: "Universities",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "Users",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
FirstName = table.Column<string>(type: "text", nullable: false),
LastName = table.Column<string>(type: "text", nullable: false),
NationalId = table.Column<string>(type: "text", nullable: false),
StudentId = table.Column<string>(type: "text", nullable: false),
BirthDate = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
Gender = table.Column<int>(type: "integer", nullable: false),
SignUpStatus = table.Column<int>(type: "integer", nullable: false),
UniversityId = table.Column<Guid>(type: "uuid", nullable: true),
SectionId = table.Column<Guid>(type: "uuid", nullable: true),
UserName = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
NormalizedUserName = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
Email = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
NormalizedEmail = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
EmailConfirmed = table.Column<bool>(type: "boolean", nullable: false),
PasswordHash = table.Column<string>(type: "text", nullable: true),
SecurityStamp = table.Column<string>(type: "text", nullable: true),
ConcurrencyStamp = table.Column<string>(type: "text", nullable: true),
PhoneNumber = table.Column<string>(type: "text", nullable: true),
PhoneNumberConfirmed = table.Column<bool>(type: "boolean", nullable: false),
TwoFactorEnabled = table.Column<bool>(type: "boolean", nullable: false),
LockoutEnd = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true),
LockoutEnabled = table.Column<bool>(type: "boolean", nullable: false),
AccessFailedCount = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
table.ForeignKey(
name: "FK_Users_Sections_SectionId",
column: x => x.SectionId,
principalSchema: "public",
principalTable: "Sections",
principalColumn: "Id");
table.ForeignKey(
name: "FK_Users_Universities_UniversityId",
column: x => x.UniversityId,
principalSchema: "public",
principalTable: "Universities",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "Claims",
schema: "public",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
UserId = table.Column<Guid>(type: "uuid", nullable: false),
ClaimType = table.Column<string>(type: "text", nullable: true),
ClaimValue = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Claims", x => x.Id);
table.ForeignKey(
name: "FK_Claims_Users_UserId",
column: x => x.UserId,
principalSchema: "public",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "Logins",
schema: "public",
columns: table => new
{
LoginProvider = table.Column<string>(type: "text", nullable: false),
ProviderKey = table.Column<string>(type: "text", nullable: false),
ProviderDisplayName = table.Column<string>(type: "text", nullable: true),
UserId = table.Column<Guid>(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Logins", x => new { x.LoginProvider, x.ProviderKey });
table.ForeignKey(
name: "FK_Logins_Users_UserId",
column: x => x.UserId,
principalSchema: "public",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "MedicalHistories",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
ChiefComplaint = table.Column<string>(type: "text", nullable: false),
Section = table.Column<string>(type: "text", nullable: false),
FirstName = table.Column<string>(type: "text", nullable: false),
LastName = table.Column<string>(type: "text", nullable: false),
FatherName = table.Column<string>(type: "text", nullable: false),
NationalId = table.Column<string>(type: "text", nullable: false),
Age = table.Column<int>(type: "integer", nullable: false),
BirthDate = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
PresentIllnessDetail = table.Column<string>(type: "text", nullable: false),
PastDiseasesHistoryDetail = table.Column<string>(type: "text", nullable: false),
PastSurgeryHistoryDetail = table.Column<string>(type: "text", nullable: false),
FamilyHistoryDetail = table.Column<string>(type: "text", nullable: false),
AllergyDetail = table.Column<string>(type: "text", nullable: false),
DrugHistoryDetail = table.Column<string>(type: "text", nullable: false),
AddictionHistoryDetail = table.Column<string>(type: "text", nullable: false),
SystemReviewDetail = table.Column<string>(type: "text", nullable: false),
VitalSignDetail = table.Column<string>(type: "text", nullable: false),
SystolicBloodPressure = table.Column<int>(type: "integer", nullable: false),
DiastolicBloodPressure = table.Column<int>(type: "integer", nullable: false),
PulseRate = table.Column<int>(type: "integer", nullable: false),
SPO2 = table.Column<int>(type: "integer", nullable: false),
Temperature = table.Column<int>(type: "integer", nullable: false),
ApplicationUserId = table.Column<Guid>(type: "uuid", nullable: false),
RemovedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedBy = table.Column<string>(type: "text", nullable: false),
IsRemoved = table.Column<bool>(type: "boolean", nullable: false),
RemovedBy = table.Column<string>(type: "text", nullable: false),
ModifiedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
ModifiedBy = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_MedicalHistories", x => x.Id);
table.ForeignKey(
name: "FK_MedicalHistories_Users_ApplicationUserId",
column: x => x.ApplicationUserId,
principalSchema: "public",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "MedicalHistoryTemplates",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
ChiefComplaint = table.Column<string>(type: "text", nullable: false),
SectionId = table.Column<Guid>(type: "uuid", nullable: false),
ApplicationUserId = table.Column<Guid>(type: "uuid", nullable: false),
RemovedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedBy = table.Column<string>(type: "text", nullable: false),
IsRemoved = table.Column<bool>(type: "boolean", nullable: false),
RemovedBy = table.Column<string>(type: "text", nullable: false),
ModifiedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
ModifiedBy = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_MedicalHistoryTemplates", x => x.Id);
table.ForeignKey(
name: "FK_MedicalHistoryTemplates_Users_ApplicationUserId",
column: x => x.ApplicationUserId,
principalSchema: "public",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "Tokens",
schema: "public",
columns: table => new
{
UserId = table.Column<Guid>(type: "uuid", nullable: false),
LoginProvider = table.Column<string>(type: "text", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
Value = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Tokens", x => new { x.UserId, x.LoginProvider, x.Name });
table.ForeignKey(
name: "FK_Tokens_Users_UserId",
column: x => x.UserId,
principalSchema: "public",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "UserRoles",
schema: "public",
columns: table => new
{
UserId = table.Column<Guid>(type: "uuid", nullable: false),
RoleId = table.Column<Guid>(type: "uuid", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_UserRoles", x => new { x.UserId, x.RoleId });
table.ForeignKey(
name: "FK_UserRoles_Roles_RoleId",
column: x => x.RoleId,
principalSchema: "public",
principalTable: "Roles",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_UserRoles_Users_UserId",
column: x => x.UserId,
principalSchema: "public",
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "MedicalHistoryAnswers",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
Answer = table.Column<string>(type: "text", nullable: false),
Question = table.Column<string>(type: "text", nullable: false),
Part = table.Column<int>(type: "integer", nullable: false),
QuestionType = table.Column<int>(type: "integer", nullable: false),
MedicalHistoryId = table.Column<Guid>(type: "uuid", nullable: false),
RemovedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedBy = table.Column<string>(type: "text", nullable: false),
IsRemoved = table.Column<bool>(type: "boolean", nullable: false),
RemovedBy = table.Column<string>(type: "text", nullable: false),
ModifiedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
ModifiedBy = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_MedicalHistoryAnswers", x => x.Id);
table.ForeignKey(
name: "FK_MedicalHistoryAnswers_MedicalHistories_MedicalHistoryId",
column: x => x.MedicalHistoryId,
principalSchema: "public",
principalTable: "MedicalHistories",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "MedicalHistoryQuestions",
schema: "public",
columns: table => new
{
Id = table.Column<Guid>(type: "uuid", nullable: false),
Question = table.Column<string>(type: "text", nullable: false),
Part = table.Column<int>(type: "integer", nullable: false),
QuestionType = table.Column<int>(type: "integer", nullable: false),
MedicalHistoryTemplateId = table.Column<Guid>(type: "uuid", nullable: false),
RemovedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
CreatedBy = table.Column<string>(type: "text", nullable: false),
IsRemoved = table.Column<bool>(type: "boolean", nullable: false),
RemovedBy = table.Column<string>(type: "text", nullable: false),
ModifiedAt = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
ModifiedBy = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_MedicalHistoryQuestions", x => x.Id);
table.ForeignKey(
name: "FK_MedicalHistoryQuestions_MedicalHistoryTemplates_MedicalHist~",
column: x => x.MedicalHistoryTemplateId,
principalSchema: "public",
principalTable: "MedicalHistoryTemplates",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateIndex(
name: "IX_Claims_UserId",
schema: "public",
table: "Claims",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_Logins_UserId",
schema: "public",
table: "Logins",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_MedicalHistories_ApplicationUserId",
schema: "public",
table: "MedicalHistories",
column: "ApplicationUserId");
migrationBuilder.CreateIndex(
name: "IX_MedicalHistoryAnswers_MedicalHistoryId",
schema: "public",
table: "MedicalHistoryAnswers",
column: "MedicalHistoryId");
migrationBuilder.CreateIndex(
name: "IX_MedicalHistoryQuestions_MedicalHistoryTemplateId",
schema: "public",
table: "MedicalHistoryQuestions",
column: "MedicalHistoryTemplateId");
migrationBuilder.CreateIndex(
name: "IX_MedicalHistoryTemplates_ApplicationUserId",
schema: "public",
table: "MedicalHistoryTemplates",
column: "ApplicationUserId");
migrationBuilder.CreateIndex(
name: "IX_RoleClaims_RoleId",
schema: "public",
table: "RoleClaims",
column: "RoleId");
migrationBuilder.CreateIndex(
name: "RoleNameIndex",
schema: "public",
table: "Roles",
column: "NormalizedName",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Sections_UniversityId",
schema: "public",
table: "Sections",
column: "UniversityId");
migrationBuilder.CreateIndex(
name: "IX_Universities_CityId",
schema: "public",
table: "Universities",
column: "CityId");
migrationBuilder.CreateIndex(
name: "IX_UserRoles_RoleId",
schema: "public",
table: "UserRoles",
column: "RoleId");
migrationBuilder.CreateIndex(
name: "EmailIndex",
schema: "public",
table: "Users",
column: "NormalizedEmail");
migrationBuilder.CreateIndex(
name: "IX_Users_SectionId",
schema: "public",
table: "Users",
column: "SectionId");
migrationBuilder.CreateIndex(
name: "IX_Users_UniversityId",
schema: "public",
table: "Users",
column: "UniversityId");
migrationBuilder.CreateIndex(
name: "UserNameIndex",
schema: "public",
table: "Users",
column: "NormalizedUserName",
unique: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Claims",
schema: "public");
migrationBuilder.DropTable(
name: "Logins",
schema: "public");
migrationBuilder.DropTable(
name: "MedicalHistoryAnswers",
schema: "public");
migrationBuilder.DropTable(
name: "MedicalHistoryQuestions",
schema: "public");
migrationBuilder.DropTable(
name: "RoleClaims",
schema: "public");
migrationBuilder.DropTable(
name: "Tokens",
schema: "public");
migrationBuilder.DropTable(
name: "UserRoles",
schema: "public");
migrationBuilder.DropTable(
name: "MedicalHistories",
schema: "public");
migrationBuilder.DropTable(
name: "MedicalHistoryTemplates",
schema: "public");
migrationBuilder.DropTable(
name: "Roles",
schema: "public");
migrationBuilder.DropTable(
name: "Users",
schema: "public");
migrationBuilder.DropTable(
name: "Sections",
schema: "public");
migrationBuilder.DropTable(
name: "Universities",
schema: "public");
migrationBuilder.DropTable(
name: "Cities",
schema: "public");
}
}
}

View File

@ -1,829 +0,0 @@
// <auto-generated />
using System;
using DocuMed.Repository.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace DocuMed.Repository.Migrations
{
[DbContext(typeof(ApplicationContext))]
partial class ApplicationContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasDefaultSchema("public")
.HasAnnotation("ProductVersion", "7.0.11")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("DocuMed.Domain.Entities.City.City", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Cities", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.Section", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Detail")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.Property<Guid>("UniversityId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("UniversityId");
b.ToTable("Sections", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.University", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("Address")
.IsRequired()
.HasColumnType("text");
b.Property<Guid>("CityId")
.HasColumnType("uuid");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CityId");
b.ToTable("Universities", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistory", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("AddictionHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Age")
.HasColumnType("integer");
b.Property<string>("AllergyDetail")
.IsRequired()
.HasColumnType("text");
b.Property<Guid>("ApplicationUserId")
.HasColumnType("uuid");
b.Property<DateTime>("BirthDate")
.HasColumnType("timestamp without time zone");
b.Property<string>("ChiefComplaint")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<int>("DiastolicBloodPressure")
.HasColumnType("integer");
b.Property<string>("DrugHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<string>("FamilyHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<string>("FatherName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<string>("NationalId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("PastDiseasesHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<string>("PastSurgeryHistoryDetail")
.IsRequired()
.HasColumnType("text");
b.Property<string>("PresentIllnessDetail")
.IsRequired()
.HasColumnType("text");
b.Property<int>("PulseRate")
.HasColumnType("integer");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SPO2")
.HasColumnType("integer");
b.Property<string>("Section")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SystemReviewDetail")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SystolicBloodPressure")
.HasColumnType("integer");
b.Property<int>("Temperature")
.HasColumnType("integer");
b.Property<string>("VitalSignDetail")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ApplicationUserId");
b.ToTable("MedicalHistories", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistoryAnswer", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("Answer")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<Guid>("MedicalHistoryId")
.HasColumnType("uuid");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Part")
.HasColumnType("integer");
b.Property<string>("Question")
.IsRequired()
.HasColumnType("text");
b.Property<int>("QuestionType")
.HasColumnType("integer");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("MedicalHistoryId");
b.ToTable("MedicalHistoryAnswers", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryQuestion", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<Guid>("MedicalHistoryTemplateId")
.HasColumnType("uuid");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Part")
.HasColumnType("integer");
b.Property<string>("Question")
.IsRequired()
.HasColumnType("text");
b.Property<int>("QuestionType")
.HasColumnType("integer");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("MedicalHistoryTemplateId");
b.ToTable("MedicalHistoryQuestions", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryTemplate", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<Guid>("ApplicationUserId")
.HasColumnType("uuid");
b.Property<string>("ChiefComplaint")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("CreatedBy")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsRemoved")
.HasColumnType("boolean");
b.Property<DateTime>("ModifiedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("ModifiedBy")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RemovedAt")
.HasColumnType("timestamp without time zone");
b.Property<string>("RemovedBy")
.IsRequired()
.HasColumnType("text");
b.Property<Guid>("SectionId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("ApplicationUserId");
b.ToTable("MedicalHistoryTemplates", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.User.ApplicationRole", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<string>("EnglishName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PersianName")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("Roles", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.User.ApplicationUser", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property<int>("AccessFailedCount")
.HasColumnType("integer");
b.Property<DateTime>("BirthDate")
.HasColumnType("timestamp without time zone");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("text");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("boolean");
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Gender")
.HasColumnType("integer");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("LockoutEnabled")
.HasColumnType("boolean");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("timestamp with time zone");
b.Property<string>("NationalId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<string>("PasswordHash")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.HasColumnType("text");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("boolean");
b.Property<Guid?>("SectionId")
.HasColumnType("uuid");
b.Property<string>("SecurityStamp")
.HasColumnType("text");
b.Property<int>("SignUpStatus")
.HasColumnType("integer");
b.Property<string>("StudentId")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("boolean");
b.Property<Guid?>("UniversityId")
.HasColumnType("uuid");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.HasIndex("SectionId");
b.HasIndex("UniversityId");
b.ToTable("Users", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<System.Guid>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<Guid>("RoleId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("RoleClaims", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("text");
b.Property<string>("ClaimValue")
.HasColumnType("text");
b.Property<Guid>("UserId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Claims", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("ProviderKey")
.HasColumnType("text");
b.Property<string>("ProviderDisplayName")
.HasColumnType("text");
b.Property<Guid>("UserId")
.HasColumnType("uuid");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("Logins", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<System.Guid>", b =>
{
b.Property<Guid>("UserId")
.HasColumnType("uuid");
b.Property<Guid>("RoleId")
.HasColumnType("uuid");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("UserRoles", "public");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
{
b.Property<Guid>("UserId")
.HasColumnType("uuid");
b.Property<string>("LoginProvider")
.HasColumnType("text");
b.Property<string>("Name")
.HasColumnType("text");
b.Property<string>("Value")
.HasColumnType("text");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("Tokens", "public");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.Section", b =>
{
b.HasOne("DocuMed.Domain.Entities.City.University", "University")
.WithMany("Sections")
.HasForeignKey("UniversityId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("University");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.University", b =>
{
b.HasOne("DocuMed.Domain.Entities.City.City", "City")
.WithMany("Universities")
.HasForeignKey("CityId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("City");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistory", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", "ApplicationUser")
.WithMany()
.HasForeignKey("ApplicationUserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("ApplicationUser");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistoryAnswer", b =>
{
b.HasOne("DocuMed.Domain.Entities.MedicalHistory.MedicalHistory", "MedicalHistory")
.WithMany("Answers")
.HasForeignKey("MedicalHistoryId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("MedicalHistory");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryQuestion", b =>
{
b.HasOne("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryTemplate", "MedicalHistoryTemplate")
.WithMany("Questions")
.HasForeignKey("MedicalHistoryTemplateId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("MedicalHistoryTemplate");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryTemplate", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", "ApplicationUser")
.WithMany()
.HasForeignKey("ApplicationUserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("ApplicationUser");
});
modelBuilder.Entity("DocuMed.Domain.Entities.User.ApplicationUser", b =>
{
b.HasOne("DocuMed.Domain.Entities.City.Section", "Section")
.WithMany()
.HasForeignKey("SectionId");
b.HasOne("DocuMed.Domain.Entities.City.University", "University")
.WithMany()
.HasForeignKey("UniversityId");
b.Navigation("Section");
b.Navigation("University");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
{
b.HasOne("DocuMed.Domain.Entities.User.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.City", b =>
{
b.Navigation("Universities");
});
modelBuilder.Entity("DocuMed.Domain.Entities.City.University", b =>
{
b.Navigation("Sections");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistory.MedicalHistory", b =>
{
b.Navigation("Answers");
});
modelBuilder.Entity("DocuMed.Domain.Entities.MedicalHistoryTemplate.MedicalHistoryTemplate", b =>
{
b.Navigation("Questions");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -1,14 +1,10 @@
using DocuMed.Repository.Abstracts; namespace DocuMed.Repository.Repositories.Base
namespace DocuMed.Repository.Repositories.Base
{ {
public class BaseRepository<T> : Repository<T>, IBaseRepository<T> where T : class, IApiEntity public class BaseRepository<T> : Repository<T>, IBaseRepository<T> where T : class, IApiEntity
{ {
protected readonly ICurrentUserService CurrentUserService; public BaseRepository(ApplicationContext dbContext) : base(dbContext)
public BaseRepository(ApplicationContext dbContext,ICurrentUserService currentUserService) : base(dbContext)
{ {
CurrentUserService = currentUserService;
} }
public virtual async ValueTask<T> GetByIdAsync(CancellationToken cancellationToken, params object[] ids) public virtual async ValueTask<T> GetByIdAsync(CancellationToken cancellationToken, params object[] ids)
@ -59,32 +55,13 @@ namespace DocuMed.Repository.Repositories.Base
public virtual void Delete(T entity) public virtual void Delete(T entity)
{ {
AssertExtensions.NotNull(entity, nameof(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) public virtual void DeleteRange(IEnumerable<T> entities)
{ {
var apiEntities = entities.ToList(); AssertExtensions.NotNull(entities, nameof(entities));
AssertExtensions.NotNull(apiEntities, nameof(entities)); Entities.RemoveRange(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 #endregion

View File

@ -2,15 +2,13 @@
public class RepositoryWrapper : IRepositoryWrapper public class RepositoryWrapper : IRepositoryWrapper
{ {
private readonly ApplicationContext _context; private readonly ApplicationContext _context;
private readonly ICurrentUserService _currentUserService;
private IDbContextTransaction? _currentTransaction; private IDbContextTransaction? _currentTransaction;
public RepositoryWrapper(ApplicationContext context,ICurrentUserService currentUserService) public RepositoryWrapper(ApplicationContext context)
{ {
_context = context; _context = context;
_currentUserService = currentUserService;
} }
public IBaseRepository<T> SetRepository<T>() where T : ApiEntity => new BaseRepository<T>(_context, _currentUserService); public IBaseRepository<T> SetRepository<T>() where T : ApiEntity => new BaseRepository<T>(_context);
public async Task RollBackAsync(CancellationToken cancellationToken) public async Task RollBackAsync(CancellationToken cancellationToken)
@ -44,21 +42,20 @@ public class RepositoryWrapper : IRepositoryWrapper
{ {
entity.Property(e => e.CreatedAt) entity.Property(e => e.CreatedAt)
.CurrentValue = DateTime.Now; .CurrentValue = DateTime.Now;
if (_currentUserService.UserName != null)
entity.Property(e => e.CreatedBy)
.CurrentValue = _currentUserService.UserName;
} }
if (entity.State == EntityState.Modified) if (entity.State == EntityState.Modified)
{
if (!entity.Property(e => e.IsRemoved).CurrentValue)
{ {
entity.Property(e => e.ModifiedAt) entity.Property(e => e.ModifiedAt)
.CurrentValue = DateTime.Now; .CurrentValue = DateTime.Now;
if (_currentUserService.UserName != null)
entity.Property(e => e.ModifiedBy)
.CurrentValue = _currentUserService.UserName;
} }
if (entity.State == EntityState.Deleted)
{
entity.Property(e => e.RemovedAt)
.CurrentValue = DateTime.Now;
entity.Property(e => e.IsRemoved)
.CurrentValue = true;
} }
} }
} }

View File

@ -1,7 +0,0 @@
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);
}

View File

@ -1,32 +0,0 @@
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;
}
}