This commit is contained in:
mmrbnjd
2025-07-11 20:37:28 +03:30
parent 1924c88e7a
commit ff342a53c0
156 changed files with 13746 additions and 35 deletions

View File

@@ -0,0 +1,53 @@
using Common.Models.Auth;
using Common.Models.Auth.CompanySide;
using Common.Models.Auth.UserSide;
using Hushian.Application.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Hushian.WebApi.Controllers.v1
{
[Route("api/v1/[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
private readonly AuthService _authService;
private readonly VerificationService _verificationService;
public AuthController(AuthService authService, VerificationService verificationService)
{
_authService = authService;
_verificationService = verificationService;
}
[HttpPost("loginCompanySide")]
public async Task<ActionResult<AuthResponse>> login([FromBody] AuthRequestFromCompanySide request)
{
var response = await _authService.AuthenticationFromCompanySide(request);
if (response.Success) return Ok(response.Value);
else return BadRequest(response.Errors);
}
[HttpPost("AuthenticationFromUser")]
public async Task<ActionResult<int>> AuthenticationFromUser([FromBody] AuthRequestFromUserSide request)
{
var response = await _authService.AuthenticationFromUserSide(request);
if (response.Success) return Ok(response.Value);
else return BadRequest(response.Errors);
}
[HttpPut("UserLoginVerification/{ID}/{Code}")]
public async Task<ActionResult<AuthResponse>> UserLoginVerification(int ID,string Code)
{
var response = await _verificationService.VerificationCode(new Common.Dtos.Verification.ConfirmedCodeDto()
{ code =Code,codeType=Common.Enums.VerificationCodeType.Login,Id=ID});
if (response.Success) return Ok(response.Value);
else return BadRequest(response.Errors);
}
[HttpGet("IsOnline")]
[Authorize]
public async Task<ActionResult> IsOnline()
{
return NoContent();
}
}
}

View File

@@ -0,0 +1,45 @@
using Common.Dtos.Company;
using Hushian.Application.Constants;
using Hushian.Application.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Hushian.WebApi.Controllers.v1
{
[Route("api/v1/[controller]")]
[ApiController]
public class CompanyController : ControllerBase
{
private readonly CompanyService _companyService;
public CompanyController(CompanyService companyService)
{
_companyService = companyService;
}
[HttpPost("NewCompany")]
public async Task<ActionResult<int>> NewCompany([FromBody] RegisterCompanyDto request)
{
var response = await _companyService.RegisterCompany(request);
return response.Success ? Ok(response.Value)
: BadRequest(response.Errors);
}
[HttpGet("GetCompany/{CompanyID}")]
public async Task<ActionResult<ReadANDUpdate_CompanyDto>> GetCompany(int CompanyID)
{
var response = await _companyService.GETCompanyinformation(CompanyID);
return response!=null ? Ok(response): NotFound();
}
[HttpPut("UpdateCompany")]
[Authorize(Roles = "Company")]
public async Task<ActionResult> UpdateCompany([FromBody] ReadANDUpdate_CompanyDto model)
{
string CompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
var response = await _companyService.EditCompany(model,Convert.ToInt32(CompanyID));
return response.Success && response.Value ? NoContent()
: BadRequest(response.Errors);
}
}
}

View File

@@ -0,0 +1,162 @@
using Common.Dtos.Conversation;
using Common.Enums;
using Hushian.Application.Constants;
using Hushian.Application.Services;
using Hushian.Domain.Entites;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Hushian.WebApi.Controllers.v1
{
[Route("api/v1/[controller]")]
[ApiController]
[Authorize]
public class ConversationController : ControllerBase
{
private readonly ConversationService _conversationService;
private readonly CompanyService _companyService;
private readonly ExperService _experService;
public ConversationController(ConversationService conversationService, CompanyService companyService)
{
_conversationService = conversationService;
_companyService = companyService;
}
[HttpGet("MyConversation")]
[Authorize(Roles = "Company,Exper")]
public async Task<ActionResult> MyConversation(ConversationStatus status)
{
if (User.IsInRole("Exper"))
{
string strExperID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int ExperID = Convert.ToInt32(strExperID);
var response = await _conversationService.GetConversationByExperID(ExperID, status);
return Ok(response);
}
else if (User.IsInRole("Company"))
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _conversationService.GetConversationByCompanyID(CompanyID, status);
return Ok(response);
}
return Forbid();
}
[HttpGet("ConversationAwaitingOurResponse")]
[Authorize(Roles = "Company,Exper")]
public async Task<ActionResult> ConversationAwaitingOurResponse()
{
int CompanyID = 0;
if (User.IsInRole("Exper"))
{
string strExperID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int ExperID = Convert.ToInt32(strExperID);
CompanyID = await _experService.GetCompanyIDExper(ExperID);
}
else if (User.IsInRole("Company"))
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
CompanyID = Convert.ToInt32(strCompanyID);
}
var response = await _conversationService.ConversationAwaitingOurResponse(CompanyID);
return Ok(response);
}
[HttpGet("ConversationItems/{ConversationID}")]
[Authorize(Roles = "Company,Exper,User")]
public async Task<ActionResult> GetConversationItems(int ConversationID)
{
return Ok(await _conversationService.GetConversationItems(ConversationID));
}
[HttpPost("NewConversationFromCurrentUser")]
public async Task<ActionResult> NewConversationFromCurrentUser(ADD_ConversationDto conversation)
{
string UserID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
var response = await _conversationService.NewConversation(conversation);
return response.Success ? Ok(response.Value)
: BadRequest(response.Errors);
}
[HttpPost("ADDConversationResponse")]
[Authorize(Roles = "Company,User,Exper")]
public async Task<ActionResult> ADDConversationResponse([FromBody] ADD_ConversationResponseDto ConversationItem)
{
int? ExperID = null;
if (User.IsInRole("Exper"))
{
string strExperID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
ExperID = Convert.ToInt32(strExperID);
ConversationItem.Type = ConversationType.EU;
}
else if (User.IsInRole("User"))
{
ConversationItem.Type = ConversationType.UE;
}
else if (User.IsInRole("Company"))
{
ConversationItem.Type = ConversationType.CU;
}
else return Unauthorized();
var Response = await _conversationService.NewConversationResponse(ConversationItem, ExperID);
return Response.Success ? Ok(Response.Value)
: BadRequest(Response.Errors);
}
[HttpPut("MarkAsReadConversationItem/{ConversationItemID}")]
[Authorize(Roles = "Company,User,Exper")]
public async Task<ActionResult> MarkAsReadConversationItem(int ConversationItemID)
{
int? ExperID = null;
ConversationType Type = ConversationType.UE;
if (User.IsInRole("Exper"))
{
string strExperID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
ExperID = Convert.ToInt32(strExperID);
Type = ConversationType.EU;
}
else if (User.IsInRole("User"))
{
Type = ConversationType.UE;
}
else if (User.IsInRole("Company"))
{
Type = ConversationType.CU;
}
else return Unauthorized();
return await _conversationService.MarkAsReadConversationItem(ConversationItemID, Type, ExperID) ? NoContent()
: BadRequest(new List<string>() { "خطا در بروزرسانی گفتگو" });
}
[HttpGet("ConversationIsFinish/{ConversationID}")]
[Authorize(Roles = "Company,Exper")]
public async Task<ActionResult> ConversationIsFinish(int ConversationID)
{
return await _conversationService.FinishConversation(ConversationID) ? NoContent()
: BadRequest(new List<string> { "خطا در بروزرسانی وضعیت" });
}
[HttpGet("CountQueueCompany/{CompanyID}")]
[Authorize]
public async Task<ActionResult<int>> GetCountQueueCompany(int CompanyID, int GroupID)
{
return Ok(await _conversationService.GetCountQueueCompany(CompanyID, GroupID));
}
[HttpGet("ConversationFromUserSide/{CompanyID}")]
[Authorize(Roles = "User")]
public async Task<ActionResult> GetConversationFromUserSide(int CompanyID)
{
string strUserID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int UserID = Convert.ToInt32(strUserID);
var response = await _conversationService.GEtConversation(CompanyID, UserID);
return Ok(response) ;
}
}
}

