From 4d6bf8bb8470db51466e8ce1bc64ca35d284fc5a Mon Sep 17 00:00:00 2001 From: dave Date: Sat, 16 Mar 2024 23:56:28 +0100 Subject: [PATCH] to test --- src/APIMappers/ActivityMapper.cs | 20 ++++++++------ src/APIMappers/DataSourceMapper.cs | 11 ++++---- src/APIMappers/HeartRateMapper.cs | 8 +++--- src/Dto/ActivityDto.cs | 11 ++++++++ src/Dto/AthleteDto.cs | 4 +-- src/Dto/Dto.csproj | 4 +++ src/EFMappers/ActivityMapper.cs | 2 +- .../Controllers/ActivityController.cs | 26 +++++++++++++++++-- src/Model2Entities/UserRepository.cs | 6 ++--- 9 files changed, 66 insertions(+), 26 deletions(-) diff --git a/src/APIMappers/ActivityMapper.cs b/src/APIMappers/ActivityMapper.cs index c68e810..2442a40 100644 --- a/src/APIMappers/ActivityMapper.cs +++ b/src/APIMappers/ActivityMapper.cs @@ -8,7 +8,7 @@ public static class ActivityMapper { private static GenericMapper _mapper = new(); - public static Activity ToModel(this ActivityDto activityDto) + public static Activity ToModel(this ActivityDto activityDto, User user) { Func create = activity => new Activity { @@ -30,12 +30,15 @@ public static class ActivityMapper Action link = (activity, model) => { - model.HeartRates.AddRange(activity.HeartRates.ToModels(activityDto.Id).ToArray()); - if (activity.DataSource != null) model.DataSource = activity.DataSource.ToModel(); - model.Athlete = activity.Athlete.ToModel(); + if (activity.DataSource != null) + model.DataSource = user.DataSources.FirstOrDefault(ds => ds.Id == activity.DataSource.Id); + model.Athlete = user; }; - return activityDto.ToT(_mapper, create, link); + var act = activityDto.ToT(_mapper, create, link); + act.HeartRates.AddRange(activityDto.HeartRates.ToModels(act).ToList()); + + return act; } public static ActivityDto ToDto(this Activity model) @@ -55,7 +58,8 @@ public static class ActivityMapper Maximum = activity.Maximum, Minimum = activity.Minimum, AverageTemperature = activity.AverageTemperature, - HasAutoPause = activity.HasAutoPause + HasAutoPause = activity.HasAutoPause, + AthleteId = activity.Athlete.Id }; Action link = (activity, dto) => @@ -68,8 +72,8 @@ public static class ActivityMapper return model.ToU(_mapper, create, link); } - public static IEnumerable ToModels(this IEnumerable dtos) - => dtos.Select(dto => dto.ToModel()); + public static IEnumerable ToModels(this IEnumerable dtos, User user) + => dtos.Select(dto => dto.ToModel(user)); public static IEnumerable ToDtos(this IEnumerable models) => models.Select(model => model.ToDto()); diff --git a/src/APIMappers/DataSourceMapper.cs b/src/APIMappers/DataSourceMapper.cs index 130e0e2..221fccb 100644 --- a/src/APIMappers/DataSourceMapper.cs +++ b/src/APIMappers/DataSourceMapper.cs @@ -9,10 +9,11 @@ public static class DataSourceMapper private static GenericMapper _mapper = new (); - public static DataSource ToModel(this DataSourceDto dto) + public static DataSource ToModel(this DataSourceDto dto, User user) { - Func create = dataSourceDto => - new DataSource( dataSourceDto.Id, dataSourceDto.Type, dataSourceDto.Model, dataSourceDto.Precision, dataSourceDto.Athletes.ToModels().ToList(), dataSourceDto.Activities.ToModels().ToList()); + Func create = dataSourceDto => + new DataSource(dataSourceDto.Id, dataSourceDto.Type, dataSourceDto.Model, dataSourceDto.Precision, + new List { user }, user.Activities.Where(a => a.DataSource.Id == dataSourceDto.Id).ToList()); /* Action link = (dataSourceDto, model) => { @@ -41,8 +42,8 @@ public static class DataSourceMapper return model.ToU(_mapper, create, link); } - public static IEnumerable ToModels(this IEnumerable dtos) - => dtos.Select(d => d.ToModel()); + public static IEnumerable ToModels(this IEnumerable dtos, User user) + => dtos.Select(d => d.ToModel(user)); public static IEnumerable ToDtos(this IEnumerable models) => models.Select(m => m.ToDto()); diff --git a/src/APIMappers/HeartRateMapper.cs b/src/APIMappers/HeartRateMapper.cs index 2792673..c5f81a6 100644 --- a/src/APIMappers/HeartRateMapper.cs +++ b/src/APIMappers/HeartRateMapper.cs @@ -8,10 +8,10 @@ public static class HeartRateMapper { private static GenericMapper _mapper = new(); - public static HeartRate ToModel(this HeartRateDto dto,int activityDtoId) + public static HeartRate ToModel(this HeartRateDto dto,Activity activityDto) { Func create = heartRateDto => - new HeartRate(heartRateDto.HeartRate, TimeOnly.FromDateTime(heartRateDto.Timestamp), activityDtoId, heartRateDto.Latitude, heartRateDto.Longitude, heartRateDto.Altitude, heartRateDto.Cadence, heartRateDto.Distance, heartRateDto.Speed, heartRateDto.Power, heartRateDto.Temperature); + new HeartRate(heartRateDto.HeartRate, TimeOnly.FromDateTime(heartRateDto.Timestamp), activityDto, heartRateDto.Latitude, heartRateDto.Longitude, heartRateDto.Altitude, heartRateDto.Cadence, heartRateDto.Distance, heartRateDto.Speed, heartRateDto.Power, heartRateDto.Temperature); return dto.ToT(_mapper, create); } @@ -37,8 +37,8 @@ public static class HeartRateMapper return model.ToU(_mapper, create); } - public static IEnumerable ToModels(this IEnumerable dtos, int activityDtoId) - => dtos.Select(d => d.ToModel(activityDtoId)); + public static IEnumerable ToModels(this IEnumerable dtos, Activity activityDto) + => dtos.Select(d => d.ToModel(activityDto)); public static IEnumerable ToDtos(this IEnumerable models) => models.Select(m => m.ToDto()); diff --git a/src/Dto/ActivityDto.cs b/src/Dto/ActivityDto.cs index 003bdcc..6411837 100644 --- a/src/Dto/ActivityDto.cs +++ b/src/Dto/ActivityDto.cs @@ -1,3 +1,5 @@ +using Newtonsoft.Json; + namespace Dto; public class ActivityDto @@ -16,10 +18,19 @@ public class ActivityDto public int Minimum { get; set; } public float AverageTemperature { get; set; } public bool HasAutoPause { get; set; } + + [System.Text.Json.Serialization.JsonIgnore] public DataSourceDto? DataSource { get; set; } + [JsonProperty("DataSourceId")] + public int? DataSourceId { get; set; } + + [System.Text.Json.Serialization.JsonIgnore] public UserDto? Athlete { get; set; } + [JsonProperty("AthleteId")] + public int AthleteId { get; set; } + // public int? TrainingId { get; set; } public IEnumerable HeartRates { get; set; } } \ No newline at end of file diff --git a/src/Dto/AthleteDto.cs b/src/Dto/AthleteDto.cs index 723d01b..d5c94c0 100644 --- a/src/Dto/AthleteDto.cs +++ b/src/Dto/AthleteDto.cs @@ -18,8 +18,6 @@ public class UserDto public string? Password { get; set; } public DateTime DateOfBirth { get; set; } public string ProfilePicture { get; set; } = "https://davidalmeida.site/assets/me_avatar.f77af006.png"; - - public LargeImageDto Image { get; set; } = null!; - + public LargeImageDto? Image { get; set; } public bool IsCoach { get; set; } } diff --git a/src/Dto/Dto.csproj b/src/Dto/Dto.csproj index bb23fb7..3123d8b 100644 --- a/src/Dto/Dto.csproj +++ b/src/Dto/Dto.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/src/EFMappers/ActivityMapper.cs b/src/EFMappers/ActivityMapper.cs index 3cf85d6..1c58a3d 100644 --- a/src/EFMappers/ActivityMapper.cs +++ b/src/EFMappers/ActivityMapper.cs @@ -64,7 +64,7 @@ public static class ActivityMapper Action link = (activity, entity) => { entity.HeartRates = activity.HeartRates.ToEntities().ToList(); - entity.DataSource = activity.DataSource.ToEntity(); + entity.DataSource = activity.DataSource != null ? activity.DataSource.ToEntity() : null; entity.Athlete = activity.Athlete.ToEntity(); }; return model.ToU(_mapper, create, link); diff --git a/src/HeartTrackAPI/Controllers/ActivityController.cs b/src/HeartTrackAPI/Controllers/ActivityController.cs index 04a6210..b6e160b 100644 --- a/src/HeartTrackAPI/Controllers/ActivityController.cs +++ b/src/HeartTrackAPI/Controllers/ActivityController.cs @@ -16,10 +16,13 @@ public class ActivityController : Controller { private readonly IActivityRepository _activityService; private readonly ILogger _logger; + private readonly IUserRepository _userRepository; + public ActivityController(IDataManager dataManager, ILogger logger) { _activityService = dataManager.ActivityRepo; + _userRepository = dataManager.UserRepo; _logger = logger; } @@ -56,7 +59,20 @@ public class ActivityController : Controller [HttpPost] public async Task PostActivity(ActivityDto activityDto) { - var activity = activityDto.ToModel(); + var user = await _userRepository.GetItemById(activityDto.AthleteId); + if (user == null) + { + _logger.LogError("Athlete with id {id} not found", activityDto.AthleteId); + return NotFound($"Athlete with id {activityDto.AthleteId} not found"); + } + var tmp = user.DataSources.FirstOrDefault(ds => ds.Id == activityDto.DataSourceId); + if (tmp == null) + { + _logger.LogError("DataSource with id {id} not found", activityDto.DataSourceId); + return NotFound($"DataSource with id {activityDto.DataSourceId} not found"); + } + + var activity = activityDto.ToModel(user); var result = await _activityService.AddActivity(activity); if (result == null) { @@ -148,7 +164,13 @@ public class ActivityController : Controller { return BadRequest(); } - var activity = activityDto.ToModel(); + var user = await _userRepository.GetItemById(activityDto.AthleteId); + if (user == null) + { + _logger.LogError("Athlete with id {id} not found", activityDto.AthleteId); + return NotFound($"Athlete with id {activityDto.AthleteId} not found"); + } + var activity = activityDto.ToModel(user); var result = await _activityService.UpdateActivity(id, activity); if (result == null) { diff --git a/src/Model2Entities/UserRepository.cs b/src/Model2Entities/UserRepository.cs index 7e866a3..09d2cf2 100644 --- a/src/Model2Entities/UserRepository.cs +++ b/src/Model2Entities/UserRepository.cs @@ -170,8 +170,8 @@ public partial class DbDataManager public async Task RemoveFriend(User user, User friend) { _logger.LogInformation($"Attempting to remove friend: User {user.Id} removing Friend {friend.Id}"); - var userEntity = user.ToEntity(); - var friendEntity = friend.ToEntity(); + var userEntity = _dataManager.DbContext.AthletesSet.IncludeStandardProperties().FirstOrDefault(a => a.IdAthlete == user.Id); + var friendEntity = _dataManager.DbContext.AthletesSet.IncludeStandardProperties().FirstOrDefault(a => a.IdAthlete == friend.Id); if (userEntity == null || friendEntity == null) { _logger.LogWarning($"User or friend not found: User {user.Id}, Friend {friend.Id}"); @@ -199,7 +199,7 @@ public partial class DbDataManager _logger.LogInformation($"GetFriends with index {index} and count {count}", index, count); _logger.LogInformation($"GetFriends with criteria {criteria} and descending {descending}", criteria, descending); - var friends = _dataManager.DbContext.AthletesSet.IncludeStandardProperties() + var friends = _dataManager.DbContext.AthletesSet.IncludeStandardProperties().Include(a => a.Followers).Include(a => a.Followings) .GetItemsWithFilterAndOrdering(a => a.Followers.Any(f => f.FollowingId == user.Id), index, count, criteria, descending).ToModels(); _logger.LogInformation($"Retrieved {friends.Count()} friends");