using gehGassi.Core.Interfaces; using gehGassi.Domain.Advertisements; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Domain.Dogs; using gehGassi.Domain.Common; using Microsoft.EntityFrameworkCore; namespace gehGassi.Core.Services { /// /// Service der die Verwaltung von Appversionen realisiert /// public class AppVersionService : ServiceBase, IAppVersionService { private readonly IRepository _namesRepository; /// /// Erstellt eine Instanz /// /// Instanz einer IUnitOfWork public AppVersionService(IUnitOfWork unitOfWork) : base(unitOfWork) { _namesRepository = unitOfWork.GetRepository(); } /// /// Gibt eine gefilterte Liste von Appversionen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener AppVersionen public IQueryable Filter(string filter) { return Repository.Query(c => c.ReleaseTitleLocalized.Contains(filter) || c.Version.Contains(filter)); } /// /// Erstellen einer Appversion /// /// Listung public AppVersion Create() { var item = new AppVersion() { Major = 1, Minor = 0, Version = "1.0", IsCurrent = false, IsMandatory = false, Platform = Domain.Common.Platform.Android, Build = null, Revision = null, ReleaseDate = DateTimeOffset.UtcNow, LastUpdate = DateTimeOffset.UtcNow, Created = DateTimeOffset.UtcNow }; return item; } /// /// Gibt eine gefilterte Liste von Appversionen zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Appversionen public async Task> SearchAsync(string filter) { return (await Repository.FindAsync(c => c.ReleaseTitleLocalized.Contains(filter) || c.Version.Contains(filter))).ToList(); } /// /// Gibt eine gefilterte Liste von Appversionen mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Liste betroffener Appversionen public IQueryable FilterWithNames(string filter, string language, string fallback) { language = language.ToUpperInvariant(); fallback = fallback.ToUpperInvariant(); var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_AppVersionsWithNames({0},{1})", c => c.ReleaseTitle.Contains(filter) || c.Version.Contains(filter), language, fallback); return baseQuery; } /// /// Gibt zurück ob eine Versionsnummer für eine Plattform bereits existiert /// /// Plattform /// Versionsnummer die geprüft werden soll /// ID die ignoriert werden soll /// true wenn eine existiert, false sonst public async Task VersionExistsAsync(Platform platform, string version, int ignoreId) { var count = await Repository.CountAsync(c => c.Platform == platform && c.Version == version && c.Id != ignoreId).ConfigureAwait(false); return count > 0; } /// /// Gibt zurück ob eine Plattform eine aktuelle Version hat /// /// Plattform /// ID die ignoriert werden soll /// true wenn eine existiert, false sonst public async Task HasCurrentAsync(Platform platform, int ignoreId) { var count = await Repository.CountAsync(c => c.Platform == platform && c.IsCurrent && c.Id != ignoreId).ConfigureAwait(false); return count > 0; } /// /// Zurücksetzen der aktuellen Version einer Plattform. Es kann nur einen geben :) /// /// Plattform /// Benutzer der die Änderung vornimmt /// Task public async Task ResetCurrentAsync(Platform platform, string userName) { var current = await Repository.FirstOrDefaultAsync(c => c.Platform == platform && c.IsCurrent).ConfigureAwait(false); if (current != null) { current.IsCurrent = false; await CommitAsync(userName).ConfigureAwait(false); } } /// /// Gibt die aktuelle Version einer Plattform zurück /// /// Plattform /// Gewünschte Sprache /// Fallback Sprache /// Aktuelle Version oder null, wenn keine vorhanden public async Task GetCurrentwithNamesAsync(Platform platform, string language, string fallback) { language = language.ToUpperInvariant(); fallback = fallback.ToUpperInvariant(); var baseQuery = _namesRepository.QueryStoredProcedure("SELECT * FROM tv_AppVersionsWithNames({0},{1})", c => c.Platform == platform && c.IsCurrent, language, fallback); var current = await baseQuery.FirstOrDefaultAsync().ConfigureAwait(false); return current; } } }