Skip to content

Commit

Permalink
refactor(GridPrice): remove grid price project
Browse files Browse the repository at this point in the history
  • Loading branch information
pkuehnel committed Mar 10, 2024
1 parent 99e703c commit 3b7987d
Show file tree
Hide file tree
Showing 32 changed files with 114 additions and 196 deletions.

This file was deleted.

19 changes: 0 additions & 19 deletions TeslaSolarCharger.GridPriceProvider/ServiceCollectionExtensions.cs

This file was deleted.

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion TeslaSolarCharger.Model/TeslaSolarCharger.Model.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\TeslaSolarCharger.GridPriceProvider\TeslaSolarCharger.GridPriceProvider.csproj" />
<ProjectReference Include="..\TeslaSolarCharger\Shared\TeslaSolarCharger.Shared.csproj" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using TeslaSolarCharger.GridPriceProvider.Data;
using TeslaSolarCharger.Model.Entities.TeslaSolarCharger;
using TeslaSolarCharger.Server.Services.GridPrice.Dtos;
using Xunit;
using Xunit.Abstractions;

Expand Down
35 changes: 3 additions & 32 deletions TeslaSolarCharger.Tests/Services/Server/FixedPriceService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,35 +15,6 @@ public FixedPriceService(ITestOutputHelper outputHelper)
{
}

[Fact]
public void Can_Generate_Fixed_Price_Config()
{
var fixedPrices = new List<FixedPrice>()
{
new()
{
FromHour = 6,
FromMinute = 0,
ToHour = 15,
ToMinute = 0,
Value = 0.11m,
},
new()
{
FromHour = 15,
FromMinute = 0,
ToHour = 6,
ToMinute = 0,
Value = 0.30m,
},
};

var fixedPriceService = Mock.Create<GridPriceProvider.Services.FixedPriceService>();
var jsonString = fixedPriceService.GenerateConfigString(fixedPrices);
var expectedJson = "[{\"FromHour\":6,\"FromMinute\":0,\"ToHour\":15,\"ToMinute\":0,\"Value\":0.11,\"ValidOnDays\":null},{\"FromHour\":15,\"FromMinute\":0,\"ToHour\":6,\"ToMinute\":0,\"Value\":0.30,\"ValidOnDays\":null}]";
Assert.Equal(expectedJson, jsonString);
}

