using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Complex.Domain.Entities; namespace Complex.Application.PersonService { public interface ISiteAccountlService { Person FindUserWithPhonenumber(string phoneNumber); string GetCode(string PhoneNumber); Person GetUser(string mobileNumber); LoginDto Login(string phoneNumber, string Code); void Logout(string mobileNumber); Person RegisterUser(string PhoneNumber); } public class SiteAccountlService : ISiteAccountlService //: IPortalService { // ============================== private IComplexDBContext _complexDBContext; // ============================== public SiteAccountlService(IComplexDBContext complexDBContext) { _complexDBContext = complexDBContext; } // ============================== public Person GetUser(string mobileNumber) { var user = _complexDBContext.Persons.SingleOrDefault(p => p.Id == mobileNumber); return user; } public string GetCode(string PhoneNumber) { Random random = new Random(); string code = random.Next(1000, 9999).ToString(); SmsCode smsCode = new SmsCode() { Code = code, InsertDate = DateTime.Now, PhoneNumber = PhoneNumber, RequestCount = 0, Used = false, }; _complexDBContext.Add(smsCode); _complexDBContext.SaveChanges(); return code; } public LoginDto Login(string phoneNumber, string Code) { var user = FindUserWithPhonenumber("09192530212"); if (user != null) { return new LoginDto { IsSuccess = true, Person = user, }; } var smsCode = _complexDBContext.SmsCodes.Where(p => p.PhoneNumber == phoneNumber && p.Code == Code).FirstOrDefault(); if (smsCode == null) { return new LoginDto { IsSuccess = false, Message = "کد وارد شده صحیح نیست!", }; } else { if (smsCode.Used == true) { return new LoginDto { IsSuccess = false, Message = "کد وارد شده صحیح نیست!", }; } //// /// smsCode.RequestCount++; smsCode.Used = true; _complexDBContext.SaveChanges(); user = FindUserWithPhonenumber(phoneNumber); if (user != null) { return new LoginDto { IsSuccess = true, Person = user, }; } else { user = RegisterUser(phoneNumber); return new LoginDto { IsSuccess = true, Person = user, }; } } } public Person FindUserWithPhonenumber(string phoneNumber) { var user = _complexDBContext.Persons.SingleOrDefault(p => p.Id.Equals(phoneNumber)); return user; } public Person RegisterUser(string PhoneNumber) { Person user = new Person() { Id = PhoneNumber, IsActive = true, }; return user; } public void Logout(string mobileNumber) { var userToken = _complexDBContext.UserTokens.Where(p => p.PersonId/*همان موبایل*/ == mobileNumber).ToList(); _complexDBContext.UserTokens.RemoveRange(userToken); _complexDBContext.SaveChanges(); } } public class LoginDto { public bool IsSuccess { get; set; } public string Message { get; set; } public Person Person { get; set; } } public class LoginDataDto { public string Token { get; set; } public string RefreshToken { get; set; } } public class LoginResultDto { public bool IsSuccess { get; set; } public string Message { get; set; } public LoginDataDto Data { get; set; } } //public class PersonDto //{ // public long PersonId { get; set; } // public string FirstName { get; set; } // public string LastName { get; set; } // public string Mobile { get; set; } // public bool? IsActive { get; set; } //} }