using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Core.Interfaces; using gehGassi.Domain.Advertisements; using gehGassi.Domain.Common; using Microsoft.EntityFrameworkCore; namespace gehGassi.Core.Services { /// /// Service der die Verwaltung von Branchen realisiert /// public class BranchService : ServiceBase, IBranchService { private readonly IRepository _namesRepository; /// /// Erstellt eine Instanz /// /// Instanz einer IUnitOfWork public BranchService(IUnitOfWork unitOfWork) : base(unitOfWork) { _namesRepository = unitOfWork.GetRepository(); } /// /// Gibt eine gefilterte Liste von Branchen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Branchen public IQueryable Filter(string filter) { return Repository.Query(c => c.Title.Contains(filter)); } /// /// Erstellen einer Branche /// /// Branche public Branch Create() { var item = new Branch() { Id = Guid.NewGuid().ToString("N"), Created = DateTimeOffset.UtcNow }; return item; } /// /// Gibt eine gefilterte Liste von Branchen zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Branchen public async Task> SearchAsync(string filter) { return (await Repository.FindAsync(c => c.Title.Contains(filter))).ToList(); } /// /// Gibt eine gefilterte Liste von Branchen mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Branchen public IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted) { language = language.ToUpperInvariant(); fallback = fallback.ToUpperInvariant(); var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_BranchesWithNames({0},{1})", c => c.Title.Contains(filter) || c.Name.Contains(filter), language, fallback); if (!includeDeleted) baseQuery = baseQuery.Where(c => c.Deleted == false); return baseQuery; } /// /// Gibt eine gefilterte Liste von Branchen mit Namen zurück in einer gewählten Sprache welche für eine Listung aktiviert sind /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Branchen public IQueryable FilterWithNamesListings(string filter, string language, string fallback, bool includeDeleted) { language = language.ToUpperInvariant(); fallback = fallback.ToUpperInvariant(); var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_BranchesWithNames({0},{1})", c => c.ListingAllowed && (c.Title.Contains(filter) || c.Name.Contains(filter)), language, fallback); if (!includeDeleted) baseQuery = baseQuery.Where(c => c.Deleted == false); return baseQuery; } /// /// Gibt eine Liste von Branchen in einer gewählten Sprache zurück, welche online sind /// /// Gewünschte Sprache /// Fallback Sprache /// Liste von Branchen public async Task> GetOnlineAsync(string language, string fallback) { language = language.ToUpperInvariant(); fallback = fallback.ToUpperInvariant(); var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_BranchesWithNames({0},{1})", c => c.ListingAllowed && c.OnlineStatus == OnlineStatus.Online && c.Deleted == false, language, fallback); return await baseQuery.OrderBy(c => c.Order).ToListAsync().ConfigureAwait(false); } } }