[Fact]
public void Can_Generate_Prices_Based_On_Fixed_Prices()
{
Expand All @@ -66,7 +37,7 @@ public void Can_Generate_Prices_Based_On_Fixed_Prices()
Value = 0.30m,
},
};
var fixedPriceService = Mock.Create<GridPriceProvider.Services.FixedPriceService>();
var fixedPriceService = Mock.Create<TeslaSolarCharger.Server.Services.GridPrice.FixedPriceService>();
var prices = fixedPriceService.GeneratePricesBasedOnFixedPrices(new DateTimeOffset(2023, 1, 21, 0, 0, 0, TimeSpan.Zero), new DateTimeOffset(2023, 1, 21, 23, 59, 59, TimeSpan.Zero), fixedPrices);
//ToDo: to test this properly, a timezone has to be set in the test
}
Expand All @@ -93,7 +64,7 @@ public void Can_Split_Fixed_Prices_On_Midnight_Weekdays_Null()
Value = 0.30m,
},
};
var fixedPriceService = Mock.Create<GridPriceProvider.Services.FixedPriceService>();
var fixedPriceService = Mock.Create<TeslaSolarCharger.Server.Services.GridPrice.FixedPriceService>();
var midnightSeparatedFixedPrices = fixedPriceService.SplitFixedPricesAtMidnight(fixedPrices);
Assert.Equal(3, midnightSeparatedFixedPrices.Count);
Assert.Single(midnightSeparatedFixedPrices.Where(p => p is { FromHour: 6, FromMinute: 0, ToHour: 15, ToMinute: 0, Value: 0.11m, ValidOnDays: null}));
Expand Down Expand Up @@ -152,7 +123,7 @@ public void Can_Split_Fixed_Prices_On_Midnight_Weekdays_Not_Null()
ValidOnDays = new List<DayOfWeek>() { DayOfWeek.Sunday },
},
};
var fixedPriceService = Mock.Create<GridPriceProvider.Services.FixedPriceService>();
var fixedPriceService = Mock.Create<TeslaSolarCharger.Server.Services.GridPrice.FixedPriceService>();
var midnightSeparatedFixedPrices = fixedPriceService.SplitFixedPricesAtMidnight(fixedPrices);
Assert.Equal(7, midnightSeparatedFixedPrices.Count);
Assert.Single(midnightSeparatedFixedPrices.Where(p => p is { FromHour: 0, FromMinute: 0, ToHour: 7, ToMinute: 0, Value: 0.2134m, ValidOnDays.Count: 5 }
Expand Down
6 changes: 0 additions & 6 deletions TeslaSolarCharger.sln
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
README.md = README.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeslaSolarCharger.GridPriceProvider", "TeslaSolarCharger.GridPriceProvider\TeslaSolarCharger.GridPriceProvider.csproj", "{1BE60FFB-0C76-4D8A-8FD5-04C886885AB9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeslaSolarCharger.SharedModel", "TeslaSolarCharger.SharedModel\TeslaSolarCharger.SharedModel.csproj", "{1F0ECB0D-0F44-47EF-983C-C0001FFE0D73}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeslaSolarCharger.Services", "TeslaSolarCharger.Services\TeslaSolarCharger.Services.csproj", "{21A8DB64-E449-474E-94DD-360C30D1756A}"
Expand Down Expand Up @@ -81,10 +79,6 @@ Global
{9958124C-3B96-4186-AFFA-1477C6582D84}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9958124C-3B96-4186-AFFA-1477C6582D84}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9958124C-3B96-4186-AFFA-1477C6582D84}.Release|Any CPU.Build.0 = Release|Any CPU
{1BE60FFB-0C76-4D8A-8FD5-04C886885AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1BE60FFB-0C76-4D8A-8FD5-04C886885AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1BE60FFB-0C76-4D8A-8FD5-04C886885AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1BE60FFB-0C76-4D8A-8FD5-04C886885AB9}.Release|Any CPU.Build.0 = Release|Any CPU
{1F0ECB0D-0F44-47EF-983C-C0001FFE0D73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F0ECB0D-0F44-47EF-983C-C0001FFE0D73}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F0ECB0D-0F44-47EF-983C-C0001FFE0D73}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down
39 changes: 26 additions & 13 deletions TeslaSolarCharger/Client/Pages/ChargeCostDetail.razor
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
@using TeslaSolarCharger.Shared.Contracts
@using TeslaSolarCharger.Shared.Dtos.ChargingCost.CostConfigurations
@using TeslaSolarCharger.Shared.Enums
@using Newtonsoft.Json
@inject HttpClient HttpClient
@inject NavigationManager NavigationManager
@inject IDateTimeProvider DateTimeProvider
@inject ISnackbar Snackbar

<button class="btn btn-primary" @onclick="NavigateToList">All Charge costs</button>
<h1>ChargePriceDetail</h1>
Expand Down Expand Up @@ -68,10 +70,10 @@ else
</InputFragment>
</InputComponent>

