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); } } }