using gehGassi.Core.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Domain.Pages;
using gehGassi.Domain.Shop;
using Microsoft.EntityFrameworkCore;
namespace gehGassi.Core.Services
{
///
/// Service der die Verwaltung von Inhalts-Seiten ermöglicht
///
public class PageService : ServiceBase, IPageService
{
private readonly IRepository _namesRepository;
///
/// Erstellt eine Instanz
///
/// Instanz einer IUnitOfWork
public PageService(IUnitOfWork unitOfWork) : base(unitOfWork)
{
_namesRepository = unitOfWork.GetRepository();
}
///
/// Erstellen einer Seite
///
///
public Page Create()
{
var page = new Page();
return page;
}
///
/// Gibt eine gefilterte Liste von Seiten zurück in einer gewählten Sprache
///
/// Filterbegriff der in bestimmten Feldern gesucht wird
/// Gewünschte Sprache
/// Fallback Sprache
/// Liste betroffener Seiten
public IQueryable FilterWithNames(string filter, string language, string fallback)
{
language = language.ToUpperInvariant();
fallback = fallback.ToUpperInvariant();
var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_PagesWithNames({0},{1})", c => c.Title.Contains(filter), language, fallback);
return baseQuery;
}
///
/// Prüfen ob ein Code noch verfügbar ist
///
/// Zu prüfender Code
/// Id die ausgenommen werden soll
/// true wenn verfügbar, false sonst
public async Task IsCodeAvailableAsync(string code, int id)
{
var existingCode = await Repository.FirstOrDefaultAsync(c => c.Code == code).ConfigureAwait(false);
if (existingCode != null && id > 0)
existingCode = await Repository.FirstOrDefaultAsync(c => c.Code == code && c.Id != id).ConfigureAwait(false);
return existingCode == null;
}
///
/// Gibt eine Text-Seite in gewünschter Sprache zurück
///
/// code der Seite
/// Gewünschte Sprache
/// Fallback Sprache
/// Seite oder null, wenn nicht gefunden
public async Task GetwithNamesAsync(string code, string language, string fallback)
{
language = language.ToUpperInvariant();
fallback = fallback.ToUpperInvariant();
code = code.ToUpperInvariant();
var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_PagesWithNames({0},{1})", c => c.Code == code, language, fallback);
return await baseQuery.FirstOrDefaultAsync().ConfigureAwait(false);
}
}
}