@if (ChargePrice.EnergyProvider == EnergyProvider.FixedPrice && ChargePrice.FixedPrices != null)
@if (ChargePrice.EnergyProvider == EnergyProvider.FixedPrice && FixedPrices != null)
{
<div>You can specify times with special prices here. If there are times left, you didn't specify a price for, the default grid price, specified above, is used.</div>
@foreach (var fixedPrice in ChargePrice.FixedPrices)
@foreach (var fixedPrice in FixedPrices)
{
<div class="row mt-3">
<div class="col-auto">
Expand Down Expand Up @@ -150,11 +152,17 @@ else

private bool SubmitIsLoading { get; set; }

private List<FixedPrice>? FixedPrices { get; set; }

protected override async Task OnInitializedAsync()
{
if (ChargeCostId != null)
{
ChargePrice = await HttpClient.GetFromJsonAsync<DtoChargePrice>($"api/ChargingCost/GetChargePriceById?id={ChargeCostId}").ConfigureAwait(false);
if(ChargePrice is { EnergyProviderConfiguration: not null, EnergyProvider: EnergyProvider.FixedPrice })
{
FixedPrices = JsonConvert.DeserializeObject<List<FixedPrice>>(ChargePrice.EnergyProviderConfiguration);
}
}
else
{
Expand All @@ -176,6 +184,19 @@ else
private async Task SaveChargePrice()
{
SubmitIsLoading = true;
if(ChargePrice == null)
{
Snackbar.Add("Charge price is null and can not be saved. Try reloading the page.", Severity.Error);
return;
}
if(ChargePrice.EnergyProvider == EnergyProvider.FixedPrice)
{
ChargePrice.EnergyProviderConfiguration = JsonConvert.SerializeObject(FixedPrices);
}
else
{
ChargePrice.EnergyProviderConfiguration = null;
}
await HttpClient.PostAsJsonAsync("api/ChargingCost/UpdateChargePrice", ChargePrice).ConfigureAwait(false);
SubmitIsLoading = false;
NavigateToList();
Expand All @@ -188,28 +209,20 @@ else
return;
}
ChargePrice.EnergyProvider = energyProvider;
ChargePrice.FixedPrices = energyProvider == EnergyProvider.FixedPrice ? new List<FixedPrice>() : null;
FixedPrices = energyProvider == EnergyProvider.FixedPrice ? new List<FixedPrice>() : null;
}

private void AddFixedPrice()
{
if(ChargePrice?.FixedPrices == null)
{
return;
}
ChargePrice.FixedPrices.Add(new FixedPrice()
FixedPrices?.Add(new FixedPrice()
{
ValidOnDays = new List<DayOfWeek>(),
});
}

private void DeleteFixedPrice(FixedPrice fixedPrice)
{
if(ChargePrice?.FixedPrices == null)
{
return;
}
ChargePrice.FixedPrices.Remove(fixedPrice);
FixedPrices?.Remove(fixedPrice);
}

}
2 changes: 1 addition & 1 deletion TeslaSolarCharger/Server/Contracts/ICoreService.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using TeslaSolarCharger.GridPriceProvider.Data;
using TeslaSolarCharger.Server.Services.GridPrice.Dtos;
using TeslaSolarCharger.Shared.Dtos;

namespace TeslaSolarCharger.Server.Contracts;
Expand Down
2 changes: 1 addition & 1 deletion TeslaSolarCharger/Server/Controllers/HelloController.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using TeslaSolarCharger.GridPriceProvider.Data;
using TeslaSolarCharger.Server.Contracts;
using TeslaSolarCharger.Server.Services.Contracts;
using TeslaSolarCharger.Server.Services.GridPrice.Dtos;
using TeslaSolarCharger.Shared.Dtos;
using TeslaSolarCharger.SharedBackend.Abstracts;

Expand Down
2 changes: 0 additions & 2 deletions TeslaSolarCharger/Server/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using Serilog;
using Serilog.Context;
using System.Diagnostics;
using TeslaSolarCharger.GridPriceProvider;
using TeslaSolarCharger.Model.Contracts;
using TeslaSolarCharger.Server;
using TeslaSolarCharger.Server.Contracts;
Expand Down Expand Up @@ -30,7 +29,6 @@
var useFleetApi = configurationManager.GetValue<bool>("UseFleetApi");
builder.Services.AddMyDependencies(useFleetApi);
builder.Services.AddSharedDependencies();
builder.Services.AddGridPriceProvider();
builder.Services.AddServicesDependencies();

builder.Host.UseSerilog((context, configuration) => configuration
Expand Down
3 changes: 3 additions & 0 deletions TeslaSolarCharger/Server/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
using TeslaSolarCharger.Server.Services.ApiServices;
using TeslaSolarCharger.Server.Services.ApiServices.Contracts;
using TeslaSolarCharger.Server.Services.Contracts;
using TeslaSolarCharger.Server.Services.GridPrice;
using TeslaSolarCharger.Server.Services.GridPrice.Contracts;
using TeslaSolarCharger.Shared.Contracts;
using TeslaSolarCharger.Shared.Dtos;
using TeslaSolarCharger.Shared.Dtos.Contracts;
Expand Down Expand Up @@ -98,6 +100,7 @@ public static IServiceCollection AddMyDependencies(this IServiceCollection servi
.AddTransient<ITscConfigurationService, TscConfigurationService>()
.AddTransient<IBackendApiService, BackendApiService>()
.AddTransient<ITscOnlyChargingCostService, TscOnlyChargingCostService>()
.AddTransient<IFixedPriceService, FixedPriceService>()
.AddSharedBackendDependencies();
if (useFleetApi)
{
Expand Down
9 changes: 3 additions & 6 deletions TeslaSolarCharger/Server/Services/ChargingCostService.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
using AutoMapper.QueryableExtensions;
using Microsoft.EntityFrameworkCore;
using TeslaSolarCharger.GridPriceProvider.Data;
using TeslaSolarCharger.GridPriceProvider.Services.Interfaces;
using TeslaSolarCharger.Model.Contracts;
using TeslaSolarCharger.Model.Entities.TeslaSolarCharger;
using TeslaSolarCharger.Server.Contracts;
using TeslaSolarCharger.Server.Services.GridPrice.Contracts;
using TeslaSolarCharger.Server.Services.GridPrice.Dtos;
using TeslaSolarCharger.Shared.Contracts;
using TeslaSolarCharger.Shared.Dtos.ChargingCost;
using TeslaSolarCharger.Shared.Dtos.ChargingCost.CostConfigurations;
using TeslaSolarCharger.Shared.Dtos.Contracts;
using TeslaSolarCharger.Shared.Enums;
using TeslaSolarCharger.SharedBackend.MappingExtensions;
Expand Down Expand Up @@ -64,14 +63,14 @@ public async Task UpdateChargePrice(DtoChargePrice dtoChargePrice)
chargePrice.EnergyProvider = dtoChargePrice.EnergyProvider;
chargePrice.AddSpotPriceToGridPrice = dtoChargePrice.AddSpotPriceToGridPrice;
chargePrice.SpotPriceCorrectionFactor = (dtoChargePrice.SpotPriceSurcharge ?? 0) / 100;
chargePrice.EnergyProviderConfiguration = dtoChargePrice.EnergyProviderConfiguration;
switch (dtoChargePrice.EnergyProvider)
{
case EnergyProvider.Octopus:
break;
case EnergyProvider.Tibber:
break;
case EnergyProvider.FixedPrice:
chargePrice.EnergyProviderConfiguration = _fixedPriceService.GenerateConfigString(dtoChargePrice.FixedPrices ?? throw new InvalidOperationException());
break;
case EnergyProvider.Awattar:
break;
Expand Down Expand Up @@ -658,7 +657,6 @@ public async Task<DtoChargePrice> GetChargePriceById(int id)
{
cfg.CreateMap<ChargePrice, DtoChargePrice>()
.ForMember(d => d.SpotPriceSurcharge, opt => opt.MapFrom(c => c.SpotPriceCorrectionFactor * 100))
.ForMember(d => d.FixedPrices, opt => opt.Ignore())
;
});
var chargePrices = await _teslaSolarChargerContext.ChargePrices
Expand All @@ -672,7 +670,6 @@ public async Task<DtoChargePrice> GetChargePriceById(int id)
case EnergyProvider.Tibber:
break;
case EnergyProvider.FixedPrice:
chargePrices.FixedPrices = chargePrices.EnergyProviderConfiguration != null ? _fixedPriceService.ParseConfigString(chargePrices.EnergyProviderConfiguration) : new List<FixedPrice>();
break;
case EnergyProvider.Awattar:
break;
Expand Down
7 changes: 2 additions & 5 deletions TeslaSolarCharger/Server/Services/CoreService.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
using System.Diagnostics;
using System.Reflection;
using TeslaSolarCharger.GridPriceProvider.Data;
using TeslaSolarCharger.GridPriceProvider.Services.Interfaces;
using TeslaSolarCharger.Model.Contracts;
using TeslaSolarCharger.Server.Contracts;
using TeslaSolarCharger.Server.Dtos.TscBackend;
using TeslaSolarCharger.Server.Scheduling;
using TeslaSolarCharger.Server.Services.Contracts;
using TeslaSolarCharger.Server.Services.GridPrice.Contracts;
using TeslaSolarCharger.Server.Services.GridPrice.Dtos;
using TeslaSolarCharger.Shared.Contracts;
using TeslaSolarCharger.Shared.Dtos;
using TeslaSolarCharger.Shared.Dtos.Contracts;
using TeslaSolarCharger.Shared.Resources.Contracts;
using TeslaSolarCharger.SharedBackend.Contracts;

namespace TeslaSolarCharger.Server.Services;

Expand Down
Loading

0 comments on commit 3b7987d

Please sign in to comment.