90 lines
3.4 KiB
C#
90 lines
3.4 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Service der die Verwaltung von Inhalts-Seiten ermöglicht
|
|
/// </summary>
|
|
public class PageService : ServiceBase<Page>, IPageService
|
|
{
|
|
private readonly IRepository<PageWithNames> _namesRepository;
|
|
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
/// <param name="unitOfWork">Instanz einer IUnitOfWork</param>
|
|
public PageService(IUnitOfWork unitOfWork) : base(unitOfWork)
|
|
{
|
|
_namesRepository = unitOfWork.GetRepository<PageWithNames>();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Erstellen einer Seite
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public Page Create()
|
|
{
|
|
var page = new Page();
|
|
return page;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine gefilterte Liste von Seiten zurück in einer gewählten Sprache
|
|
/// </summary>
|
|
/// <param name="filter">Filterbegriff der in bestimmten Feldern gesucht wird</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="fallback">Fallback Sprache</param>
|
|
/// <returns>Liste betroffener Seiten</returns>
|
|
public IQueryable<PageWithNames> 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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Prüfen ob ein Code noch verfügbar ist
|
|
/// </summary>
|
|
/// <param name="code">Zu prüfender Code</param>
|
|
/// <param name="id">Id die ausgenommen werden soll</param>
|
|
/// <returns>true wenn verfügbar, false sonst</returns>
|
|
public async Task<bool> 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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Text-Seite in gewünschter Sprache zurück
|
|
/// </summary>
|
|
/// <param name="code">code der Seite</param>
|
|
/// <param name="language">Gewünschte Sprache</param>
|
|
/// <param name="fallback">Fallback Sprache</param>
|
|
/// <returns>Seite oder null, wenn nicht gefunden</returns>
|
|
public async Task<PageWithNames> 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);
|
|
}
|
|
}
|
|
}
|