Files
Complex/Complex.Application/Services/PersonService/SiteAccountlService.cs
2026-06-02 20:48:16 +03:30

170 lines
4.9 KiB
C#

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; }
//}
}