177 lines
7.5 KiB
C#
177 lines
7.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using gehGassi.Dto.Common;
|
|
using gehGassi.Dto;
|
|
using gehGassiApp.Core.Interfaces;
|
|
using gehGassiApp.Core.Resources;
|
|
using gehGassiApp.Domain.Advertisements;
|
|
using gehGassiApp.Domain.Common;
|
|
using gehGassi.Dto.Advertisements;
|
|
|
|
namespace gehGassiApp.Core.Services
|
|
{
|
|
/// <summary>
|
|
/// Service der alle Funktionen rund um Werbungen zur Verfügung stellt
|
|
/// </summary>
|
|
public class AdvertisementService : IAdvertisementService
|
|
{
|
|
private readonly ICommunicationService _communicationService;
|
|
private readonly ILocationService _locationService;
|
|
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
/// <param name="communicationService">Instanz eines ICommunicationService</param>
|
|
/// <param name="locationService">Instanz eines ILocationService</param>
|
|
public AdvertisementService(ICommunicationService communicationService, ILocationService locationService)
|
|
{
|
|
_communicationService = communicationService;
|
|
_locationService = locationService;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Holen der Liste der Werbungs-Kategorien welche online sind
|
|
/// </summary>
|
|
/// <param name="language">gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>CommunicationResult</returns>
|
|
public async Task<CommunicationResult<List<AdvertisementCategory>>> GetCategoriesOnlineAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<List<AdvertisementCategory>>();
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var queryResult = await _communicationService.GetAdvertisementCategoriesOnlineAsync(language, accessToken, token);
|
|
if (queryResult.Success)
|
|
return queryResult;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste von ablaufenden Werbungen zurück, welche in der Nähe sind
|
|
/// </summary>
|
|
/// <param name="location">Aktuelle Position</param>
|
|
/// <param name="take">Wie viele Werbungen sollen abgerufen werden? -1 Wenn nicht anwenden.</param>
|
|
/// <param name="skip">Wie viele Werbungen sollen ausgelassen werden? -1 Wenn nicht anwenden.</param>
|
|
/// <param name="appMode">Akteuller Modus der App</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>ListCommunicationResult</returns>
|
|
public async Task<ListCommunicationResult<List<Advertisement>>> GetAdvertisementsNearEndAsync(LocationDto location, int take, int skip, AppMode appMode, string accessToken, string language, CancellationToken token)
|
|
{
|
|
var result = new ListCommunicationResult<List<Advertisement>>() { Value = new List<Advertisement>() };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var query = new QueryDto
|
|
{
|
|
Location = location,
|
|
Language = language,
|
|
AppMode = (AppModeDto)appMode,
|
|
Take = take,
|
|
Skip = skip
|
|
};
|
|
|
|
var queryResult = await _communicationService.GetAdvertisementsNearEndAsync(query, accessToken, token);
|
|
if (queryResult.Success)
|
|
return queryResult;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine laufende Werbung in gewünschter Sprache zurück
|
|
/// </summary>
|
|
/// <param name="id">Id der Werbung</param>
|
|
/// <param name="language">gewünschte Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>Werbung oder null, wenn nicht gefunden</returns>
|
|
public async Task<CommunicationResult<Advertisement>> GetRunningAsync(string id, string language, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<Advertisement>();
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var queryResult = await _communicationService.GetAdvertisementRunningAsync(id, language, accessToken, token);
|
|
if (queryResult.Success)
|
|
return queryResult;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste von Werbungen nach Kategorie zurück
|
|
/// </summary>
|
|
/// <param name="categoryId">Id der Kategorie</param>
|
|
/// <param name="location">Aktuelle Position</param>
|
|
/// <param name="take">Wie viele Werbungen sollen abgerufen werden? -1 Wenn nicht anwenden.</param>
|
|
/// <param name="skip">Wie viele Werbungen sollen ausgelassen werden? -1 Wenn nicht anwenden.</param>
|
|
/// <param name="appMode">Akteuller Modus der App</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>ListCommunicationResult</returns>
|
|
public async Task<ListCommunicationResult<List<Advertisement>>> GetAdvertisementsByCategoryAsync(string categoryId, LocationDto location, int take, int skip, AppMode appMode, string language, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new ListCommunicationResult<List<Advertisement>>() { Value = new List<Advertisement>() };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var query = new AdvertisementQueryDto
|
|
{
|
|
CategoryId = categoryId,
|
|
Location = location,
|
|
Language = language,
|
|
AppMode = (AppModeDto)appMode,
|
|
Take = take,
|
|
Skip = skip
|
|
};
|
|
|
|
var queryResult = await _communicationService.GetAdvertisementsByCategoryAsync(query, accessToken, token);
|
|
if (queryResult.Success)
|
|
return queryResult;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|