using AutoMapper; using Common.Dtos.Exper; using Common.Dtos.Group; using Hushian.Application.Contracts.Persistence; using Hushian.Application.Models; using Hushian.Application.Validation; using Hushian.Domain.Entites; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Hushian.Application.Services { public class GroupService { private readonly IGenericRepository _GroupRepository; private readonly IGenericRepository _EGRepository; private readonly IMapper _mapper; private readonly ExperService _experService; public async Task> NewGroup(ADD_GroupDto model, int CompanyID) { ResponseBase Response = new(); if (!model.Name.IsOnlyPersianLetters()) Response.Errors.Add("نام باید کاملا به صورت فارسی باشد"); else if (!string.IsNullOrEmpty(model.Info) && !model.Info.IsOnlyPersianLetters()) Response.Errors.Add("توضیحات باید کاملا به صورت فارسی باشد"); else if (model.img != null && !model.img.IsValidImage()) Response.Errors.Add("تصویر نمی تواند از 5 مگ بیشتر باشد"); else { var nGroup = _mapper.Map(model); nGroup.CompanyID = CompanyID; Response.Value = await _GroupRepository.ADDBool(nGroup); if (Response.Value) Response.Success = true; else { Response.Errors.Add("خطا در ذخیره سازی"); } } return Response; } public async Task> GetGroupsCompany(int CompanyID) { var entity = await _GroupRepository.Get().Where(f => f.CompanyID == CompanyID).ToListAsync(); return _mapper.Map>(entity); } public async Task UpdateGroup(Update_GroupDto model, int CompanyID) { ResponseBase Response = new(); if (!model.Name.IsOnlyPersianLetters()) Response.Errors.Add("نام باید کاملا به صورت فارسی باشد"); else if (!string.IsNullOrEmpty(model.Info) && !model.Info.IsOnlyPersianLetters()) Response.Errors.Add("توضیحات باید کاملا به صورت فارسی باشد"); else if (model.img != null && !model.img.IsValidImage()) Response.Errors.Add("تصویر نمی تواند از 5 مگ بیشتر باشد"); else { try { var entity = await _GroupRepository.Get().FirstOrDefaultAsync(f => f.ID == model.ID && f.CompanyID == CompanyID); entity.Name = model.Name; entity.Info = model.Info; entity.img = model.img; Response.Value = await _GroupRepository.UPDATEBool(entity); if (Response.Value) Response.Success = true; else { Response.Errors.Add("خطا در ذخیره سازی"); } } catch (Exception ex) { Response.Errors.Add("خطای سیستمی"); } } } public async Task ChangeAvailableGroup(ChangeAvailable_GroupDto model, int CompanyID) { try { var entity = await _GroupRepository.Get().FirstOrDefaultAsync(f => f.ID == model.ID && f.CompanyID == CompanyID); entity.Available = model.Available; return await _GroupRepository.UPDATEBool(entity); } catch (Exception ex) { return false; } } public async Task JoinExperInGroup(int GroupID, int ExperID, int CompanyID) { if (await CHeckGroupMemberCompany(GroupID,CompanyID)) { if (await _experService.CheckExperInCompany(CompanyID,ExperID)) { return await _EGRepository.ADDBool(new ExperGroup() { ExperID = ExperID, GroupID = GroupID }); } } return false; } public async Task AnyGroup(int GroupID) => await _GroupRepository.Get().AnyAsync(a=>a.ID==GroupID); public async Task CHeckGroupMemberCompany(int GroupID, int CompanyID)=> await _GroupRepository.Get().AnyAsync(a => a.CompanyID == CompanyID && a.ID == GroupID); } }