to test
continuous-integration/drone/push Build is passing Details

V2
David D'ALMEIDA 1 year ago
parent b6f1b51c9f
commit 4d6bf8bb84

@ -8,7 +8,7 @@ public static class ActivityMapper
{
private static GenericMapper<Activity, ActivityDto> _mapper = new();
public static Activity ToModel(this ActivityDto activityDto)
public static Activity ToModel(this ActivityDto activityDto, User user)
{
Func<ActivityDto, Activity> create = activity => new Activity
{
@ -30,12 +30,15 @@ public static class ActivityMapper
Action<ActivityDto, Activity> 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<Activity, ActivityDto> link = (activity, dto) =>
@ -68,8 +72,8 @@ public static class ActivityMapper
return model.ToU(_mapper, create, link);
}
public static IEnumerable<Activity> ToModels(this IEnumerable<ActivityDto> dtos)
=> dtos.Select(dto => dto.ToModel());
public static IEnumerable<Activity> ToModels(this IEnumerable<ActivityDto> dtos, User user)
=> dtos.Select(dto => dto.ToModel(user));
public static IEnumerable<ActivityDto> ToDtos(this IEnumerable<Activity> models)
=> models.Select(model => model.ToDto());

@ -9,10 +9,11 @@ public static class DataSourceMapper
private static GenericMapper<DataSource, DataSourceDto> _mapper = new ();
public static DataSource ToModel(this DataSourceDto dto)
public static DataSource ToModel(this DataSourceDto dto, User user)
{
Func<DataSourceDto, DataSource> create = dataSourceDto =>
new DataSource( dataSourceDto.Id, dataSourceDto.Type, dataSourceDto.Model, dataSourceDto.Precision, dataSourceDto.Athletes.ToModels().ToList(), dataSourceDto.Activities.ToModels().ToList());
Func<DataSourceDto, DataSource> create = dataSourceDto =>
new DataSource(dataSourceDto.Id, dataSourceDto.Type, dataSourceDto.Model, dataSourceDto.Precision,
new List<User> { user }, user.Activities.Where(a => a.DataSource.Id == dataSourceDto.Id).ToList());
/*
Action<DataSourceDto, DataSource> link = (dataSourceDto, model) =>
{
@ -41,8 +42,8 @@ public static class DataSourceMapper
return model.ToU(_mapper, create, link);
}
public static IEnumerable<DataSource> ToModels(this IEnumerable<DataSourceDto> dtos)
=> dtos.Select(d => d.ToModel());
public static IEnumerable<DataSource> ToModels(this IEnumerable<DataSourceDto> dtos, User user)
=> dtos.Select(d => d.ToModel(user));
public static IEnumerable<DataSourceDto> ToDtos(this IEnumerable<DataSource> models)
=> models.Select(m => m.ToDto());

@ -8,10 +8,10 @@ public static class HeartRateMapper
{
private static GenericMapper<HeartRate, HeartRateDto> _mapper = new();
public static HeartRate ToModel(this HeartRateDto dto,int activityDtoId)
public static HeartRate ToModel(this HeartRateDto dto,Activity activityDto)
{
Func<HeartRateDto, HeartRate> 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<HeartRate> ToModels(this IEnumerable<HeartRateDto> dtos, int activityDtoId)
=> dtos.Select(d => d.ToModel(activityDtoId));
public static IEnumerable<HeartRate> ToModels(this IEnumerable<HeartRateDto> dtos, Activity activityDto)
=> dtos.Select(d => d.ToModel(activityDto));
public static IEnumerable<HeartRateDto> ToDtos(this IEnumerable<HeartRate> models)
=> models.Select(m => m.ToDto());

@ -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<HeartRateDto> HeartRates { get; set; }
}

@ -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; }
}

@ -6,4 +6,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

@ -64,7 +64,7 @@ public static class ActivityMapper
Action<Activity, ActivityEntity> 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);

@ -16,10 +16,13 @@ public class ActivityController : Controller
{
private readonly IActivityRepository _activityService;
private readonly ILogger<ActivityController> _logger;
private readonly IUserRepository _userRepository;
public ActivityController(IDataManager dataManager, ILogger<ActivityController> logger)
{
_activityService = dataManager.ActivityRepo;
_userRepository = dataManager.UserRepo;
_logger = logger;
}
@ -56,7 +59,20 @@ public class ActivityController : Controller
[HttpPost]
public async Task<IActionResult> 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)
{

@ -170,8 +170,8 @@ public partial class DbDataManager
public async Task<bool> 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");

Loading…
Cancel
Save