381 lines
18 KiB
C#
381 lines
18 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using CommunityToolkit.Mvvm.Messaging;
|
|
using gehGassiApp.Core.Interfaces;
|
|
using gehGassiApp.Core.Interfaces.Synchronization;
|
|
using gehGassiApp.Core.Messaging;
|
|
using gehGassiApp.Domain.Common;
|
|
using gehGassiApp.Domain.Dogs;
|
|
using gehGassiApp.Domain.Messages;
|
|
using gehGassiApp.Domain.News;
|
|
using gehGassiApp.Domain.Users;
|
|
using gehGassiApp.Domain.Walkers;
|
|
using gehGassiApp.Domain.Walks;
|
|
|
|
namespace gehGassiApp.Core.Services.Synchronization
|
|
{
|
|
/// <summary>
|
|
/// Service der Synchronisierungen initiieren kann
|
|
/// </summary>
|
|
public class SyncService : ISyncService
|
|
{
|
|
private readonly INewsService _newsService;
|
|
private readonly IUserService _userService;
|
|
private readonly IConversationService _conversationService;
|
|
private readonly IMessageService _messageService;
|
|
private readonly IDogRaceService _dogRaceService;
|
|
private readonly IDogService _dogService;
|
|
private readonly IWalkerProfileService _walkerProfileService;
|
|
private readonly IPublicWalkRequestService _publicWalkRequestService;
|
|
private readonly IPublicWalkResponseService _publicWalkResponseService;
|
|
private readonly IWalkService _walkService;
|
|
private readonly IWalkingTimeService _walkingTimeService;
|
|
private readonly IRatingService _ratingService;
|
|
private readonly IFavouriteService _favouriteService;
|
|
private readonly ISystemMessageService _systemMessageService;
|
|
private readonly ITransactionFeeService _transactionFeeService;
|
|
private readonly IPaymentService _paymentService;
|
|
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
/// <param name="newsService">Instanz eines INewsService</param>
|
|
/// <param name="userService">Instanz eines IUserService</param>
|
|
/// <param name="conversationService">Instanz eines IConversationService</param>
|
|
/// <param name="messageService">Instanz eines IMessageService</param>
|
|
/// <param name="dogRaceService">Instanz eines IDogRaceService</param>
|
|
/// <param name="dogService">Instanz eines IDogService</param>
|
|
/// <param name="walkerProfileService">Instanz eines IWalkerProfileService</param>
|
|
/// <param name="publicWalkRequestService">Instanz eines IPublicWalkRequestService</param>
|
|
/// <param name="publicWalkResponseService">Instanz eines IPublicWalkResponseService</param>
|
|
/// <param name="walkService">Instanz eines IWalkService</param>
|
|
/// <param name="walkingTimeService">Instanz eines IWalkingTimeService</param>
|
|
/// <param name="ratingService">Instanz eines IRatingService</param>
|
|
/// <param name="favouriteService">Instanz eines IFavouriteService</param>
|
|
/// <param name="systemMessageService">Instanz eines ISystemMessageService</param>
|
|
/// <param name="transactionFeeService">Instanz eines ITransactionFeeService</param>
|
|
/// <param name="paymentService">Instanz eines IPaymentService</param>
|
|
public SyncService(INewsService newsService, IUserService userService, IConversationService conversationService, IMessageService messageService, IDogRaceService dogRaceService, IDogService dogService, IWalkerProfileService walkerProfileService,
|
|
IPublicWalkRequestService publicWalkRequestService, IPublicWalkResponseService publicWalkResponseService, IWalkService walkService, IWalkingTimeService walkingTimeService, IRatingService ratingService, IFavouriteService favouriteService,
|
|
ISystemMessageService systemMessageService, ITransactionFeeService transactionFeeService, IPaymentService paymentService)
|
|
{
|
|
_newsService = newsService;
|
|
_userService = userService;
|
|
_conversationService = conversationService;
|
|
_messageService = messageService;
|
|
_dogRaceService = dogRaceService;
|
|
_dogService = dogService;
|
|
_walkerProfileService = walkerProfileService;
|
|
_publicWalkRequestService = publicWalkRequestService;
|
|
_publicWalkResponseService = publicWalkResponseService;
|
|
_walkService = walkService;
|
|
_walkingTimeService = walkingTimeService;
|
|
_ratingService = ratingService;
|
|
_favouriteService = favouriteService;
|
|
_systemMessageService = systemMessageService;
|
|
_transactionFeeService = transactionFeeService;
|
|
_paymentService = paymentService;
|
|
}
|
|
|
|
/// <summary>
|
|
/// App-User Synchronisieren
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncAppUserAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _userService.PushAsync(accessToken, token);
|
|
var pullResult = await _userService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new AppUserChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Walker-Profil Synchronisieren
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncWalkerProfileAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _walkerProfileService.PushAsync(accessToken, token);
|
|
var pullResult = await _walkerProfileService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new DogWalkerProfileChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Konversationen Synchronisieren
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncConversationsAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _conversationService.PushAsync(accessToken, token);
|
|
var pullResult = await _conversationService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new ConversationsChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Nachrichten synchronisieren
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncMessagesAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _messageService.PushAsync(accessToken, token);
|
|
var pullResult = await _messageService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new ConversationsUnreadChangedMessage());
|
|
if (pullResult.Added.Any())
|
|
{
|
|
var groups = pullResult.Added.GroupBy(c => c.ConversationId);
|
|
foreach (var group in groups)
|
|
{
|
|
WeakReferenceMessenger.Default.Send(new SignalRConversationMessageAddedMessage(group.Key));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der News-Kategorien
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncNewsCategoriesAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _newsService.PushAsync(accessToken, token);
|
|
var pullResult = await _newsService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new NewsCategoriesChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Hunderassen
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncDogRacesAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _dogRaceService.PushAsync(accessToken, token);
|
|
var pullResult = await _dogRaceService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new DogRacesChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Hunde
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncDogsAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _dogService.PushAsync(accessToken, token);
|
|
var pullResult = await _dogService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new DogsChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der offenen Anfragen
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncPublicWalkRequestsAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _publicWalkRequestService.PushAsync(accessToken, token);
|
|
var pullResult = await _publicWalkRequestService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new PublicWalkRequestsChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Antworten auf offenen Anfragen
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncPublicWalkResponsesAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _publicWalkResponseService.PushAsync(accessToken, token);
|
|
var pullResult = await _publicWalkResponseService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new PublicWalkResponsesChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Walks
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncWalksAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _walkService.PushAsync(accessToken, token);
|
|
var pullResult = await _walkService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new WalksChangedMessage(pullResult));
|
|
WeakReferenceMessenger.Default.Send(new WalkRequestedChangedMessage());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der WalkintgTimes
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncWalkingTimesAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _walkingTimeService.PushAsync(accessToken, token);
|
|
var pullResult = await _walkingTimeService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new WalkingTimesChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Ratings
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncRatingsAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _ratingService.PushAsync(accessToken, token);
|
|
var pullResult = await _ratingService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new RatingsChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Favoriten
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncFavouritesAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var pushResult = await _favouriteService.PushAsync(accessToken, token);
|
|
var pullResult = await _favouriteService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new FavouritesChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Favoriten
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncSystemMessagesAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
//Bewusst kein Push
|
|
var pullResult = await _systemMessageService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new SystemMessagesChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Transaktionsgebühren
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncTransactionFeesAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
//Bewusst kein Push
|
|
var pullResult = await _transactionFeeService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new TransactionFeesChangedMessage(pullResult));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Synchronisieren der Auszahlungen
|
|
/// </summary>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Task</returns>
|
|
public async Task SyncPayoutsAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
//Bewusst kein Push
|
|
var pullResult = await _paymentService.PullAsync(language, accessToken, token);
|
|
if (pullResult.HasChanges)
|
|
{
|
|
//Nun Events auslösen wenn nötig
|
|
WeakReferenceMessenger.Default.Send(new PayoutsChangedMessage(pullResult));
|
|
}
|
|
}
|
|
}
|
|
}
|