This project is the back-end of the Rate Simulator , it's a REST API to analyze light consumption. To do so, you need to provide the bill extraction in CSV format, for now only supports Endesa format (as it's the main provider in Spain). You can download the bill export file from the client area.
The format of the CSV file that is provided doesn't follow the common pattern of having a header and then the rows. For example, at the beginning when parsing the csv we have to skip 5 lines of bill info and also stop reading before the last line of the file.
The purpose of this project is to be aware of which electricity rate plan fits better with your consumption habits. The two main rates are compared, One Luz provides always the same price however One Luz 3 Periodos varies according to the time or if it's weekend.
After reading Head First Design Patterns I was looking for some project ideas where I could apply the knowledge acquired. Then I realised that I could take profit of what I was watching everyday in the news, the light rise.
So in this project I have been able to be in touch with some patterns like Strategy as each rate can be seen as a way of performing some operations over the same input. Moreover, rate instances are created through a Factory. It also uses Dependency Injection for the configuration and the logger.
This project also has been an opportunity to learn a bit more of the deployment stage, the back-end it's using a Dockerfile and hosted in Azure. The front-end (React) it's on heroku with a pipeline that builds the master branch.
GET /api/Rate
{
"pricePerKwHPunta": 0.262682,
"pricePerKwHLlano": 0.164195,
"pricePerKwHValle": 0.122177,
"pricePerKwH": 0.173941
}
In this endpoint is where you can upload the files to analyze. Also allows to change the price configuration for this specific request.
POST /api/Rate
"Content-Type: multipart/form-data" -F "[email protected];type=application/vnd.ms-excel" -F "PricePerKwHLlano=0,2315"
{
"oneLuz": {
"cost": 64.897908923,
"consumptionBreakdown": {
"unique-rate": 373103
}
},
"oneLuz3Periodos": {
"cost": 63.513783024999995,
"consumptionBreakdown": {
"llano": 96443,
"punta": 98764,
"valle": 177896
}
}
}