private void CloseSession(Session session) { var renewSession = SessionService.Get(session.ID); if (renewSession.IsClientClose) { SessionsQuenue.Remove(session); return; } var clientWallet = UserWalletService.GetUserWallet(session.Problem.User); var specialistWallet = UserWalletService.GetUserWallet(session.Specialist.User); clientWallet.Balance -= session.Reward; specialistWallet.Balance += session.Reward; session.IsClientClose = true; session.Status = SessionStatus.Success; session.ClientCloseDate = DateTime.UtcNow; SessionService.Update(session); UserWalletService.Update(clientWallet); UserWalletService.Update(specialistWallet); SessionsQuenue.Remove(session); }
public IActionResult SignUp([FromBody] SignUpRequest request) { var user = UserService.FindByPhoneNumber(request.PhoneNumber); if (user != null) { return(BadRequest(new ResponseModel { Success = false, Message = "Номер телефона уже используется" })); } user = UserService.FindByEmail(request.Email); if (user != null) { return(BadRequest(new ResponseModel { Success = false, Message = "Email уже используется" })); } user = new User { FirstName = request.FirstName, LastName = request.LastName, PhoneNumber = request.PhoneNumber, Email = request.Email, Role = UserRole.Client, RegisteredAt = DateTime.UtcNow }; UserService.Create(user); UserWalletService.Create(new UserWallet { User = user, Balance = 0 }); ProblemService.Create(new Problem { User = user, ProblemText = request.Problem }); var session = UserSessionService.CreateSession(user); SmscHelper.SendSms(user.PhoneNumber, $"Код для входа: {session.AuthCode}"); return(Ok(new SignInResponse { UserID = user.ID })); }
public IActionResult GetMyWallet() { var user = UserService.Get(long.Parse(User.Identity.Name)); if (user == null) { return(NotFound(new ResponseModel { Success = false, Message = "Пользователь не найден" })); } var wallet = UserWalletService.GetUserWallet(user); var activeSessions = SessionService.GetActiveSessions(user); return(Ok(new DataResponse <UserWalletViewModel> { Data = new UserWalletViewModel(wallet, activeSessions.Sum(x => x.Reward)) })); }
public IActionResult SuccessPayment([FromQuery] RegisterDOWebhook data) { var payment = PaymentService.GetPaymentByOrderID(data.OrderId); if (payment == null) { return(NotFound(new ResponseModel { Success = false, Message = "Платеж не найден" })); } payment.Status = PaymentStatus.Completed; PaymentService.Update(payment); payment.Wallet.Balance += payment.Amount; UserWalletService.Update(payment.Wallet); if (data.SessionId != 0) { var session = SessionService.Get(data.SessionId); if (session == null) { return(NotFound(new ResponseModel { Success = false, Message = "Платеж выполнен, но указанная сессия не найдена" })); } session.Date = DateTime.UtcNow; session.Status = SessionStatus.Started; SessionService.Update(session); } return(RedirectResult("profile?deposit=success")); }
public WalletController(UserWalletService userWalletService) { this._userWalletService = userWalletService; }
public IActionResult CloseSession(long id, long sessionID) { var user = UserService.Get(long.Parse(User.Identity.Name)); if (user == null) { return(NotFound(new ResponseModel { Success = false, Message = "Пользователь не найден" })); } var problem = ProblemService.Get(id); if (problem == null) { return(NotFound(new ResponseModel { Success = false, Message = "Проблема не найдена" })); } var session = SessionService.Get(sessionID); if (session == null) { return(NotFound(new ResponseModel { Success = false, Message = "Сессия не найдена" })); } var wallet = UserWalletService.GetUserWallet(user); if (wallet == null) { return(NotFound(new ResponseModel { Success = false, Message = "Кошелек не найден" })); } var specialistWallet = UserWalletService.GetUserWallet(session.Specialist.User); if (specialistWallet == null) { return(NotFound(new ResponseModel { Success = false, Message = "Кошелек не найден" })); } if (!session.IsSpecialistClose) { return(BadRequest(new ResponseModel { Success = false, Message = "Сессию не завершил специалист" })); } wallet.Balance -= session.Reward; UserWalletService.Update(wallet); specialistWallet.Balance += session.Reward; UserWalletService.Update(specialistWallet); session.IsClientClose = true; session.ClientCloseDate = DateTime.UtcNow; session.Status = SessionStatus.Success; SessionService.Update(session); var clientActiveSessions = SessionService.GetActiveSessions(session.Problem.User); NotificationsService.SendUpdateToUser( session.Problem.User.ID, SocketMessageType.BalanceUpdate, new UserWalletViewModel(wallet, clientActiveSessions.Sum(x => x.Reward))); NotificationsService.SendUpdateToUser( session.Specialist.ID, SocketMessageType.BalanceUpdate, new UserWalletViewModel(specialistWallet, 0)); return(Ok(new ResponseModel())); }
public IActionResult StartSession(long id, long sessionID) { var user = UserService.Get(long.Parse(User.Identity.Name)); if (user == null) { return(NotFound(new ResponseModel { Success = false, Message = "Пользователь не найден" })); } var problem = ProblemService.Get(id); if (problem == null) { return(NotFound(new ResponseModel { Success = false, Message = "Проблема не найдена" })); } var session = SessionService.Get(sessionID); if (session == null) { return(NotFound(new ResponseModel { Success = false, Message = "Сессия не найдена" })); } if (session.Specialist == null) { return(Ok(new ResponseModel { Success = false, Message = "Не выбран специалист" })); } var wallet = UserWalletService.GetUserWallet(user); if (wallet == null) { return(NotFound(new ResponseModel { Success = false, Message = "Кошелек не найден" })); } var activeSessions = SessionService.GetActiveSessions(user); var lockedBalance = activeSessions.Sum(x => x.Reward); if ((wallet.Balance - lockedBalance) < session.Reward) { return(Ok(new ResponseModel { Success = false, Message = "Недостаточно средств" })); } session.Status = SessionStatus.Started; session.Date = DateTime.UtcNow; SessionService.Update(session); return(Ok(new ResponseModel())); }
public async Task <IActionResult> CreatePayment([FromBody] CreatePaymentRequest request) { var user = UserService.Get(long.Parse(User.Identity.Name)); if (user == null) { return(NotFound(new ResponseModel { Success = false, Message = "Пользователь не найден" })); } var wallet = UserWalletService.GetUserWallet(user); if (wallet == null) { return(NotFound(new ResponseModel { Success = false, Message = "Кошелек не найден" })); } var payment = new Payment { Wallet = wallet, Amount = request.Amount, Type = request.Type, Status = PaymentStatus.New }; PaymentService.Create(payment); var paymentRequest = new RegisterDORequest($"user#{user.ID}deposit#{payment.ID}_{DateTime.UtcNow.Millisecond}", (payment.Amount * 100)); if (request.SessionID != 0) { paymentRequest.SetSessionID(request.SessionID); } var paymentResponse = await SberbankAPI.RegisterDO(paymentRequest); if (paymentResponse.OrderId == null) { payment.Status = PaymentStatus.Canceled; PaymentService.Update(payment); return(BadRequest(new ResponseModel { Success = false, Message = $"{paymentResponse.ErrorMessage} Код ошибки: {paymentResponse.ErrorCode}" })); } payment.OrderID = paymentResponse.OrderId; PaymentService.Update(payment); return(Ok(new CreatePaymentResponse { RedirectUrl = paymentResponse.FormUrl })); }
public ProductsController(ProductsService productsService, UserWalletService userWalletService, MachineWalletService machineWalletService) { this._productsService = productsService; this._userWalletService = userWalletService; this._machineWalletService = machineWalletService; }