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 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 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 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 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 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>> 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>> GetGroups(int ExperID) { var response = await _groupService.GetGroupsExper(ExperID); return Ok(response); } [HttpGet("GetExpersFromGroupID/{GroupID}")] public async Task>> GetExpersGroup(int GroupID) { var response = await _groupService.GetExpersFromGroupID(GroupID); return Ok(response); } //[HttpGet("GetOnlineExpersFromGroupID/{GroupID}")] //public async Task> 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 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 { "یافت نشد"}); } } }