View File

@@ -0,0 +1,118 @@

using Azure;
using Common.Dtos;
using Common.Dtos.Exper;
using Hushian.Application.Constants;
using Hushian.Application.Services;
using Hushian.Domain.Entites;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.IdentityModel.Tokens.Jwt;
namespace Hushian.WebApi.Controllers.v1
{
[Route("api/v1/[controller]")]
[ApiController]
public class ExperController : ControllerBase
{
private readonly ExperService _experService;
[HttpPost("AddExper")]
[Authorize(Roles = "Company")]
public async Task<ActionResult> AddExper([FromBody] ADD_ExperDto userDto)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _experService.ADDExper(userDto, CompanyID);
return response.Success ? NoContent()
: BadRequest(response.Errors);
}
[HttpGet("GetExpersCompany/{CompanyID}")]
[Authorize]
public async Task<ActionResult> GetExpersCompany(int CompanyID, int PageIndex = 1, int PageSize = 10)
{
var response = await _experService.GetExpersInCompany(CompanyID);
return Ok(response);
}
[HttpPut("EditUserYourself")] //ویرایش کاربران توسط خود
[Authorize(Roles = "Exper")]
public async Task<ActionResult> EditUserYourself([FromBody] Update_ExperDto editUser)
{
string strExperID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int ExperID = Convert.ToInt32(strExperID);
var response = await _experService.UpdateExper(editUser,ExperID);
return response ? NoContent()
: BadRequest(new List<string> { "یافت نشد" });
}
[HttpGet("GetCurrentExper")]
[Authorize(Roles = "Exper")]
public async Task<ActionResult> GetCurrentUser()
{
string strExperID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int ExperID = Convert.ToInt32(strExperID);
var response = await _experService.GetInfoExper(ExperID);
return response!=null ? Ok(response) : BadRequest(new List<string> { "یافت نشد" });
}
[HttpPut("ExperEditingFromManager/{ExperID}")] //ویرایش کارشناس توسط مدیرش
[Authorize(Roles = "Company")]
public async Task<ActionResult> ExperEditingFromManager(int ExperID,[FromBody] Update_ExperDto editUser)
{
var response = await _experService.UpdateExper(editUser, ExperID);
return response ? NoContent()
: BadRequest(new List<string> { "یافت نشد" });
}
//---
[HttpPut("ChangePasswordYourself")] //تغییر کلمه عبور کاربران توسط خود
[Authorize(Roles = "Exper")]
public async Task<ActionResult> ChangePasswordYourself([FromBody] ChangePasswordDto item)
{
string strExperID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int ExperID = Convert.ToInt32(strExperID);
var response = await _experService.ChangePasswordExperFromExper(item,ExperID);
return response.Success && response.Value ? NoContent()
: BadRequest(response.Errors);
}
[HttpPut("ChangePasswordFromManager/{ExperID}")] //تغییر کلمه عبور کارشناس توسط مدیرش
[Authorize(Roles = "Company")]
public async Task<ActionResult> ChangePasswordFromManager(int ExperID,[FromBody] ChangePasswordDto item)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _experService.ChangePasswordExperFromCompanyManaget(item, ExperID,CompanyID);
return response.Success && response.Value ? NoContent()
: BadRequest(response.Errors);
}
[HttpPut("ChangeAvailableExperFromManager/{ExperID}")] //تغییر وضعیت در دسترس بودن یا نبودن کارشناس توسط مدیرش
[Authorize(Roles = "Company")]
public async Task<ActionResult> ChangeAvailableExperFromManager(int ExperID, bool Available)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _experService.ChangeAvailableExper(ExperID,CompanyID,Available);
return response ? NoContent()
: BadRequest(new List<string> { "یافت نشد"});
}
[HttpDelete("DeleteExperFromManager/{ExperID}")]
[Authorize(Roles = "Company")]
public async Task<ActionResult> DeleteExperFromManager(int ExperID)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _experService.DeleteExper(ExperID, CompanyID);
return response ? NoContent()
: BadRequest(new List<string> { "یافت نشد" });
}
}
}

