Skip to content

Commit

Permalink
Merge pull request #12 from larsschloegel/2-Chashflow_und_Rendite_anz…
Browse files Browse the repository at this point in the history
…eigen-Api_Calculation_Purchase_Cost

#2 chashflow und rendite anzeigen - calculation purchase cost
  • Loading branch information
larsschloegel committed Nov 18, 2021
2 parents 11a15e7 + 1079af8 commit 403eba1
Show file tree
Hide file tree
Showing 13 changed files with 337 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class OctoparseApiDto {
@JsonProperty("Image1")
private String propertyPictureUrl;
@JsonProperty("typ")
private String propertyTyp;
private String subtyp;
@JsonProperty("kaufpreis")
private String purchasePrice;
@JsonProperty("wohnflaeche")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
Expand Down Expand Up @@ -84,6 +83,7 @@ public String getAllDataFromOctoparse(String accessToken) {
JSONArray dataJsonToArray = (JSONArray) JSON.parse(dataJson);
finalArray.addAll(dataJsonToArray);
} while (restTotal != 0);
//set flag for taskID
return finalArray.toString();
}

Expand All @@ -97,7 +97,7 @@ public List<OctoparseApiDto> mapToOctoparseApiDto(String allDataFromOctoparseApi
public OctoparseApiDto cleanPropertyObject (OctoparseApiDto propertyObject){
String removeSpacesAndTabs = "[/\\sg]";
String removeSpacesTabsAndUnit = "[/\\sgm²]";
propertyObject.setPropertyTyp(propertyObject.getPropertyTyp().replaceAll(removeSpacesAndTabs,""));
propertyObject.setSubtyp(propertyObject.getSubtyp().replaceAll(removeSpacesAndTabs,""));
propertyObject.setPurchasePrice(propertyObject.getPurchasePrice().replaceAll("[/\\sg€.]",""));
propertyObject.setSize(propertyObject.getSize().replaceAll(removeSpacesTabsAndUnit,"").replaceAll("[,]","."));
propertyObject.setRoomCount(propertyObject.getRoomCount().replaceAll(removeSpacesAndTabs,""));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,27 @@
import de.propertyfinder.backend.model.Property;
import de.propertyfinder.backend.service.PropertyService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping
public class AdminController {
private PropertyService propertyService;
private final PropertyService propertyService;

@GetMapping("api/admin/properties")
public List<Property> getAllPropertiesFromApiAfterMapping() throws JsonProcessingException {
return propertyService.getAllPropertiesFromApiAfterMapping();
}

@PostMapping("api/admin/addproperties")
@PostMapping("api/admin/addpropertiesfromApi")
public List<Property> addPropertiesFromApiToDB() throws JsonProcessingException {
return propertyService.addPropertiesFromApiToDB();
}
@PostMapping("api/admin/addpropertiesfromPostman")
public List<Property> addPropertiesFromApiToDB(@RequestBody List<Property> properties) {
return propertyService.addPropertiesFromPostman(properties);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.propertyfinder.backend.mapper;

import de.propertyfinder.backend.api.octoparse.OctoparseApiDto;
import de.propertyfinder.backend.model.PlzGermany;
import de.propertyfinder.backend.model.Property;
import org.springframework.stereotype.Component;

Expand All @@ -10,15 +11,15 @@
@Component
public class PropertyMapper {

public static Property toProperty(OctoparseApiDto octoparseApiDto){
public static Property OctoparseApiDtoToProperty(OctoparseApiDto octoparseApiDto){
return Property
.builder()
.id(UUID.randomUUID().toString())
.name(octoparseApiDto.getPropertyName())
.source("Immobilien Scout 24")
.exposeUrl(octoparseApiDto.getExposeUrl())
.contactPerson(octoparseApiDto.getContactPerson())
.type(octoparseApiDto.getPropertyTyp())
.type(octoparseApiDto.getSubtyp())
.plz(octoparseApiDto.getPlz())
.city(octoparseApiDto.getCity())
.purchasePriceInEuro(Double.parseDouble(octoparseApiDto.getPurchasePrice()))
Expand All @@ -29,7 +30,7 @@ public static Property toProperty(OctoparseApiDto octoparseApiDto){
public List<Property> toProperties(List<OctoparseApiDto> octoparseApiDtoList){
return octoparseApiDtoList
.stream()
.map(PropertyMapper::toProperty)
.map(PropertyMapper::OctoparseApiDtoToProperty)
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package de.propertyfinder.backend.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "additionalPurchaseCost")
public class AdditionalPurchaseCosts {

private String state;
private double notaryFeeInPercent;
private double realEstateTransferTaxInPercent;
private double realEstateAgentFeeInPercent;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package de.propertyfinder.backend.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "germanyplz")
public class PlzGermany {

@Id
private String osmId;
private String ags;
private String ort;
private String plz;
private String landkreis;
private String bundesland;

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Document(collection = "property")
public class Property {

@Id
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package de.propertyfinder.backend.repo;

import de.propertyfinder.backend.model.AdditionalPurchaseCosts;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface AdditionalPurchaseCostRepo extends MongoRepository<AdditionalPurchaseCosts, String> {
AdditionalPurchaseCosts findByState(String state);
}
13 changes: 13 additions & 0 deletions backend/src/main/java/de/propertyfinder/backend/repo/PlzRepo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package de.propertyfinder.backend.repo;

import de.propertyfinder.backend.model.PlzGermany;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface PlzRepo extends MongoRepository<PlzGermany, String> {
PlzGermany findByPlz(String plz);
List<PlzGermany> findAll();
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,31 @@
import de.propertyfinder.backend.api.octoparse.OctoparseApiDto;
import de.propertyfinder.backend.api.octoparse.OctoparseApiService;
import de.propertyfinder.backend.mapper.PropertyMapper;
import de.propertyfinder.backend.model.AdditionalPurchaseCosts;
import de.propertyfinder.backend.model.PlzGermany;
import de.propertyfinder.backend.model.Property;
import de.propertyfinder.backend.repo.AdditionalPurchaseCostRepo;
import de.propertyfinder.backend.repo.PlzRepo;
import de.propertyfinder.backend.repo.PropertyRepo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.stream.Collectors;

@Slf4j
@Service
@RequiredArgsConstructor
public class PropertyService {

private final PropertyRepo propertyRepo;
private final PropertyMapper propertyMapper;
private final OctoparseApiService octoparseApiService;
private final PlzRepo plzRepo;
private final AdditionalPurchaseCostRepo additionalPurchaseCostRepo;

public List<Property> getAllPropertiesFromApiAfterMapping() throws JsonProcessingException {
List<OctoparseApiDto> octoparseApiDtoList = octoparseApiService.getAllProperties();
Expand All @@ -36,11 +45,62 @@ public List<Property> getAllProperties() {
return propertyRepo.findAll();
}

public Property getSingleProperty(String id){
public Property getSingleProperty(String id) {
Optional<Property> optionalProperty = propertyRepo.findById(id);
if (optionalProperty.isEmpty()){
throw new NoSuchElementException("Property with id: "+ id +" not found!");
if (optionalProperty.isEmpty()) {
throw new NoSuchElementException("Property with id: " + id + " not found!");
}
return optionalProperty.get();
}

public List<Property> addPropertiesFromPostman(List<Property> properties) {
properties.stream()
.map(this::setState)
.map(this::setRealEstateAgentFee)
.map(this::setRealEstateTransferTax)
.map(this::setNotaryFee)
.map(this::setSumAdditionalPurchaseCost)
.map(this::setOverallPurchasePrice)
.collect(Collectors.toList());
return (List<Property>) propertyRepo.saveAll(properties);
}

public Property setState(Property property) {
PlzGermany plzGermany = plzRepo.findByPlz(property.getPlz());
property.setState(plzGermany.getBundesland());
return property;
}

public Property setRealEstateAgentFee(Property property) {
AdditionalPurchaseCosts additionalPurchaseCosts = additionalPurchaseCostRepo.findByState(property.getState());
property.setRealEstateAgentFeeInPercent(additionalPurchaseCosts.getRealEstateAgentFeeInPercent());
property.setRealEstateAgentFeeInEuro(property.getRealEstateAgentFeeInPercent() * property.getPurchasePriceInEuro() /100);
return property;
}

public Property setRealEstateTransferTax(Property property) {
AdditionalPurchaseCosts additionalPurchaseCosts = additionalPurchaseCostRepo.findByState(property.getState());
property.setRealEstateTransferTaxInPercent(additionalPurchaseCosts.getRealEstateTransferTaxInPercent());
property.setRealEstateTransferTaxInEuro(property.getRealEstateTransferTaxInPercent() * property.getPurchasePriceInEuro() /100);
return property;
}

public Property setNotaryFee(Property property) {
AdditionalPurchaseCosts additionalPurchaseCosts = additionalPurchaseCostRepo.findByState(property.getState());
property.setNotaryFeeInPercent(additionalPurchaseCosts.getNotaryFeeInPercent());
property.setNotaryFeeInEuro(property.getNotaryFeeInPercent() * property.getPurchasePriceInEuro() /100);
return property;
}

public Property setSumAdditionalPurchaseCost(Property property) {
property.setSumAdditionalPurchaseCostInEuro(property.getRealEstateAgentFeeInEuro() + property.getRealEstateTransferTaxInEuro() + property.getNotaryFeeInEuro());
return property;
}

public Property setOverallPurchasePrice(Property property) {
property.setOverallPurchasePriceInEuro(property.getPurchasePriceInEuro() + property.getSumAdditionalPurchaseCostInEuro());
return property;
}


}
2 changes: 1 addition & 1 deletion backend/src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
de.propertyfinder.backend.octoparse.userName=${userNameOctoparse}
de.propertyfinder.backend.octoparse.passWord=${passWordOctoparse}
de.propertyfinder.backend.octoparse.taskId=${OctoparseTaskID}
spring.data.mongodb.database=propertyfinder
spring.data.mongodb.database=property-finder
Loading

0 comments on commit 403eba1

Please sign in to comment.