using DbContextLib; using Entities; using Microsoft.EntityFrameworkCore; using Model; namespace Model2Entities; public static class Extensions { internal static async Task AddItem(this HeartTrackContext context, T? item) where T :class { if(item == null || context.Set().Contains(item)) { return await Task.FromResult(null); } var entry = context.Set().Add(item); try { await context.SaveChangesAsync(); } catch (Exception ex) { Console.WriteLine(ex.Message, ex.InnerException, ex.StackTrace); } return await Task.FromResult(entry.Entity); } internal static async Task DeleteItem(this HeartTrackContext context, int? id) where T:class { var item = await context.Set().FindAsync(id); if(item == null) return await Task.FromResult(false); context.Set().Remove(item); await context.SaveChangesAsync(); return await Task.FromResult(true); } public static async Task UpdateItem(this HeartTrackContext context, int? id, T? newItem, Action updateAction) where T : class where U: class { var existingT = await context.Set().FindAsync(id); if (existingT != null && newItem != null) { // Appliquer les mises à jour sur l'objet existant en utilisant l'action passée en paramètre updateAction(newItem, existingT); // Marquer l'objet comme modifié dans le contexte context.Update(existingT); // Enregistrer les modifications dans la base de données await context.SaveChangesAsync(); return existingT; } return Task.FromResult(null).Result; } public static IEnumerable GetItemsWithFilterAndOrdering(this IEnumerable list, Func filter, int index, int count, Enum? orderCriterium, bool descending = false ) where T : class { var filteredList = list.Where(filter); if(orderCriterium != null && orderCriterium.ToString() != "None") { filteredList = filteredList.OrderByCriteria(orderCriterium, descending); } return filteredList .Skip(index * count) .Take(count); } public static IOrderedEnumerable OrderByCriteria(this IEnumerable list, Enum orderCriterium, bool descending = false ) where T : class { var orderCriteriumString = orderCriterium.ToString(); if (orderCriteriumString.StartsWith("By")) { orderCriteriumString = orderCriteriumString.Substring(2); } var propertyInfo = typeof(T).GetProperty(orderCriteriumString); if (propertyInfo == null) { throw new ArgumentException($"No property {orderCriterium} in type {typeof(T)}"); } return descending ? list.OrderByDescending(x => propertyInfo.GetValue(x)) : list.OrderBy(x => propertyInfo.GetValue(x)); } public static IQueryable IncludeAll(this HeartTrackContext dbContext, IQueryable query) where TEntity : class { var entityType = dbContext.Model.FindEntityType(typeof(TEntity)); foreach (var navigation in entityType.GetNavigations()) { query = query.Include(navigation.Name); } return query; } public static IQueryable IncludeStandardProperties(this IQueryable query) { return query.Include(a => a.HeartRates) .Include(a => a.Athlete) .Include(a => a.DataSource); } // public static Activity ToModel(this ActivityEntity entity) // { // return new Activity ( // entity.IdActivity, // entity.Type, // new DateTime(entity.Date.Year, entity.Date.Month, entity.Date.Day), // new DateTime().Add(entity.StartTime.ToTimeSpan()), // Utilisation de ToTimeSpan() pour obtenir la composante temps sans la date // new DateTime().Add(entity.EndTime.ToTimeSpan()), // entity.EffortFelt, // entity.Variability, // entity.Variance, // entity.StandardDeviation, // entity.Average, // entity.Maximum, // entity.Minimum, // entity.AverageTemperature, // entity.HasAutoPause // ); // } // public static ActivityEntity ToEntity(this Activity model) // { // return new ActivityEntity // { // IdActivity = model.Id, // Type = model.Type, // Date = DateOnly.FromDateTime(model.Date), // StartTime = TimeOnly.FromDateTime(model.StartTime), // EndTime = TimeOnly.FromDateTime(model.EndTime), // EffortFelt = model.Effort, // Variability = model.Variability, // Variance = model.Variance, // StandardDeviation = model.StandardDeviation, // Average = model.Average, // Maximum = model.Maximum, // Minimum = model.Minimum, // AverageTemperature = model.AverageTemperature, // HasAutoPause = model.HasAutoPause // }; // } // public static IEnumerable ToModels(this IEnumerable entities) // => entities.Select(a => a.ToModel()); // public static IEnumerable ToEntities(this IEnumerable models) // => models.Select(a => a.ToEntity()); } // using System; // using Entities; // using Models; // using System.Collections.Generic; // Add missing namespace // namespace Model2Entities // { // public static class Extension // { // public static TEntity ToEntity(this T model) // where TEntity : new() // { // return new TEntity // { // Id = model.Id, // Title = model.Title, // Author = model.Author, // Isbn = model.Isbn // }; // } // public static IEnumerable ToEntities(this IEnumerable models) // Add missing type parameter // where TEntity : new() // Add constraint for TEntity // { // return models.Select(m => m.ToEntity()); // } // public static T ToModel(this TEntity myTEntity) // Add missing type parameter // where T : new() // Add constraint for T // { // return new T(myTEntity.Id, myTEntity.Title, myTEntity.Author, myTEntity.Isbn); // } // public static IEnumerable ToModels(this IEnumerable TsEntities) // => TsEntities.Select(e => e.ToModel()); // } // { // public static T ToEntity(this T model) // => new TEntity // { // Id = model.Id, // Title = model.Title, // Author = model.Author, // Isbn = model.Isbn // }; // public static IEnumerable ToEntities(this IEnumerable models) // => models.Select(m => m.ToEntity()); // public static T ToModel(this T myTEntity) // => new T(myTEntity.Id, myTEntity.Title, myTEntity.Author, myTEntity.Isbn); // public static IEnumerable ToModels(this IEnumerable TsEntities) // => TsEntities.Select(e => e.ToModel()); // } // }