View File

@@ -0,0 +1,119 @@
using Common.Dtos.Exper;
using Common.Dtos.Group;
using Hushian.Application.Constants;
using Hushian.Application.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Hushian.WebApi.Controllers.v1
{
[Route("api/v1/[controller]")]
[ApiController]
public class GroupController : ControllerBase
{
private readonly GroupService _groupService;
private readonly CompanyService _companyService;
public GroupController(GroupService groupService, CompanyService companyService)
{
_groupService = groupService;
_companyService = companyService;
}
[HttpPost("AddGroup")]
[Authorize(Roles = "Company")]
public async Task<ActionResult> AddGroup([FromBody] ADD_GroupDto Group)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _groupService.NewGroup(Group, CompanyID);
return response.Success && response.Value ? NoContent()
: BadRequest(response.Errors);
}
[HttpPut("UpdateGroup")]
[Authorize(Roles = "Company")]
public async Task<ActionResult> UpdateGroup([FromBody] Update_GroupDto Group)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _groupService.UpdateGroup(Group, CompanyID);
return response.Success && response.Value ? NoContent()
: BadRequest(response.Errors);
}
[HttpPut("JoinExperToGroup/{GroupID}/{ExperID}")]
[Authorize(Roles = "Company")]
public async Task<ActionResult> JoinExperToGroup(int GroupID, int ExperID)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _groupService.JoinExperInGroup(GroupID, ExperID, CompanyID);
return response.Success && response.Value ? NoContent()
: BadRequest(response.Errors);
}
[HttpPut("UnJoinExperToGroup/{GroupID}/{ExperID}")]
[Authorize(Roles = "Company")]
public async Task<ActionResult> UnJoinExperToGroup(int GroupID, int ExperID)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _groupService.UnJoinExperInGroup(GroupID, ExperID, CompanyID);
return response.Success && response.Value ? NoContent()
: BadRequest(response.Errors);
}
[HttpDelete("DeleteGroup/{GroupID}")]
[Authorize(Roles = "Company")]
public async Task<ActionResult> DeleteGroup(int GroupID)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _groupService.DeleteGroup(GroupID, CompanyID);
return response.Success && response.Value ? NoContent()
: BadRequest(response.Errors);
}
[HttpGet("GetGroupsCompany")]
[Authorize]
public async Task<ActionResult<List<Read_GroupDto>>> GetGroups(int? CompanyID)
{
if (!CompanyID.HasValue)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
CompanyID = Convert.ToInt32(strCompanyID);
}
var response = await _groupService.GetGroupsCompany(CompanyID.Value);
return Ok(response);
}
[HttpGet("GetGroupsFromExperID")]
[Authorize]
public async Task<ActionResult<List<Read_GroupDto>>> GetGroups(int ExperID)
{
var response = await _groupService.GetGroupsExper(ExperID);
return Ok(response);
}
[HttpGet("GetExpersFromGroupID/{GroupID}")]
public async Task<ActionResult<List<Read_ExperDto>>> GetExpersGroup(int GroupID)
{
var response = await _groupService.GetExpersFromGroupID(GroupID);
return Ok(response);
}
//[HttpGet("GetOnlineExpersFromGroupID/{GroupID}")]
//public async Task<ActionResult<AuthResponse>> GetOnlineExpersGroup(int GroupID)
//{
// var CompanyID = await _companyService.GetCompanyID(User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First());
// var response = await _groupService.GetOnlineExpersGroup(GroupID, CompanyID.GetValueOrDefault());
// return response.Success ? Ok(response.Value)
// : BadRequest(response.Errors);
//}
[HttpPut("ChangeAvailableGroupFromManager/{GroupID}")] //تغییر وضعیت در دسترس بودن یا نبودن گروه' توسط مدیرش
[Authorize(Roles = "Company")]
public async Task<ActionResult> ChangeAvailableExperFromManager(int GroupID, bool Available)
{
string strCompanyID = User.Claims.Where(w => w.Type == CustomClaimTypes.Uid).Select(s => s.Value).First();
int CompanyID = Convert.ToInt32(strCompanyID);
var response = await _groupService.ChangeAvailableGroup(new Common.Dtos.Exper.ChangeAvailable_GroupDto()
{ Available=Available,ID=GroupID}, CompanyID);
return response? NoContent()
: BadRequest(new List<string> { "یافت نشد"});
}
}
}

