Files
moadiran/Back/Controllers/BaseController.cs
mmrbnjd 7b8127dc72 ...
2024-04-29 07:58:41 +03:30

191 lines
8.0 KiB
C#

using Back.Common;
using Back.Data.Models;
using Back.Services;
using Back.Validations;
using FluentValidation;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Shared.DTOs;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace Back.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class BaseController : ControllerBase
{
private readonly ServBase _sBase;
private readonly MobileValidation _mobilevalidation;
private readonly servCompany _servCompany;
private readonly servUser _servUser;
private readonly servPermission _servPermission;
private readonly ServValidatinMsg _servValidatinMsg;
private readonly servSendMsg _servSendMsg;
private readonly CompanyRegistrationValidation _companyRegistrationValidation;
public BaseController(ServBase sBase, MobileValidation mobilevalidation
, servCompany servCompany, servUser servUser
, servPermission servPermission, ServValidatinMsg servValidatinMsg
, servSendMsg servSendMsg, CompanyRegistrationValidation companyRegistrationValidation)
{
_sBase = sBase;
_mobilevalidation = mobilevalidation;
_servCompany = servCompany;
_servUser = servUser;
_servPermission = servPermission;
_servValidatinMsg = servValidatinMsg;
_servSendMsg = servSendMsg;
_companyRegistrationValidation = companyRegistrationValidation;
}
[HttpGet("Pricing")]
public async Task<ActionResult<List<BasePriceDto>>> Pricing()
=> Ok(await _sBase.GetBasePrice());
[HttpGet("DateTimeServer")]
public async Task<ActionResult<DateTime>> DateTimeServer()
=> Ok(DateTime.Now);
[HttpGet("LastBlog")]
public async Task<ActionResult<PagingDto<BlogDto>>> LastBlog(int PageIndex, int PageSize)
=> Ok(await _sBase.GetBlog(PageIndex, PageSize));
[HttpGet("GetBlogByID/{ID}")]
public async Task<ActionResult<BlogDtoFull?>> GetBlogByID(int ID)
{
var result = await _sBase.GetBlogByID(ID);
if (result == null)
return NotFound();
return Ok(result);
}
[HttpGet("LastQuestion")]
public async Task<ActionResult<PagingDto<QuestionDto>>> LastQuestion(int PageIndex, int PageSize)
=> Ok(await _sBase.GetQuestion(PageIndex, PageSize));
[HttpPost("CreateCsrAndPrivateKey")]
public async Task<ActionResult<TaxToolsDTO>> CreateCsrAndPrivateKey(CsrPrivateKeyDto model)
{
var resultValidationmodel = await _mobilevalidation.ValidateAsync(Tuple.Create(model.Mobile,false));
if (!resultValidationmodel.IsValid)
return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList());
return Ok(await _sBase.CreateCsrAndPrivateKey(model));
}
[HttpPost("ReadPublicKeyFromCER")]
public async Task<ActionResult<PublicKeyDTO>> ReadPublicKeyFromCER(string modelfromBase64)
{
var result = await _sBase.ReadPublicKeyFromCER(modelfromBase64);
if (result.type == "error")
return BadRequest();
return Ok(result);
}
[HttpPost("CompanyRegistration")]
[AllowAnonymous]
public async Task<ActionResult<string>> CompanyRegistration([FromBody] CompanyRegistrationDTO item)
{
var resultValidationmodel = await _companyRegistrationValidation.ValidateAsync(item);
if (!resultValidationmodel.IsValid)
return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList());
try
{
var user = new User()
{
Fullname = item.FullnameUser,
Mobile = item.Mobile,
Username = item.Username,
Password = item.Mobile.encrypted(),
IsActive = false
};
user = await _servUser.AddUser(user);
var company =await _servCompany.GetCompanyOrgByMobileAndCompanynotActive(item.Mobile);
if (company==null)
{
company = new Company()
{
Name = item.CompanyName,
Mobile = item.Mobile,
RegisterDate = DateTime.Now.ConvertMiladiToShamsi(),
IsActive = false
};
}
else
{
company.Name = item.CompanyName;
company.RegisterDate = DateTime.Now.ConvertMiladiToShamsi();
company.IsActive = false;
}
company = await _servCompany.AddORUpdateCompany(company);
var allper = await _servPermission.GetPermissions();
var roluser = new RolUser()
{
CompanyID = company.ID,
UserID = user.ID,
IsAdmin = true
};
roluser = await _servPermission.AddRolUser(roluser);
await _servPermission.AddRangePermissionPeriodByCompany(new List<PermissionPeriod>()
{
new PermissionPeriod(){CompanyID=company.ID,PermissionID=2,CalculationTypeID=2,RemainingAmount=0,TotalAmount=0},
new PermissionPeriod(){CompanyID=company.ID,PermissionID=3,CalculationTypeID=1,RemainingAmount=5,TotalAmount=5},
new PermissionPeriod(){CompanyID=company.ID,PermissionID=4,CalculationTypeID=1,RemainingAmount=5,TotalAmount=5},
new PermissionPeriod(){CompanyID=company.ID,PermissionID=5,CalculationTypeID=1,RemainingAmount=5,TotalAmount=5},
new PermissionPeriod(){CompanyID=company.ID,PermissionID=16,CalculationTypeID=1,RemainingAmount=5,TotalAmount=5},
new PermissionPeriod(){CompanyID=company.ID,PermissionID=6,CalculationTypeID=2,RemainingAmount=0,TotalAmount=0}
});
await _servPermission.AddPermissionUser(roluser.ID, allper.Select(s => s.ID).ToArray());
var ID = await _servValidatinMsg.GenerateCode(new VerificationCode
{
prm = company.ID.ToString(),
val = user.ID.ToString(),
Type = "CompanyRegistration"
});
_servSendMsg.Authentication(company.Mobile, ID.ToString());
return Ok(ID);
}
catch (Exception ex)
{
//SysLog log = new SysLog()
//{
// TraceIdentifierID = HttpContext.TraceIdentifier,
// Datetime = DateTime.Now.ConvertMiladiToShamsi(),
// Method = HttpContext.Request.Method,
// Value = ex.Message,
// Route = HttpContext.Request.Path,
// Type = "catch"
//};
//_contextMongodb.InsertItem(log);
return BadRequest("خطای سیستمی رخ داده");
}
}
[HttpPost("ForgetPassWord")]
[AllowAnonymous]
public async Task<ActionResult<string>> ForgetPassWord(ForgetPasswordItem Item)
{
var resultValidationmodel = await _mobilevalidation.ValidateAsync(Tuple.Create(Item.Username, true));
if (!resultValidationmodel.IsValid)
return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList());
var ID = await _servValidatinMsg.GenerateCode(new VerificationCode
{
prm = Item.Username,
val = Item.PassWord,
Type = "ForgetPassword"
});
_servSendMsg.Authentication(Item.Username, ID.ToString());
return Ok(ID);
}
}
}