using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Dto; using gehGassiApp.Core.Interfaces; using gehGassiApp.Core.Resources; using gehGassiApp.Domain.Vouchers; namespace gehGassiApp.Core.Services { /// /// Service der die Gutscheine verwalten kann /// public class VoucherService : IVoucherService { private readonly ICommunicationService _communicationService; /// /// Erstellt eine Instanz /// /// Instanz eines ICommunicationService public VoucherService(ICommunicationService communicationService) { _communicationService = communicationService; } /// /// Validieren eines Gutschein-Codes für einen AppUser /// /// Gutscheincode /// Id des AppUsers /// Aktuelles Accesstoken /// CancellationToken /// CommunicationResult public async Task> CheckVoucherCodeAsync(string voucherCode, string appUserId, string accessToken, CancellationToken token) { var result = new CommunicationResult() { Value = null }; var isConnected = await _communicationService.IsConnected(); if (isConnected) { var checkResult = await _communicationService.CheckVoucherCodeAsync(voucherCode, appUserId, accessToken, token); if (checkResult.Success) return checkResult; } else { result.Success = false; result.ErrorCode = CommunicationErrors.ServerNoConnection; result.ErrorMessage = Errors.Server_NoConnection; } return result; } /// /// Versucht einen Gutscheincode mit Hilfe eines QR-Codes zu holen /// /// QR-Code in Text /// Aktuelles Accesstoken /// CancellationToken /// CommunicationResult public async Task> GetVoucherCodeByQrCode(string qrCode, string accessToken, CancellationToken token) { var result = new CommunicationResult() { Value = null }; var isConnected = await _communicationService.IsConnected(); if (isConnected) { var checkResult = await _communicationService.GetVoucherCodeByQrCode(qrCode, accessToken, token); if (checkResult.Success) return checkResult; } else { result.Success = false; result.ErrorCode = CommunicationErrors.ServerNoConnection; result.ErrorMessage = Errors.Server_NoConnection; } return result; } /// /// Versucht einen Gutschein zu reservieren /// /// Id des Gutscheins /// Code des Gutscheins /// Id des AppUsers /// Id des Walks /// Betrag - kann kleiner Gutscheinwert sein /// Aktuelles Accesstoken /// CancellationToken /// CommunicationResult public async Task> ReserveVoucherAsync(string voucherId, string code, string appUserId, string walkId, decimal ammount, string accessToken, CancellationToken token) { var result = new CommunicationResult() { Value = null }; var isConnected = await _communicationService.IsConnected(); if (isConnected) { var checkResult = await _communicationService.ReserveVoucherAsync(voucherId, code, appUserId, walkId, ammount, accessToken, token); if (checkResult.Success) return checkResult; } else { result.Success = false; result.ErrorCode = CommunicationErrors.ServerNoConnection; result.ErrorMessage = Errors.Server_NoConnection; } return result; } /// /// Stornieren eines Gutscheins /// /// Id des Gutscheins /// Id des AppUsers /// Id des Walks /// Aktuelles Accesstoken /// CancellationToken /// CommunicationResult public async Task> CancelVoucherAsync(string voucherId, string appUserId, string walkId, string accessToken, CancellationToken token) { var result = new CommunicationResult() { Value = false }; var isConnected = await _communicationService.IsConnected(); if (isConnected) { var checkResult = await _communicationService.CancelVoucherAsync(voucherId, appUserId, walkId, accessToken, token); if (checkResult.Success) return checkResult; } else { result.Success = false; result.ErrorCode = CommunicationErrors.ServerNoConnection; result.ErrorMessage = Errors.Server_NoConnection; } return result; } } }