View File

@@ -0,0 +1,11 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Hushian.WebApi.Controllers.v1
{
[Route("api/v1/[controller]")]
[ApiController]
public class UserController : ControllerBase
{
}
}

View File

@@ -0,0 +1,42 @@
using Common.Dtos.Verification;
using Hushian.Application.Services;
using Microsoft.AspNetCore.Mvc;
namespace Hushian.WebApi.Controllers.v1
{
[Route("api/v1/[controller]")]
[ApiController]
public class VerificationController : ControllerBase
{
private readonly VerificationService _verificationService;
public VerificationController(VerificationService verificationService)
{
_verificationService = verificationService;
}
//------ UserName by Exper - Mobile by Company
[HttpGet("ForgetPassword/{input}")]
public async Task<ActionResult<int>> GetIDAndSendCodeForForgetPasswordByUserID(string input)
{
var response = await _verificationService.GenerateCodeByForgetPassword(input);
return response > 0 ? Ok(response)
: BadRequest(new List<string> { "خطا در ارسال کد احراز"});
}
[HttpGet("ReSendCode/{ID}")]
public async Task<ActionResult<int>> ReSendCodeByID(int ID)
{
var response = await _verificationService.ReSendCode(ID);
return response ? NoContent()
: BadRequest(new List<string> { "خطا در ارسال کد احراز" });
}
[HttpPost("ConfirmedCode")]
public async Task<ActionResult> ConfirmedCode(ConfirmedCodeDto model)
{
var response = await _verificationService.VerificationCode(model);
return response.Success ? NoContent()
: BadRequest(response.Errors);
}
}
}