Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.backend into SI-63-Datenbanktabelle-um-Maps-Attribute-erweitern

+ sql script angepasst. Richtige Werte für longitude und latitude eingefügt und für history data
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/GridFailureInformationApplication.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/GridFailureInformationApplication.java
index 7a2c029..ffd65c0 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/GridFailureInformationApplication.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/GridFailureInformationApplication.java
@@ -20,3 +20,6 @@
 	}
 
 }
+
+
+
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/HistFailureInformationController.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/HistFailureInformationController.java
new file mode 100644
index 0000000..3e5270a
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/HistFailureInformationController.java
@@ -0,0 +1,64 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+package org.eclipse.openk.gridfailureinformation.controller;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.gridfailureinformation.service.HistFailureInformationService;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.UUID;
+
+@Log4j2
+@RestController
+@RequestMapping("/hist-grid-failure-informations")
+public class HistFailureInformationController {
+
+    @Value("${gridFailureInformation.maxListSize}")
+    int maxListSize;
+
+    @Autowired
+    private HistFailureInformationService histfailureInformationService;
+
+
+    @GetMapping("/{uuid}/versions")
+    @ApiOperation(value = "Anzeigen aller Versionen einer Störungsinformation")
+    @ApiResponses(value = { @ApiResponse(code = 200, message = "Erfolgreich durchgeführt"),
+            @ApiResponse(code = 404, message = "Störungsinformationen wurden nicht gefunden")})
+    @ResponseStatus(HttpStatus.OK)
+    public List<FailureInformationDto> getHistFailureInformationVersions(@PathVariable UUID uuid) {
+        return histfailureInformationService.getFailureInformationVersionsByUuid(uuid);
+    }
+
+    @GetMapping("/{uuid}/versions/{versionNumber}")
+    @ApiOperation(value = "Anzeigen einer bestimmten Version einer Störungsinformation")
+    @ApiResponses(value = { @ApiResponse(code = 200, message = "Erfolgreich durchgeführt"),
+            @ApiResponse(code = 404, message = "Störungsinformation wurden nicht gefunden")})
+    @ResponseStatus(HttpStatus.OK)
+    public FailureInformationDto readVersion(
+            @PathVariable UUID uuid,
+            @PathVariable Long versionNumber) {
+        return histfailureInformationService.getFailureInformationVersion(uuid, versionNumber);
+    }
+
+
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/HistFailureInformationMapper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/HistFailureInformationMapper.java
new file mode 100644
index 0000000..a5882f6
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/HistFailureInformationMapper.java
@@ -0,0 +1,57 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+package org.eclipse.openk.gridfailureinformation.mapper;
+
+import org.eclipse.openk.gridfailureinformation.model.HtblFailureInformation;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+import org.mapstruct.ReportingPolicy;
+
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface HistFailureInformationMapper {
+    @Mappings({
+            @Mapping(source = "refFailureClassification.uuid", target = "failureClassificationId"),
+            @Mapping(source = "refFailureClassification.classification", target = "failureClassification"),
+            @Mapping(source = "refFailureType.uuid", target = "failureTypeId"),
+            @Mapping(source = "refFailureType.type", target = "failureType"),
+            @Mapping(source = "refStatusIntern.uuid", target = "statusInternId"),
+            @Mapping(source = "refStatusIntern.status", target = "statusIntern"),
+            @Mapping(source = "refStatusExtern.uuid", target = "statusExternId"),
+            @Mapping(source = "refStatusExtern.status", target = "statusExtern"),
+            @Mapping(source = "refBranch.uuid", target = "branchId"),
+            @Mapping(source = "refBranch.name", target = "branch"),
+            @Mapping(source = "refBranch.colorCode", target = "branchColorCode")
+    })
+    FailureInformationDto toFailureInformationDto(HtblFailureInformation htblFailureInformation);
+
+    @Mappings({
+            @Mapping(target = "refFailureClassification.uuid", source = "failureClassificationId"),
+            @Mapping(target = "refFailureClassification.classification", source = "failureClassification"),
+            @Mapping(target = "refFailureType.uuid", source = "failureTypeId"),
+            @Mapping(target = "refFailureType.type", source = "failureType"),
+            @Mapping(target = "refStatusIntern.uuid", source = "statusInternId"),
+            @Mapping(target = "refStatusIntern.status", source = "statusIntern"),
+            @Mapping(target = "refStatusExtern.uuid", source = "statusExternId"),
+            @Mapping(target = "refStatusExtern.status", source = "statusExtern"),
+            @Mapping(target = "refBranch.uuid", source = "branchId"),
+            @Mapping(target = "refBranch.name", source = "branch"),
+            @Mapping(target = "refBranch.colorCode", source = "branchColorCode")
+    })
+    HtblFailureInformation toHtblFailureInformation(FailureInformationDto failureInformationDto);
+
+
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformation.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformation.java
new file mode 100644
index 0000000..acc67e1
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformation.java
@@ -0,0 +1,97 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+package org.eclipse.openk.gridfailureinformation.model;
+
+import lombok.Data;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.util.Date;
+import java.util.UUID;
+
+@Data
+@Entity
+@EntityListeners(AuditingEntityListener.class)
+public class HtblFailureInformation {
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "htbl_failure_information_id_seq")
+    @SequenceGenerator(name = "htbl_failure_information_id_seq", sequenceName = "htbl_failure_information_id_seq", allocationSize = 1)
+    @Column(name = "hid", updatable = false)
+    private Long hid;
+    private Long haction;
+    private Date hdate;
+    private String huser;
+    private Long id;
+    private UUID uuid;
+    private Long versionNumber;
+    private String responsibility;
+    private String internExtern;
+    private String voltageLevel;
+    private String pressureLevel;
+    private Date failureBegin;
+    private Date failureEndPlanned;
+    private Date failureEndResupplied;
+    private String probableReason;
+    private String internalRemark;
+    private String postcode;
+    private String city;
+    private String district;
+    private String street;
+    private String housenumber;
+    private String stationDescription;
+    private String stationCoords;
+    private String radius;
+
+    @CreatedDate
+    @Column(name = "create_date")
+    private Date createDate;
+
+    @CreatedBy
+    @Column(name = "create_user")
+    private String createUser;
+
+    @LastModifiedDate
+    @Column(name = "mod_date")
+    private Date modDate;
+
+    @LastModifiedBy
+    @Column(name = "mod_user")
+    private String modUser;
+
+    @ManyToOne
+    @JoinColumn( name = "fk_ref_failure_classification")
+    private RefFailureClassification refFailureClassification;
+
+    @ManyToOne
+    @JoinColumn( name = "fk_ref_failure_type")
+    private RefFailureType refFailureType;
+
+    @ManyToOne
+    @JoinColumn( name = "fk_ref_status_intern")
+    private RefStatus refStatusIntern;
+
+    @ManyToOne
+    @JoinColumn( name = "fk_ref_status_extern")
+    private RefStatus refStatusExtern;
+
+    @ManyToOne
+    @JoinColumn( name = "fk_ref_branch")
+    private RefBranch refBranch;
+
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
index fcf45db..1b7e7ea 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
@@ -36,6 +36,7 @@
     @Column(name = "id", updatable = false)
     private Long id;
     private UUID uuid;
+    private Long versionNumber;
     private String responsibility;
     private String internExtern;
     private String voltageLevel;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/HistFailureInformationRepository.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/HistFailureInformationRepository.java
new file mode 100644
index 0000000..f5e10e0
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/HistFailureInformationRepository.java
@@ -0,0 +1,36 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+
+package org.eclipse.openk.gridfailureinformation.repository;
+
+import org.eclipse.openk.gridfailureinformation.model.HtblFailureInformation;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+@Repository
+public interface HistFailureInformationRepository extends JpaRepository<HtblFailureInformation, Long > {
+
+    List<HtblFailureInformation> findByUuid(UUID uuid);
+
+    Optional<HtblFailureInformation> findByUuidAndVersionNumber(UUID uuid, Long versionNumber);
+
+    Long countByUuid(UUID uuid);
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
index eb254ce..c372416 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
@@ -17,6 +17,7 @@
 
 import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
 import org.eclipse.openk.gridfailureinformation.mapper.FailureInformationMapper;
+import org.eclipse.openk.gridfailureinformation.model.HtblFailureInformation;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
 import org.eclipse.openk.gridfailureinformation.repository.*;
 import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
@@ -36,6 +37,9 @@
     private FailureInformationRepository failureInformationRepository;
 
     @Autowired
+    private HistFailureInformationRepository histFailureInformationRepository;
+
+    @Autowired
     private FailureInformationMapper failureInformationMapper;
 
     @Autowired
@@ -63,11 +67,13 @@
     public FailureInformationDto insertFailureInfo(FailureInformationDto failureInfoDto){
         TblFailureInformation tblFailureInformationToSave = failureInformationMapper.toTblFailureInformation(failureInfoDto);
         tblFailureInformationToSave.setUuid(UUID.randomUUID());
+        tblFailureInformationToSave.setVersionNumber(1L);
+
         setFromGridFailureInformationDto(tblFailureInformationToSave, failureInfoDto);
         return failureInformationMapper.toFailureInformationDto(failureInformationRepository.save(tblFailureInformationToSave));
     }
 
-
+    @Transactional
     public FailureInformationDto updateFailureInfo(FailureInformationDto failureInfoDto) {
 
         TblFailureInformation tblFailureInformation = failureInformationRepository.findByUuid(failureInfoDto.getUuid())
@@ -77,6 +83,11 @@
         tblFailureInformationToSave.setId(tblFailureInformation.getId());
 
         setFromGridFailureInformationDto(tblFailureInformationToSave, failureInfoDto);
+
+        // Holen der nächsten Versionsnummer mit Hilfe der History-Tabelle
+        Long countVersions = histFailureInformationRepository.countByUuid(failureInfoDto.getUuid());
+        tblFailureInformationToSave.setVersionNumber(countVersions + 1);
+
         TblFailureInformation savedFailureInformation = failureInformationRepository.save(tblFailureInformationToSave);
         return failureInformationMapper.toFailureInformationDto(savedFailureInformation);
     }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationService.java
new file mode 100644
index 0000000..688995a
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationService.java
@@ -0,0 +1,67 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+package org.eclipse.openk.gridfailureinformation.service;
+
+
+import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
+import org.eclipse.openk.gridfailureinformation.mapper.HistFailureInformationMapper;
+import org.eclipse.openk.gridfailureinformation.model.HtblFailureInformation;
+import org.eclipse.openk.gridfailureinformation.repository.*;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+
+@Service
+public class HistFailureInformationService {
+
+    @Autowired
+    private HistFailureInformationRepository histFailureInformationRepository;
+
+    @Autowired
+    private HistFailureInformationMapper histFailureInformationMapper;
+
+    @Autowired
+    private BranchRepository branchRepository;
+
+    @Autowired
+    private FailureClassificationRepository failureClassificationRepository;
+
+    @Autowired
+    private FailureTypeRepository failureTypeRepository;
+
+    @Autowired
+    private StatusRepository statusRepository;
+
+    public List<FailureInformationDto> getFailureInformationVersionsByUuid(UUID uuid ) {
+        List<HtblFailureInformation> htblFailureInformationList = histFailureInformationRepository.findByUuid(uuid);
+        return htblFailureInformationList.stream().map(histFailureInformationMapper::toFailureInformationDto).collect(Collectors.toList());
+
+    }
+
+    public FailureInformationDto getFailureInformationVersion(UUID uuid, Long versionNumber ) {
+        HtblFailureInformation htblFailureInformation = histFailureInformationRepository.findByUuidAndVersionNumber(uuid, versionNumber)
+                .orElseThrow(NotFoundException::new);
+        return histFailureInformationMapper.toFailureInformationDto(htblFailureInformation);
+    }
+
+
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
index 369803e..94853e8 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
@@ -27,6 +27,7 @@
 public class FailureInformationDto implements Serializable {
     @JsonProperty("id")
     private UUID uuid;
+    private Long versionNumber;
     private String responsibility;
     private String internExtern;
     private String voltageLevel;
diff --git a/gfsBackendService/src/main/resources/db/migration/V0_5__CREATE_GFI_DB.sql b/gfsBackendService/src/main/resources/db/migration/V0_5__CREATE_GFI_DB.sql
index 3bb6a17..556a74a 100644
--- a/gfsBackendService/src/main/resources/db/migration/V0_5__CREATE_GFI_DB.sql
+++ b/gfsBackendService/src/main/resources/db/migration/V0_5__CREATE_GFI_DB.sql
@@ -189,6 +189,7 @@
 (
   ID integer NOT NULL DEFAULT nextval('TBL_FAILURE_INFORMATION_ID_SEQ'::regclass),
   UUID uuid NOT NULL,
+  VERSION_NUMBER integer NOT NULL,
   FK_REF_FAILURE_CLASSIFICATION integer,
   FK_REF_FAILURE_TYPE integer,
   RESPONSIBILITY character varying(255),
@@ -211,12 +212,11 @@
   STATION_DESCRIPTION character varying(255),
   STATION_COORDS character varying(255),
   RADIUS character varying(100),
-  LONGITUDE numeric(9,6),
-  LATITUDE numeric(9,6),
-  CREATE_DATE timestamp without time zone NOT NULL,
-  CREATE_USER character varying(100) NOT NULL,
-  MOD_DATE timestamp without time zone NOT NULL,
+
+  CREATE_USER character varying(100),
+  CREATE_DATE timestamp without time zone,
   MOD_USER character varying(100),
+  MOD_DATE timestamp without time zone,
   CONSTRAINT TBL_FAILURE_INFORMATION_PKEY PRIMARY KEY (id)
 );
 
@@ -224,10 +224,209 @@
   OWNER TO GFI_SERVICE;
 GRANT ALL ON TABLE public.TBL_FAILURE_INFORMATION TO GFI_SERVICE;
 
-INSERT INTO public.tbl_failure_information(UUID, FK_REF_FAILURE_CLASSIFICATION, FK_REF_FAILURE_TYPE, RESPONSIBILITY, INTERN_EXTERN, FK_REF_STATUS_INTERN, FK_REF_STATUS_EXTERN, FK_REF_BRANCH, VOLTAGE_LEVEL, PRESSURE_LEVEL, FAILURE_BEGIN, FAILURE_END_PLANNED, FAILURE_END_RESUPPLIED, PROBABLE_REASON, INTERNAL_REMARK, POSTCODE, CITY, DISTRICT, STREET, HOUSENUMBER, STATION_DESCRIPTION, STATION_COORDS, RADIUS, LONGITUDE, LATITUDE, CREATE_DATE, CREATE_USER, MOD_DATE, MOD_USER)
-VALUES ('6432a9c9-0384-44af-9bb8-34f2878d7b49', 1, 1, 'Rolf Rudis', 'I', 1, 1, 1, 'NS', null, '2021-01-19 00:00:00', '2021-01-22 00:00:00', '2021-01-22 12:00:00', 'Stromausfall durch Bagger', 'Der Bagger grub zu tief', '77654', 'Buddelbrugg', 'Westbezirk', 'Hauptstraße', '5a', 'Trafo 1', '124,2323', '2km', 9.247952, 48.955700, '2020-01-22 15:32:15', 'schmidth', '2020-01-24 08:02:44', 'meyers');
+INSERT INTO public.tbl_failure_information(UUID, VERSION_NUMBER, FK_REF_FAILURE_CLASSIFICATION, FK_REF_FAILURE_TYPE, RESPONSIBILITY, INTERN_EXTERN, FK_REF_STATUS_INTERN, FK_REF_STATUS_EXTERN, FK_REF_BRANCH, VOLTAGE_LEVEL, PRESSURE_LEVEL, FAILURE_BEGIN, FAILURE_END_PLANNED, FAILURE_END_RESUPPLIED, PROBABLE_REASON, INTERNAL_REMARK, POSTCODE, CITY, DISTRICT, STREET, HOUSENUMBER, STATION_DESCRIPTION, STATION_COORDS, RADIUS, CREATE_DATE, CREATE_USER, MOD_DATE, MOD_USER)
+VALUES ('6432a9c9-0384-44af-9bb8-34f2878d7b49',1, 1, 1, 'Rolf Rudis', 'I', 1, 1, 1, 'NS', null, '2021-01-19 00:00:00', '2021-01-22 00:00:00', '2021-01-22 12:00:00', 'Stromausfall durch Bagger', 'Der Bagger grub zu tief', '77654', 'Buddelbrugg', 'Westbezirk', 'Hauptstraße', '5a', 'Trafo 1', '124,2323', '2km', '2020-01-22 15:32:15', 'schmidth', '2020-01-24 08:02:44', 'meyers');
 
-INSERT INTO public.tbl_failure_information(UUID, FK_REF_FAILURE_CLASSIFICATION, FK_REF_FAILURE_TYPE, RESPONSIBILITY, INTERN_EXTERN, FK_REF_STATUS_INTERN, FK_REF_STATUS_EXTERN, FK_REF_BRANCH, VOLTAGE_LEVEL, PRESSURE_LEVEL, FAILURE_BEGIN, FAILURE_END_PLANNED, FAILURE_END_RESUPPLIED, PROBABLE_REASON, INTERNAL_REMARK, POSTCODE, CITY, DISTRICT, STREET, HOUSENUMBER, STATION_DESCRIPTION, STATION_COORDS, RADIUS, LONGITUDE, LATITUDE, CREATE_DATE, CREATE_USER, MOD_DATE, MOD_USER)
-VALUES ('37aef635-d0d4-4c47-ac25-c0d16c29e35c', 3, 2, 'Bernd Britzel', 'E', 2, 2, 3, null, 'HD', '2021-05-19 00:00:00', '2021-05-22 00:00:00', '2021-05-22 12:00:00', 'Leck in Gasleitung', 'HD betroffen', '77344', 'Hitzingen', null, 'Ostring', '104', 'ertf', '124,2323', '6km', 8.651733, 50.007739, '2020-02-03 15:15:15', 'schulzek', '2020-02-24 20:08:41', 'muellert');
+INSERT INTO public.tbl_failure_information(UUID, VERSION_NUMBER, FK_REF_FAILURE_CLASSIFICATION, FK_REF_FAILURE_TYPE, RESPONSIBILITY, INTERN_EXTERN, FK_REF_STATUS_INTERN, FK_REF_STATUS_EXTERN, FK_REF_BRANCH, VOLTAGE_LEVEL, PRESSURE_LEVEL, FAILURE_BEGIN, FAILURE_END_PLANNED, FAILURE_END_RESUPPLIED, PROBABLE_REASON, INTERNAL_REMARK, POSTCODE, CITY, DISTRICT, STREET, HOUSENUMBER, STATION_DESCRIPTION, STATION_COORDS, RADIUS, CREATE_DATE, CREATE_USER, MOD_DATE, MOD_USER)
+VALUES ('37aef635-d0d4-4c47-ac25-c0d16c29e35c', 1,3, 2, 'Bernd Britzel', 'E', 2, 2, 3, null, 'HD', '2021-05-19 00:00:00', '2021-05-22 00:00:00', '2021-05-22 12:00:00', 'Leck in Gasleitung', 'HD betroffen', '77344', 'Hitzingen', null, 'Ostring', '104', 'ertf', '124,2323', '6km', '2020-02-03 15:15:15', 'schulzek', '2020-02-24 20:08:41', 'muellert');
+
+
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+-- HISTORY-TABLES
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+
+
+-- PUBLIC.HTBL_FAILURE_INFORMATION Automatic generanted History Table DDL --
+-- <GENERATED CODE!>
+
+DROP TABLE IF EXISTS PUBLIC.HTBL_FAILURE_INFORMATION;
+DROP SEQUENCE IF EXISTS PUBLIC.HTBL_FAILURE_INFORMATION_ID_SEQ;
+
+CREATE SEQUENCE PUBLIC.HTBL_FAILURE_INFORMATION_ID_SEQ
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+
+ALTER TABLE PUBLIC.HTBL_FAILURE_INFORMATION_ID_SEQ
+  OWNER TO gfi_service;
+
+CREATE TABLE PUBLIC.HTBL_FAILURE_INFORMATION
+(
+  HID integer NOT NULL DEFAULT nextval('HTBL_FAILURE_INFORMATION_ID_SEQ'::regclass),
+  HACTION integer NOT NULL,
+  HDATE timestamp without time zone NOT NULL,
+  HUSER character varying(100),
+
+  ID integer,
+  UUID uuid,
+  VERSION_NUMBER integer,
+  FK_REF_FAILURE_CLASSIFICATION integer,
+  FK_REF_FAILURE_TYPE integer,
+  RESPONSIBILITY character varying (255),
+  INTERN_EXTERN character varying (1),
+  FK_REF_STATUS_INTERN integer,
+  FK_REF_STATUS_EXTERN integer,
+  FK_REF_BRANCH integer,
+  VOLTAGE_LEVEL character varying (2),
+  PRESSURE_LEVEL character varying (2),
+  FAILURE_BEGIN timestamp without time zone,
+  FAILURE_END_PLANNED timestamp without time zone,
+  FAILURE_END_RESUPPLIED timestamp without time zone,
+  PROBABLE_REASON character varying (1024),
+  INTERNAL_REMARK character varying (1024),
+  POSTCODE character varying (30),
+  CITY character varying (255),
+  DISTRICT character varying (255),
+  STREET character varying (255),
+  HOUSENUMBER character varying (30),
+  STATION_DESCRIPTION character varying (255),
+  STATION_COORDS character varying (255),
+  RADIUS character varying (100),
+
+  CREATE_USER character varying(100),
+  CREATE_DATE timestamp without time zone,
+  MOD_USER character varying(100),
+  MOD_DATE timestamp without time zone,
+  CONSTRAINT HTBL_FAILURE_INFORMATION_PKEY PRIMARY KEY (HID)
+)
+WITH (
+  OIDS=FALSE
+);
+
+ALTER TABLE PUBLIC.HTBL_FAILURE_INFORMATION
+  OWNER TO gfi_service;
+GRANT ALL ON TABLE PUBLIC.HTBL_FAILURE_INFORMATION TO gfi_service;
+
+
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+-- TRIGGER
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+
+
+-- PUBLIC.TBL_FAILURE_INFORMATION INSERT TRIGGER --
+-- <GENERATED CODE!>
+CREATE OR REPLACE FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_INSERT_TRG()
+  RETURNS trigger AS
+$BODY$
+    BEGIN
+	INSERT INTO HTBL_FAILURE_INFORMATION (
+						  ID,UUID,VERSION_NUMBER,FK_REF_FAILURE_CLASSIFICATION,FK_REF_FAILURE_TYPE,RESPONSIBILITY,INTERN_EXTERN,FK_REF_STATUS_INTERN,FK_REF_STATUS_EXTERN,FK_REF_BRANCH,VOLTAGE_LEVEL,PRESSURE_LEVEL,FAILURE_BEGIN,FAILURE_END_PLANNED,FAILURE_END_RESUPPLIED,PROBABLE_REASON,INTERNAL_REMARK,POSTCODE,CITY,DISTRICT,STREET,HOUSENUMBER,STATION_DESCRIPTION,STATION_COORDS,RADIUS,CREATE_DATE,CREATE_USER,MOD_DATE,MOD_USER,
+
+						  HACTION,
+						  HDATE,
+						  HUSER
+						 )
+	VALUES 				 (
+
+						  NEW.ID,NEW.UUID,NEW.VERSION_NUMBER,NEW.FK_REF_FAILURE_CLASSIFICATION,NEW.FK_REF_FAILURE_TYPE,NEW.RESPONSIBILITY,NEW.INTERN_EXTERN,NEW.FK_REF_STATUS_INTERN,NEW.FK_REF_STATUS_EXTERN,NEW.FK_REF_BRANCH,NEW.VOLTAGE_LEVEL,NEW.PRESSURE_LEVEL,NEW.FAILURE_BEGIN,NEW.FAILURE_END_PLANNED,NEW.FAILURE_END_RESUPPLIED,NEW.PROBABLE_REASON,NEW.INTERNAL_REMARK,NEW.POSTCODE,NEW.CITY,NEW.DISTRICT,NEW.STREET,NEW.HOUSENUMBER,NEW.STATION_DESCRIPTION,NEW.STATION_COORDS,NEW.RADIUS,NEW.CREATE_DATE,NEW.CREATE_USER,NEW.MOD_DATE,NEW.MOD_USER,
+
+                          1,
+						  current_timestamp,
+					      NEW.CREATE_USER );
+
+        RETURN NEW;
+    END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE
+  COST 100;
+ALTER FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_INSERT_TRG()
+  OWNER TO gfi_service;
+
+
+DROP TRIGGER IF EXISTS TBL_FAILURE_INFORMATION_INSERT_TRG ON PUBLIC.TBL_FAILURE_INFORMATION;
+
+CREATE TRIGGER TBL_FAILURE_INFORMATION_INSERT_TRG
+  BEFORE INSERT
+  ON PUBLIC.TBL_FAILURE_INFORMATION
+  FOR EACH ROW
+  EXECUTE PROCEDURE PUBLIC.TBL_FAILURE_INFORMATION_INSERT_TRG();
+
+
+
+-- PUBLIC.TBL_FAILURE_INFORMATION UPDATE TRIGGER --
+-- <GENERATED CODE!>
+
+CREATE OR REPLACE FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_UPDATE_TRG()
+  RETURNS trigger AS
+$BODY$
+    BEGIN
+	INSERT INTO HTBL_FAILURE_INFORMATION (
+						  ID,UUID,VERSION_NUMBER,FK_REF_FAILURE_CLASSIFICATION,FK_REF_FAILURE_TYPE,RESPONSIBILITY,INTERN_EXTERN,FK_REF_STATUS_INTERN,FK_REF_STATUS_EXTERN,FK_REF_BRANCH,VOLTAGE_LEVEL,PRESSURE_LEVEL,FAILURE_BEGIN,FAILURE_END_PLANNED,FAILURE_END_RESUPPLIED,PROBABLE_REASON,INTERNAL_REMARK,POSTCODE,CITY,DISTRICT,STREET,HOUSENUMBER,STATION_DESCRIPTION,STATION_COORDS,RADIUS,CREATE_DATE,CREATE_USER,MOD_DATE,MOD_USER,
+
+						  HACTION,
+						  HDATE,
+						  HUSER
+						 )
+	VALUES 			    (
+	                      NEW.ID,NEW.UUID,NEW.VERSION_NUMBER,NEW.FK_REF_FAILURE_CLASSIFICATION,NEW.FK_REF_FAILURE_TYPE,NEW.RESPONSIBILITY,NEW.INTERN_EXTERN,NEW.FK_REF_STATUS_INTERN,NEW.FK_REF_STATUS_EXTERN,NEW.FK_REF_BRANCH,NEW.VOLTAGE_LEVEL,NEW.PRESSURE_LEVEL,NEW.FAILURE_BEGIN,NEW.FAILURE_END_PLANNED,NEW.FAILURE_END_RESUPPLIED,NEW.PROBABLE_REASON,NEW.INTERNAL_REMARK,NEW.POSTCODE,NEW.CITY,NEW.DISTRICT,NEW.STREET,NEW.HOUSENUMBER,NEW.STATION_DESCRIPTION,NEW.STATION_COORDS,NEW.RADIUS,NEW.CREATE_DATE,NEW.CREATE_USER,NEW.MOD_DATE,NEW.MOD_USER,
+                          2,
+						  current_timestamp,
+					      NEW.MOD_USER
+					    );
+
+        RETURN NEW;
+    END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE
+  COST 100;
+ALTER FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_UPDATE_TRG()
+  OWNER TO gfi_service;
+
+DROP TRIGGER IF EXISTS TBL_FAILURE_INFORMATION_UPDATE_TRG ON PUBLIC.TBL_FAILURE_INFORMATION;
+
+CREATE TRIGGER TBL_FAILURE_INFORMATION_UPDATE_TRG
+  BEFORE UPDATE
+  ON PUBLIC.TBL_FAILURE_INFORMATION
+  FOR EACH ROW
+  EXECUTE PROCEDURE PUBLIC.TBL_FAILURE_INFORMATION_UPDATE_TRG();
+
+
+
+-- PUBLIC.TBL_FAILURE_INFORMATION DELETE TRIGGER --
+-- <GENERATED CODE!>
+
+CREATE OR REPLACE FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_DELETE_TRG()
+  RETURNS trigger AS
+$BODY$
+    BEGIN
+    IF TG_OP = 'DELETE' THEN
+	INSERT INTO HTBL_FAILURE_INFORMATION (
+
+						  ID,UUID,VERSION_NUMBER,FK_REF_FAILURE_CLASSIFICATION,FK_REF_FAILURE_TYPE,RESPONSIBILITY,INTERN_EXTERN,FK_REF_STATUS_INTERN,FK_REF_STATUS_EXTERN,FK_REF_BRANCH,VOLTAGE_LEVEL,PRESSURE_LEVEL,FAILURE_BEGIN,FAILURE_END_PLANNED,FAILURE_END_RESUPPLIED,PROBABLE_REASON,INTERNAL_REMARK,POSTCODE,CITY,DISTRICT,STREET,HOUSENUMBER,STATION_DESCRIPTION,STATION_COORDS,RADIUS,CREATE_DATE,CREATE_USER,MOD_DATE,MOD_USER,
+
+						  HACTION,
+						  HDATE,
+						  HUSER
+						 )
+	VALUES 				(
+						  OLD.ID,OLD.UUID,OLD.VERSION_NUMBER,OLD.FK_REF_FAILURE_CLASSIFICATION,OLD.FK_REF_FAILURE_TYPE,OLD.RESPONSIBILITY,OLD.INTERN_EXTERN,OLD.FK_REF_STATUS_INTERN,OLD.FK_REF_STATUS_EXTERN,OLD.FK_REF_BRANCH,OLD.VOLTAGE_LEVEL,OLD.PRESSURE_LEVEL,OLD.FAILURE_BEGIN,OLD.FAILURE_END_PLANNED,OLD.FAILURE_END_RESUPPLIED,OLD.PROBABLE_REASON,OLD.INTERNAL_REMARK,OLD.POSTCODE,OLD.CITY,OLD.DISTRICT,OLD.STREET,OLD.HOUSENUMBER,OLD.STATION_DESCRIPTION,OLD.STATION_COORDS,OLD.RADIUS,OLD.CREATE_DATE,OLD.CREATE_USER,OLD.MOD_DATE,OLD.MOD_USER,
+
+                          3,
+						  current_timestamp,
+					      OLD.MOD_USER );
+	END IF;
+
+        RETURN OLD;
+    END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE
+  COST 100;
+ALTER FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_DELETE_TRG()
+  OWNER TO gfi_service;
+
+DROP TRIGGER IF EXISTS TBL_FAILURE_INFORMATION_DELETE_TRG ON PUBLIC.TBL_FAILURE_INFORMATION;
+
+CREATE TRIGGER TBL_FAILURE_INFORMATION_DELETE_TRG
+  BEFORE DELETE
+  ON PUBLIC.TBL_FAILURE_INFORMATION
+  FOR EACH ROW
+  EXECUTE PROCEDURE PUBLIC.TBL_FAILURE_INFORMATION_DELETE_TRG();
+
 
 
diff --git a/gfsBackendService/src/main/resources/db/migration/V0_6__CREATE_GFI_DB.sql b/gfsBackendService/src/main/resources/db/migration/V0_6__CREATE_GFI_DB.sql
new file mode 100644
index 0000000..3a0157d
--- /dev/null
+++ b/gfsBackendService/src/main/resources/db/migration/V0_6__CREATE_GFI_DB.sql
@@ -0,0 +1,440 @@
+-----------------------------------------------------------------------------------
+-- *******************************************************************************
+-- * Copyright (c) 2019 Contributors to the Eclipse Foundation
+-- *
+-- * See the NOTICE file(s) distributed with this work for additional
+-- * information regarding copyright ownership.
+-- *
+-- * This program and the accompanying materials are made available under the
+-- * terms of the Eclipse Public License v. 2.0 which is available at
+-- * http://www.eclipse.org/legal/epl-2.0.
+-- *
+-- * SPDX-License-Identifier: EPL-2.0
+-- *******************************************************************************
+-----------------------------------------------------------------------------------
+-- CREATE ROLE GFI_SERVICE LOGIN
+-- NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
+-- ALTER ROLE GFI_SERVICE with password 'gfi_service';
+
+DROP TABLE IF EXISTS public.VERSION CASCADE;
+DROP TABLE IF EXISTS public.TBL_FAILURE_INFORMATION CASCADE;
+DROP SEQUENCE IF EXISTS public.TBL_FAILURE_INFORMATION_ID_SEQ;
+
+DROP TABLE IF EXISTS public.REF_STATUS CASCADE;
+DROP SEQUENCE IF EXISTS public.REF_STATUS_ID_SEQ;
+
+DROP TABLE IF EXISTS public.REF_BRANCH CASCADE;
+DROP SEQUENCE IF EXISTS public.REF_BRANCH_ID_SEQ;
+
+DROP TABLE IF EXISTS public.REF_FAILURE_CLASSIFICATION CASCADE;
+DROP SEQUENCE IF EXISTS public.REF_FAILURE_CLASSIFICATION_ID_SEQ;
+
+DROP TABLE IF EXISTS public.REF_FAILURE_TYPE CASCADE;
+DROP SEQUENCE IF EXISTS public.REF_FAILURE_TYPE_ID_SEQ;
+
+-- ---------------------------------------------
+-- TABLE VERSION
+-- ---------------------------------------------
+CREATE TABLE public.VERSION
+(
+  ID integer NOT NULL,
+  VERSION character varying(50) NOT NULL,
+  CONSTRAINT REF_VERSION_PKEY PRIMARY KEY (id)
+);
+
+ALTER TABLE public.VERSION
+  OWNER TO GFI_SERVICE;
+GRANT ALL ON TABLE public.VERSION TO GFI_SERVICE;
+
+INSERT INTO public.VERSION (ID, VERSION) VALUES ( 1, '00-DEV' );
+
+-- ---------------------------------------------
+-- TABLE REF_STATUS
+-- ---------------------------------------------
+CREATE SEQUENCE public.ref_status_id_seq
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.ref_status_id_seq
+  OWNER TO GFI_SERVICE;
+
+CREATE TABLE public.REF_STATUS
+(
+  ID integer NOT NULL  DEFAULT nextval('REF_STATUS_ID_SEQ'::regclass),
+  UUID uuid NOT NULL,
+  STATUS character varying(50) NOT NULL,
+  IS_INTERNAL boolean NOT NULL,
+  IS_EXTERNAL boolean NOT NULL,
+  CONSTRAINT REF_STATUS_PKEY PRIMARY KEY (id)
+);
+
+ALTER TABLE public.REF_STATUS
+  OWNER TO GFI_SERVICE;
+GRANT ALL ON TABLE public.REF_STATUS TO GFI_SERVICE;
+
+INSERT INTO public.REF_STATUS (UUID, STATUS, IS_INTERNAL, IS_EXTERNAL) VALUES ( 'acabc8f6-2cf3-485a-a4f8-68d178c7df45', 'neu', TRUE, TRUE );
+INSERT INTO public.REF_STATUS (UUID, STATUS, IS_INTERNAL, IS_EXTERNAL) VALUES ( 'a6cda99d-9f41-4637-9d9b-04f95ea352ec', 'bestätigt', TRUE, TRUE );
+INSERT INTO public.REF_STATUS (UUID, STATUS, IS_INTERNAL, IS_EXTERNAL) VALUES ( '23fc0254-cc3d-4371-97ad-54ef733008ae', 'aktiv', TRUE, FALSE );
+INSERT INTO public.REF_STATUS (UUID, STATUS, IS_INTERNAL, IS_EXTERNAL) VALUES ( '9374219a-7419-4b72-899d-cd0576d85cdb', 'geschlossen', TRUE, TRUE );
+
+
+-- ---------------------------------------------
+-- TABLE REF_FAILURE_CLASSIFICATION
+-- ---------------------------------------------
+CREATE SEQUENCE public.ref_failure_classification_id_seq
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.ref_failure_classification_id_seq
+  OWNER TO GFI_SERVICE;
+
+CREATE TABLE public.REF_FAILURE_CLASSIFICATION
+(
+  ID integer NOT NULL  DEFAULT nextval('REF_FAILURE_CLASSIFICATION_ID_SEQ'::regclass),
+  UUID uuid NOT NULL,
+  CLASSIFICATION character varying(50) NOT NULL,
+  DESCRIPTION character varying(255) NULL,
+  CONSTRAINT REF_FAILURE_CLASSIFICATION_PKEY PRIMARY KEY (id)
+);
+
+ALTER TABLE public.REF_FAILURE_CLASSIFICATION
+  OWNER TO GFI_SERVICE;
+GRANT ALL ON TABLE public.REF_FAILURE_CLASSIFICATION TO GFI_SERVICE;
+
+INSERT INTO public.REF_FAILURE_CLASSIFICATION (UUID, CLASSIFICATION, DESCRIPTION) VALUES ( '9255fb79-c57a-4448-a69c-5d57994f0c91', 'Störung', NULL );
+INSERT INTO public.REF_FAILURE_CLASSIFICATION (UUID, CLASSIFICATION, DESCRIPTION) VALUES ( '8db5a71b-9676-45ca-ae1d-161c6a2dc305', 'Ereignis', NULL );
+INSERT INTO public.REF_FAILURE_CLASSIFICATION (UUID, CLASSIFICATION, DESCRIPTION) VALUES ( '8ec1e144-5230-4d43-a3df-f62dd64bb855', 'geplante Maßnahme', NULL );
+
+
+
+-- ---------------------------------------------
+-- TABLE REF_FAILURE_TYPE
+-- ---------------------------------------------
+CREATE SEQUENCE public.ref_failure_type_id_seq
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.ref_failure_type_id_seq
+  OWNER TO GFI_SERVICE;
+
+CREATE TABLE public.REF_FAILURE_TYPE
+(
+  ID integer NOT NULL DEFAULT nextval('REF_FAILURE_TYPE_ID_SEQ'::regclass),
+  UUID uuid NOT NULL,
+  TYPE character varying(50) NOT NULL,
+  DESCRIPTION character varying(255) NULL,
+  CONSTRAINT REF_FAILURE_TYPE_PKEY PRIMARY KEY (id)
+);
+
+ALTER TABLE public.REF_FAILURE_TYPE
+  OWNER TO GFI_SERVICE;
+GRANT ALL ON TABLE public.REF_FAILURE_TYPE TO GFI_SERVICE;
+
+
+INSERT INTO public.REF_FAILURE_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( '44a2aaed-8910-4116-b0c4-0855f8d3c28d', 'Information', NULL );
+INSERT INTO public.REF_FAILURE_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( '94e880c4-3127-47d5-aaee-5f778462ab0c', 'zu veröffentliche Meldung', 'Standardwert' );
+INSERT INTO public.REF_FAILURE_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( '658245bd-bdc4-47dd-bc90-0336f9471410', 'unterlagerte Störung', 'Nicht zu veröffentlichen' );
+
+-- ---------------------------------------------
+-- TABLE REF_BRANCH
+-- ---------------------------------------------
+CREATE SEQUENCE public.ref_branch_id_seq
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.ref_branch_id_seq
+  OWNER TO GFI_SERVICE;
+
+CREATE TABLE public.REF_BRANCH
+(
+  ID integer NOT NULL DEFAULT nextval('REF_BRANCH_ID_SEQ'::regclass),
+  UUID uuid NOT NULL,
+  NAME character varying(50) NOT NULL,
+  DESCRIPTION character varying(255),
+  COLOR_CODE character varying(20),
+  CONSTRAINT REF_BRANCH_PKEY PRIMARY KEY (id)
+);
+
+ALTER TABLE public.REF_BRANCH
+  OWNER TO GFI_SERVICE;
+GRANT ALL ON TABLE public.REF_BRANCH TO GFI_SERVICE;
+
+INSERT INTO public.ref_branch(uuid, name, description, color_code) VALUES ('535b4beb-9b17-4247-bb8b-26bd01b48f9a', 'S', 'Strom', '#fc6042');
+INSERT INTO public.ref_branch(uuid, name, description, color_code) VALUES ('d41f54e5-c4df-440e-b334-40e8f3a6854a', 'G', 'Gas', '#fdea64');
+INSERT INTO public.ref_branch(uuid, name, description, color_code) VALUES ('62c6d361-96a0-41cc-bda1-4e58ad16f21a', 'F', 'Fernwärme', '#2cc990');
+INSERT INTO public.ref_branch(uuid, name, description, color_code) VALUES ('d8d93e0e-5c8c-4ab8-9625-f820de55ee7c', 'W', 'Wasser', '#2c82c9');
+
+
+-- ---------------------------------------------
+-- TABLE TBL_FAILURE_INFORMATION
+-- ---------------------------------------------
+CREATE SEQUENCE public.tbl_failure_information_id_seq
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.tbl_failure_information_id_seq
+  OWNER TO GFI_SERVICE;
+
+CREATE TABLE public.TBL_FAILURE_INFORMATION
+(
+  ID integer NOT NULL DEFAULT nextval('TBL_FAILURE_INFORMATION_ID_SEQ'::regclass),
+  UUID uuid NOT NULL,
+  VERSION_NUMBER integer NOT NULL,
+  FK_REF_FAILURE_CLASSIFICATION integer,
+  FK_REF_FAILURE_TYPE integer,
+  RESPONSIBILITY character varying(255),
+  INTERN_EXTERN character varying(1),
+  FK_REF_STATUS_INTERN integer NOT NULL,
+  FK_REF_STATUS_EXTERN integer NOT NULL,
+  FK_REF_BRANCH integer NOT NULL,
+  VOLTAGE_LEVEL character varying(2),
+  PRESSURE_LEVEL character varying(2),
+  FAILURE_BEGIN timestamp NOT NULL,
+  FAILURE_END_PLANNED timestamp,
+  FAILURE_END_RESUPPLIED timestamp,
+  PROBABLE_REASON character varying(1024),
+  INTERNAL_REMARK character varying(1024),
+  POSTCODE character varying(30),
+  CITY character varying(255),
+  DISTRICT character varying(255),
+  STREET character varying(255),
+  HOUSENUMBER character varying(30),
+  STATION_DESCRIPTION character varying(255),
+  STATION_COORDS character varying(255),
+  RADIUS character varying(100),
+  LONGITUDE numeric(9,6),
+  LATITUDE numeric(9,6),
+
+  CREATE_USER character varying(100),
+  CREATE_DATE timestamp without time zone,
+  MOD_USER character varying(100),
+  MOD_DATE timestamp without time zone,
+  CONSTRAINT TBL_FAILURE_INFORMATION_PKEY PRIMARY KEY (id)
+);
+
+ALTER TABLE public.TBL_FAILURE_INFORMATION
+  OWNER TO GFI_SERVICE;
+GRANT ALL ON TABLE public.TBL_FAILURE_INFORMATION TO GFI_SERVICE;
+
+INSERT INTO public.tbl_failure_information(UUID, VERSION_NUMBER, FK_REF_FAILURE_CLASSIFICATION, FK_REF_FAILURE_TYPE, RESPONSIBILITY, INTERN_EXTERN, FK_REF_STATUS_INTERN, FK_REF_STATUS_EXTERN, FK_REF_BRANCH, VOLTAGE_LEVEL, PRESSURE_LEVEL, FAILURE_BEGIN, FAILURE_END_PLANNED, FAILURE_END_RESUPPLIED, PROBABLE_REASON, INTERNAL_REMARK, POSTCODE, CITY, DISTRICT, STREET, HOUSENUMBER, STATION_DESCRIPTION, STATION_COORDS, RADIUS, LONGITUDE, LATITUDE, CREATE_DATE, CREATE_USER, MOD_DATE, MOD_USER)
+VALUES ('6432a9c9-0384-44af-9bb8-34f2878d7b49',1, 1, 1, 'Rolf Rudis', 'I', 1, 1, 1, 'NS', null, '2021-01-19 00:00:00', '2021-01-22 00:00:00', '2021-01-22 12:00:00', 'Stromausfall durch Bagger', 'Der Bagger grub zu tief', '71711', 'Murr', 'Westbezirk', 'Ferdinand-Porsche-Straße', '2', 'Trafo 1', '124,2323', '2km', 9.247952, 48.955700, '2020-01-22 15:32:15', 'schmidth', '2020-01-24 08:02:44', 'meyers');
+
+INSERT INTO public.tbl_failure_information(UUID, VERSION_NUMBER, FK_REF_FAILURE_CLASSIFICATION, FK_REF_FAILURE_TYPE, RESPONSIBILITY, INTERN_EXTERN, FK_REF_STATUS_INTERN, FK_REF_STATUS_EXTERN, FK_REF_BRANCH, VOLTAGE_LEVEL, PRESSURE_LEVEL, FAILURE_BEGIN, FAILURE_END_PLANNED, FAILURE_END_RESUPPLIED, PROBABLE_REASON, INTERNAL_REMARK, POSTCODE, CITY, DISTRICT, STREET, HOUSENUMBER, STATION_DESCRIPTION, STATION_COORDS, RADIUS, LONGITUDE, LATITUDE, CREATE_DATE, CREATE_USER, MOD_DATE, MOD_USER)
+VALUES ('37aef635-d0d4-4c47-ac25-c0d16c29e35c', 1,3, 2, 'Bernd Britzel', 'E', 2, 2, 3, null, 'HD', '2021-05-19 00:00:00', '2021-05-22 00:00:00', '2021-05-22 12:00:00', 'Leck in Gasleitung', 'HD betroffen', '26133', 'Oldenburg', null, 'Cloppenburger Str.', '302', 'ertf', '124,2323', '6km', 8.210000, 55.110000, '2020-02-03 15:15:15', 'schulzek', '2020-02-24 20:08:41', 'muellert');
+
+
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+-- HISTORY-TABLES
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+
+
+-- PUBLIC.HTBL_FAILURE_INFORMATION Automatic generanted History Table DDL --
+-- <GENERATED CODE!>
+
+DROP TABLE IF EXISTS PUBLIC.HTBL_FAILURE_INFORMATION;
+DROP SEQUENCE IF EXISTS PUBLIC.HTBL_FAILURE_INFORMATION_ID_SEQ;
+
+CREATE SEQUENCE PUBLIC.HTBL_FAILURE_INFORMATION_ID_SEQ
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+
+ALTER TABLE PUBLIC.HTBL_FAILURE_INFORMATION_ID_SEQ
+  OWNER TO gfi_service;
+
+CREATE TABLE PUBLIC.HTBL_FAILURE_INFORMATION
+(
+  HID integer NOT NULL DEFAULT nextval('HTBL_FAILURE_INFORMATION_ID_SEQ'::regclass),
+  HACTION integer NOT NULL,
+  HDATE timestamp without time zone NOT NULL,
+  HUSER character varying(100),
+
+  ID integer,
+  UUID uuid,
+  VERSION_NUMBER integer,
+  FK_REF_FAILURE_CLASSIFICATION integer,
+  FK_REF_FAILURE_TYPE integer,
+  RESPONSIBILITY character varying (255),
+  INTERN_EXTERN character varying (1),
+  FK_REF_STATUS_INTERN integer,
+  FK_REF_STATUS_EXTERN integer,
+  FK_REF_BRANCH integer,
+  VOLTAGE_LEVEL character varying (2),
+  PRESSURE_LEVEL character varying (2),
+  FAILURE_BEGIN timestamp without time zone,
+  FAILURE_END_PLANNED timestamp without time zone,
+  FAILURE_END_RESUPPLIED timestamp without time zone,
+  PROBABLE_REASON character varying (1024),
+  INTERNAL_REMARK character varying (1024),
+  POSTCODE character varying (30),
+  CITY character varying (255),
+  DISTRICT character varying (255),
+  STREET character varying (255),
+  HOUSENUMBER character varying (30),
+  STATION_DESCRIPTION character varying (255),
+  STATION_COORDS character varying (255),
+  RADIUS character varying (100),
+  LONGITUDE numeric(9,6),
+  LATITUDE numeric(9,6),
+
+  CREATE_USER character varying(100),
+  CREATE_DATE timestamp without time zone,
+  MOD_USER character varying(100),
+  MOD_DATE timestamp without time zone,
+  CONSTRAINT HTBL_FAILURE_INFORMATION_PKEY PRIMARY KEY (HID)
+)
+WITH (
+  OIDS=FALSE
+);
+
+ALTER TABLE PUBLIC.HTBL_FAILURE_INFORMATION
+  OWNER TO gfi_service;
+GRANT ALL ON TABLE PUBLIC.HTBL_FAILURE_INFORMATION TO gfi_service;
+
+
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+-- TRIGGER
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+
+
+-- PUBLIC.TBL_FAILURE_INFORMATION INSERT TRIGGER --
+-- <GENERATED CODE!>
+CREATE OR REPLACE FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_INSERT_TRG()
+  RETURNS trigger AS
+$BODY$
+    BEGIN
+	INSERT INTO HTBL_FAILURE_INFORMATION (
+						  ID,UUID,VERSION_NUMBER,FK_REF_FAILURE_CLASSIFICATION,FK_REF_FAILURE_TYPE,RESPONSIBILITY,INTERN_EXTERN,FK_REF_STATUS_INTERN,FK_REF_STATUS_EXTERN,FK_REF_BRANCH,VOLTAGE_LEVEL,PRESSURE_LEVEL,FAILURE_BEGIN,FAILURE_END_PLANNED,FAILURE_END_RESUPPLIED,PROBABLE_REASON,INTERNAL_REMARK,POSTCODE,CITY,DISTRICT,STREET,HOUSENUMBER,STATION_DESCRIPTION,STATION_COORDS,RADIUS,LONGITUDE,LATITUDE,CREATE_DATE,CREATE_USER,MOD_DATE,MOD_USER,
+
+						  HACTION,
+						  HDATE,
+						  HUSER
+						 )
+	VALUES 				 (
+
+						  NEW.ID,NEW.UUID,NEW.VERSION_NUMBER,NEW.FK_REF_FAILURE_CLASSIFICATION,NEW.FK_REF_FAILURE_TYPE,NEW.RESPONSIBILITY,NEW.INTERN_EXTERN,NEW.FK_REF_STATUS_INTERN,NEW.FK_REF_STATUS_EXTERN,NEW.FK_REF_BRANCH,NEW.VOLTAGE_LEVEL,NEW.PRESSURE_LEVEL,NEW.FAILURE_BEGIN,NEW.FAILURE_END_PLANNED,NEW.FAILURE_END_RESUPPLIED,NEW.PROBABLE_REASON,NEW.INTERNAL_REMARK,NEW.POSTCODE,NEW.CITY,NEW.DISTRICT,NEW.STREET,NEW.HOUSENUMBER,NEW.STATION_DESCRIPTION,NEW.STATION_COORDS,NEW.RADIUS,NEW.LONGITUDE,NEW.LATITUDE,NEW.CREATE_DATE,NEW.CREATE_USER,NEW.MOD_DATE,NEW.MOD_USER,
+
+                          1,
+						  current_timestamp,
+					      NEW.CREATE_USER );
+
+        RETURN NEW;
+    END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE
+  COST 100;
+ALTER FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_INSERT_TRG()
+  OWNER TO gfi_service;
+
+
+DROP TRIGGER IF EXISTS TBL_FAILURE_INFORMATION_INSERT_TRG ON PUBLIC.TBL_FAILURE_INFORMATION;
+
+CREATE TRIGGER TBL_FAILURE_INFORMATION_INSERT_TRG
+  BEFORE INSERT
+  ON PUBLIC.TBL_FAILURE_INFORMATION
+  FOR EACH ROW
+  EXECUTE PROCEDURE PUBLIC.TBL_FAILURE_INFORMATION_INSERT_TRG();
+
+
+
+-- PUBLIC.TBL_FAILURE_INFORMATION UPDATE TRIGGER --
+-- <GENERATED CODE!>
+
+CREATE OR REPLACE FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_UPDATE_TRG()
+  RETURNS trigger AS
+$BODY$
+    BEGIN
+	INSERT INTO HTBL_FAILURE_INFORMATION (
+						  ID,UUID,VERSION_NUMBER,FK_REF_FAILURE_CLASSIFICATION,FK_REF_FAILURE_TYPE,RESPONSIBILITY,INTERN_EXTERN,FK_REF_STATUS_INTERN,FK_REF_STATUS_EXTERN,FK_REF_BRANCH,VOLTAGE_LEVEL,PRESSURE_LEVEL,FAILURE_BEGIN,FAILURE_END_PLANNED,FAILURE_END_RESUPPLIED,PROBABLE_REASON,INTERNAL_REMARK,POSTCODE,CITY,DISTRICT,STREET,HOUSENUMBER,STATION_DESCRIPTION,STATION_COORDS,RADIUS,LONGITUDE,LATITUDE,CREATE_DATE,CREATE_USER,MOD_DATE,MOD_USER,
+
+						  HACTION,
+						  HDATE,
+						  HUSER
+						 )
+	VALUES 			    (
+	                      NEW.ID,NEW.UUID,NEW.VERSION_NUMBER,NEW.FK_REF_FAILURE_CLASSIFICATION,NEW.FK_REF_FAILURE_TYPE,NEW.RESPONSIBILITY,NEW.INTERN_EXTERN,NEW.FK_REF_STATUS_INTERN,NEW.FK_REF_STATUS_EXTERN,NEW.FK_REF_BRANCH,NEW.VOLTAGE_LEVEL,NEW.PRESSURE_LEVEL,NEW.FAILURE_BEGIN,NEW.FAILURE_END_PLANNED,NEW.FAILURE_END_RESUPPLIED,NEW.PROBABLE_REASON,NEW.INTERNAL_REMARK,NEW.POSTCODE,NEW.CITY,NEW.DISTRICT,NEW.STREET,NEW.HOUSENUMBER,NEW.STATION_DESCRIPTION,NEW.STATION_COORDS,NEW.RADIUS,NEW.LONGITUDE,NEW.LATITUDE,NEW.CREATE_DATE,NEW.CREATE_USER,NEW.MOD_DATE,NEW.MOD_USER,
+                          2,
+						  current_timestamp,
+					      NEW.MOD_USER
+					    );
+
+        RETURN NEW;
+    END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE
+  COST 100;
+ALTER FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_UPDATE_TRG()
+  OWNER TO gfi_service;
+
+DROP TRIGGER IF EXISTS TBL_FAILURE_INFORMATION_UPDATE_TRG ON PUBLIC.TBL_FAILURE_INFORMATION;
+
+CREATE TRIGGER TBL_FAILURE_INFORMATION_UPDATE_TRG
+  BEFORE UPDATE
+  ON PUBLIC.TBL_FAILURE_INFORMATION
+  FOR EACH ROW
+  EXECUTE PROCEDURE PUBLIC.TBL_FAILURE_INFORMATION_UPDATE_TRG();
+
+
+
+-- PUBLIC.TBL_FAILURE_INFORMATION DELETE TRIGGER --
+-- <GENERATED CODE!>
+
+CREATE OR REPLACE FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_DELETE_TRG()
+  RETURNS trigger AS
+$BODY$
+    BEGIN
+    IF TG_OP = 'DELETE' THEN
+	INSERT INTO HTBL_FAILURE_INFORMATION (
+
+						  ID,UUID,VERSION_NUMBER,FK_REF_FAILURE_CLASSIFICATION,FK_REF_FAILURE_TYPE,RESPONSIBILITY,INTERN_EXTERN,FK_REF_STATUS_INTERN,FK_REF_STATUS_EXTERN,FK_REF_BRANCH,VOLTAGE_LEVEL,PRESSURE_LEVEL,FAILURE_BEGIN,FAILURE_END_PLANNED,FAILURE_END_RESUPPLIED,PROBABLE_REASON,INTERNAL_REMARK,POSTCODE,CITY,DISTRICT,STREET,HOUSENUMBER,STATION_DESCRIPTION,STATION_COORDS,RADIUS,LONGITUDE,LATITUDE,CREATE_DATE,CREATE_USER,MOD_DATE,MOD_USER,
+
+						  HACTION,
+						  HDATE,
+						  HUSER
+						 )
+	VALUES 				(
+						  OLD.ID,OLD.UUID,OLD.VERSION_NUMBER,OLD.FK_REF_FAILURE_CLASSIFICATION,OLD.FK_REF_FAILURE_TYPE,OLD.RESPONSIBILITY,OLD.INTERN_EXTERN,OLD.FK_REF_STATUS_INTERN,OLD.FK_REF_STATUS_EXTERN,OLD.FK_REF_BRANCH,OLD.VOLTAGE_LEVEL,OLD.PRESSURE_LEVEL,OLD.FAILURE_BEGIN,OLD.FAILURE_END_PLANNED,OLD.FAILURE_END_RESUPPLIED,OLD.PROBABLE_REASON,OLD.INTERNAL_REMARK,OLD.POSTCODE,OLD.CITY,OLD.DISTRICT,OLD.STREET,OLD.HOUSENUMBER,OLD.STATION_DESCRIPTION,OLD.STATION_COORDS,OLD.RADIUS,OLD.LONGITUDE,OLD.LATITUDE,OLD.CREATE_DATE,OLD.CREATE_USER,OLD.MOD_DATE,OLD.MOD_USER,
+
+                          3,
+						  current_timestamp,
+					      OLD.MOD_USER );
+	END IF;
+
+        RETURN OLD;
+    END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE
+  COST 100;
+ALTER FUNCTION PUBLIC.TBL_FAILURE_INFORMATION_DELETE_TRG()
+  OWNER TO gfi_service;
+
+DROP TRIGGER IF EXISTS TBL_FAILURE_INFORMATION_DELETE_TRG ON PUBLIC.TBL_FAILURE_INFORMATION;
+
+CREATE TRIGGER TBL_FAILURE_INFORMATION_DELETE_TRG
+  BEFORE DELETE
+  ON PUBLIC.TBL_FAILURE_INFORMATION
+  FOR EACH ROW
+  EXECUTE PROCEDURE PUBLIC.TBL_FAILURE_INFORMATION_DELETE_TRG();
+
+
+INSERT INTO public.htbl_failure_information(HACTION, HDATE, HUSER, ID, UUID, VERSION_NUMBER, FK_REF_FAILURE_CLASSIFICATION, FK_REF_FAILURE_TYPE, RESPONSIBILITY, INTERN_EXTERN, FK_REF_STATUS_INTERN, FK_REF_STATUS_EXTERN, FK_REF_BRANCH, VOLTAGE_LEVEL, PRESSURE_LEVEL, FAILURE_BEGIN, FAILURE_END_PLANNED, FAILURE_END_RESUPPLIED, PROBABLE_REASON, INTERNAL_REMARK, POSTCODE, CITY, DISTRICT, STREET, HOUSENUMBER, STATION_DESCRIPTION, STATION_COORDS, RADIUS, LONGITUDE, LATITUDE, CREATE_DATE, CREATE_USER, MOD_DATE, MOD_USER)
+VALUES (1, '2020-03-13 00:00:00', 'SCRIPT', 1, '6432a9c9-0384-44af-9bb8-34f2878d7b49',1, 1, 1, 'Rolf Rudis', 'I', 1, 1, 1, 'NS', null, '2021-01-19 00:00:00', '2021-01-22 00:00:00', '2021-01-22 12:00:00', 'Stromausfall durch Bagger', 'Der Bagger grub zu tief', '71711', 'Murr', 'Westbezirk', 'Ferdinand-Porsche-Straße', '2', 'Trafo 1', '124,2323', '2km', 9.247952, 48.955700, '2020-01-22 15:32:15', 'schmidth', '2020-01-24 08:02:44', 'meyers');
+
+INSERT INTO public.htbl_failure_information(HACTION, HDATE, HUSER, ID, UUID, VERSION_NUMBER, FK_REF_FAILURE_CLASSIFICATION, FK_REF_FAILURE_TYPE, RESPONSIBILITY, INTERN_EXTERN, FK_REF_STATUS_INTERN, FK_REF_STATUS_EXTERN, FK_REF_BRANCH, VOLTAGE_LEVEL, PRESSURE_LEVEL, FAILURE_BEGIN, FAILURE_END_PLANNED, FAILURE_END_RESUPPLIED, PROBABLE_REASON, INTERNAL_REMARK, POSTCODE, CITY, DISTRICT, STREET, HOUSENUMBER, STATION_DESCRIPTION, STATION_COORDS, RADIUS, LONGITUDE, LATITUDE, CREATE_DATE, CREATE_USER, MOD_DATE, MOD_USER)
+VALUES (2, '2020-03-13 00:00:00', 'SCRIPT', 2, '37aef635-d0d4-4c47-ac25-c0d16c29e35c', 1,3, 2, 'Bernd Britzel', 'E', 2, 2, 3, null, 'HD', '2021-05-19 00:00:00', '2021-05-22 00:00:00', '2021-05-22 12:00:00', 'Leck in Gasleitung', 'HD betroffen', '26133', 'Oldenburg', null, 'Cloppenburger Str.', '302', 'ertf', '124,2323', '6km', 8.210000, 55.110000, '2020-02-03 15:15:15', 'schulzek', '2020-02-24 20:08:41', 'muellert');
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/config/TestConfiguration.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/config/TestConfiguration.java
index 2640599..e3926a7 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/config/TestConfiguration.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/config/TestConfiguration.java
@@ -40,6 +40,9 @@
     FailureInformationMapper failureInformationMapper() { return new FailureInformationMapperImpl(); }
 
     @Bean
+    HistFailureInformationMapper histFailureInformationMapper() { return new HistFailureInformationMapperImpl(); }
+
+    @Bean
     BranchMapper branchMapper() { return new BranchMapperImpl(); }
 
     @Bean
@@ -68,6 +71,11 @@
     }
 
     @Bean
+    public HistFailureInformationService myHistFailureInformationService() {
+        return new HistFailureInformationService();
+    }
+
+    @Bean
     public BranchService myBranchService() {
         return new BranchService();
     }
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationControllerTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationControllerTest.java
index 558a58b..162f6dc 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationControllerTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/FailureInformationControllerTest.java
@@ -122,9 +122,6 @@
                 .andExpect(jsonPath("$.internExtern", is(failureInfoDto.getInternExtern())))
                 .andExpect(jsonPath("$.voltageLevel", is(failureInfoDto.getVoltageLevel())))
                 .andExpect(jsonPath("$.pressureLevel", is(failureInfoDto.getPressureLevel())))
-                //.andExpect(jsonPath("$.failureBegin", is(failureInfoDto.getFailureBegin().toString())))
-                //.andExpect(jsonPath("$.failureEndPlanned", is(failureInfoDto.getFailureEndPlanned().toString())))
-                //.andExpect(jsonPath("$.failureEndResupplied", is(failureInfoDto.getFailureEndResupplied().toString())))
                 .andExpect(jsonPath("$.probableReason", is(failureInfoDto.getProbableReason())))
                 .andExpect(jsonPath("$.internalRemark", is(failureInfoDto.getInternalRemark())))
                 .andExpect(jsonPath("$.postcode", is(failureInfoDto.getPostcode())))
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/HistFailureInformationControllerTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/HistFailureInformationControllerTest.java
new file mode 100644
index 0000000..f4d8c74
--- /dev/null
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/HistFailureInformationControllerTest.java
@@ -0,0 +1,84 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+package org.eclipse.openk.gridfailureinformation.controller;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.eclipse.openk.gridfailureinformation.GridFailureInformationApplication;
+import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
+import org.eclipse.openk.gridfailureinformation.service.FailureInformationService;
+import org.eclipse.openk.gridfailureinformation.service.HistFailureInformationService;
+import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
+import org.eclipse.openk.gridfailureinformation.viewmodel.BranchDto;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.web.servlet.MockMvc;
+
+import java.util.List;
+import java.util.Random;
+import java.util.UUID;
+
+import static org.hamcrest.Matchers.is;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+@SpringBootTest(classes = GridFailureInformationApplication.class)
+@AutoConfigureMockMvc
+@ActiveProfiles("test")
+public class HistFailureInformationControllerTest {
+
+    @MockBean
+    private HistFailureInformationService histFailureInformationService;
+
+    @Autowired
+    private MockMvc mockMvc;
+
+    @Test
+    public void shouldFindHistFailureInfos() throws Exception {
+        List<FailureInformationDto> failureInformationDtoList = MockDataHelper.mockHistGridFailureInformationDtoList();
+
+        when(histFailureInformationService.getFailureInformationVersionsByUuid(any(UUID.class))).thenReturn(failureInformationDtoList);
+
+        mockMvc.perform(get("/hist-grid-failure-informations/{uuid}/versions", UUID.randomUUID()))
+                .andExpect(status().is2xxSuccessful())
+                .andExpect(content().contentType(MediaType.APPLICATION_JSON));
+    }
+
+    @Test
+    public void shouldFindHistFailureInfoVersion() throws Exception {
+        FailureInformationDto dto = MockDataHelper.mockFailureInformationDto();
+        when(histFailureInformationService.getFailureInformationVersion(
+                any(UUID.class),
+                any(Long.class)
+        )).thenReturn(dto);
+
+        String versionId = Long.toString(new Random().nextLong());
+
+        mockMvc.perform(get("/hist-grid-failure-informations/{uuid}/versions/{versionNumber}" ,UUID.randomUUID(),new Random().nextLong() ))
+                .andExpect(status().is2xxSuccessful())
+                .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+                .andExpect(jsonPath("responsibility", is(  dto.getResponsibility())));
+    }
+
+}
\ No newline at end of file
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
index 1c5a7dd..38c5480 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
@@ -55,6 +55,8 @@
     private FailureTypeRepository failureTypeRepository;
     @MockBean
     private StatusRepository statusRepository;
+    @MockBean
+    private HistFailureInformationRepository histFailureInformationRepository;
 
     @Test
     public void shouldFindFailureInformations() {
@@ -98,12 +100,17 @@
         when(failureClassificationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(refFailureClassification));
         when(failureTypeRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(refFailureType));
         when(statusRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(refStatus));
+        when(histFailureInformationRepository.countByUuid(any(UUID.class))).thenReturn(5L);
 
-        when (failureInformationRepository.save(any(TblFailureInformation.class))).thenReturn(fiTbl);
+        when(failureInformationRepository.save(any(TblFailureInformation.class)))
+                .then((Answer<TblFailureInformation>) invocation -> {
+                    Object[] args = invocation.getArguments();
+                    return (TblFailureInformation) args[0];
+                });
 
         FailureInformationDto savedDto = failureInformationService.updateFailureInfo(fiDto);
 
-        assertEquals(fiTbl.getUuid(), savedDto.getUuid());
+        assertEquals(savedDto.getVersionNumber(), 6L);
         assertEquals(fiTbl.getResponsibility(), savedDto.getResponsibility());
         assertEquals(fiTbl.getInternExtern(), savedDto.getInternExtern());
         assertEquals(fiTbl.getVoltageLevel(), savedDto.getVoltageLevel());
@@ -159,6 +166,7 @@
         FailureInformationDto savedDto = failureInformationService.updateFailureInfo(fiDto);
 
         assertEquals(fiTbl.getUuid(), savedDto.getUuid());
+        assertEquals(fiTbl.getVersionNumber(), savedDto.getVersionNumber());
         assertEquals(fiTbl.getResponsibility(), savedDto.getResponsibility());
         assertEquals(fiTbl.getInternExtern(), savedDto.getInternExtern());
         assertEquals(fiTbl.getVoltageLevel(), savedDto.getVoltageLevel());
@@ -340,6 +348,7 @@
         FailureInformationDto savedDto = failureInformationService.insertFailureInfo(fiDto);
 
         assertNotNull(savedDto.getUuid());
+        assertEquals(1L, savedDto.getVersionNumber());
         assertEquals(fiDto.getResponsibility(), savedDto.getResponsibility());
         assertEquals(fiDto.getInternExtern(), savedDto.getInternExtern());
         assertEquals(fiDto.getVoltageLevel(), savedDto.getVoltageLevel());
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationServiceTest.java
new file mode 100644
index 0000000..fe0174d
--- /dev/null
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationServiceTest.java
@@ -0,0 +1,77 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+package org.eclipse.openk.gridfailureinformation.service;
+
+import org.eclipse.openk.gridfailureinformation.config.TestConfiguration;
+import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
+import org.eclipse.openk.gridfailureinformation.model.*;
+import org.eclipse.openk.gridfailureinformation.repository.*;
+import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
+import org.eclipse.openk.gridfailureinformation.viewmodel.BranchDto;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.junit.jupiter.api.Test;
+import org.mockito.stubbing.Answer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.test.context.ContextConfiguration;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.Random;
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+@DataJpaTest
+@ContextConfiguration(classes = {TestConfiguration.class})
+
+public class HistFailureInformationServiceTest {
+    @Qualifier("myHistFailureInformationService")
+    @Autowired
+    private HistFailureInformationService histFailureInformationService;
+
+    @MockBean
+    private HistFailureInformationRepository histFailureInformationRepository;
+
+    @Test
+    public void shouldFindHistFailureInformationsByUuid() {
+        List<HtblFailureInformation> mockHistFailureList = MockDataHelper.mockHistTblFailureInformationList();
+        when(histFailureInformationRepository.findByUuid(any(UUID.class))).thenReturn(mockHistFailureList);
+        List<FailureInformationDto> retList = histFailureInformationService.getFailureInformationVersionsByUuid(UUID.randomUUID());
+
+        assertEquals(retList.size(), mockHistFailureList.size());
+        assertEquals(retList.size(), 2);
+        assertEquals(retList.get(1).getUuid(), mockHistFailureList.get(1).getUuid());
+        assertEquals(retList.get(0).getResponsibility(), mockHistFailureList.get(0).getResponsibility());
+    }
+
+
+    @Test
+    public void shouldFindASingleHistFailureInformationVersion() {
+        HtblFailureInformation mockHistFailure = MockDataHelper.mockHistTblFailureInformation();
+        when(histFailureInformationRepository.findByUuidAndVersionNumber(any(UUID.class), any(Long.class))).thenReturn(Optional.of(mockHistFailure));
+        FailureInformationDto retDto = histFailureInformationService.getFailureInformationVersion(UUID.randomUUID(), new Random().nextLong());
+
+        assertEquals( mockHistFailure.getResponsibility(), retDto.getResponsibility() );
+        assertEquals( mockHistFailure.getUuid(), retDto.getUuid());
+    }
+
+}
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
index 6b7aa4c..d543f32 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
@@ -53,6 +53,7 @@
     public static FailureInformationDto mockFailureInformationDto() {
         FailureInformationDto dto = new FailureInformationDto();
         dto.setUuid(UUID.randomUUID());
+        dto.setVersionNumber(3L);
         dto.setResponsibility("Vatter Abraham");
         dto.setInternExtern(INTERNAL_SHORT);
         dto.setVoltageLevel(Constants.VOLTAGE_LEVEL_MS);
@@ -89,6 +90,7 @@
     public static TblFailureInformation mockTblFailureInformation() {
         TblFailureInformation obj = new TblFailureInformation();
         obj.setUuid(UUID.randomUUID());
+        obj.setVersionNumber(4L);
         obj.setResponsibility("Vatter Abraham");
         obj.setInternExtern(INTERNAL_SHORT);
         obj.setVoltageLevel(Constants.VOLTAGE_LEVEL_MS);
@@ -353,5 +355,147 @@
         return refStatusList;
     }
 
+    public static HtblFailureInformation mockHistTblFailureInformation() {
+        HtblFailureInformation obj = new HtblFailureInformation();
+        obj.setUuid(UUID.randomUUID());
+        obj.setVersionNumber(1L);
+        obj.setResponsibility("Dudley Dursley");
+        obj.setInternExtern(INTERNAL_SHORT);
+        obj.setVoltageLevel(Constants.VOLTAGE_LEVEL_MS);
+        obj.setPressureLevel(Constants.PRESSURE_LEVEL_HD);
+        obj.setFailureBegin(Date.valueOf("2022-12-01"));
+        obj.setFailureEndPlanned(Date.valueOf("2022-12-02"));
+        obj.setFailureEndResupplied(Date.valueOf("2022-12-03"));
+        obj.setProbableReason("Über Kabel gestolpert");
+
+        obj.setCreateDate(Date.valueOf("2020-05-08"));
+        obj.setCreateUser("weizenkeimk");
+        obj.setModDate(Date.valueOf("2020-05-23"));
+        obj.setModUser("schlonzh");
+
+        obj.setRefStatusIntern(mockRefStatus());
+        obj.setRefStatusExtern(mockRefStatus());
+        obj.setRefFailureType(mockRefFailureType());
+        obj.setRefFailureClassification(mockRefFailureClassification());
+        obj.setRefBranch(mockRefBranch());
+
+        return obj;
+    }
+
+
+    public static HtblFailureInformation mockHistTblFailureInformation2() {
+        HtblFailureInformation obj = new HtblFailureInformation();
+        obj.setUuid(UUID.randomUUID());
+        obj.setVersionNumber(2L);
+        obj.setResponsibility("Donald Duck");
+        obj.setInternExtern(INTERNAL_SHORT);
+        obj.setVoltageLevel(Constants.VOLTAGE_LEVEL_MS);
+        obj.setPressureLevel(Constants.PRESSURE_LEVEL_HD);
+        obj.setFailureBegin(Date.valueOf("2022-12-01"));
+        obj.setFailureEndPlanned(Date.valueOf("2022-12-02"));
+        obj.setFailureEndResupplied(Date.valueOf("2022-12-03"));
+        obj.setProbableReason("Rohrbruch");
+
+        obj.setCreateDate(Date.valueOf("2020-05-08"));
+        obj.setCreateUser("Kleverk");
+        obj.setModDate(Date.valueOf("2020-05-23"));
+        obj.setModUser("Gansg");
+
+        obj.setRefStatusIntern(mockRefStatus());
+        obj.setRefStatusExtern(mockRefStatus());
+        obj.setRefFailureType(mockRefFailureType());
+        obj.setRefFailureClassification(mockRefFailureClassification());
+        obj.setRefBranch(mockRefBranch());
+
+        return obj;
+    }
+
+    public static  List<HtblFailureInformation> mockHistTblFailureInformationList() {
+        List<HtblFailureInformation> retList = new LinkedList<>();
+        retList.add( mockHistTblFailureInformation() );
+        retList.add( mockHistTblFailureInformation2() );
+        return retList;
+    }
+
+    public static FailureInformationDto mockHistFailureInformationDto() {
+        FailureInformationDto dto = new FailureInformationDto();
+        dto.setUuid(UUID.randomUUID());
+        dto.setVersionNumber(1L);
+        dto.setResponsibility("Dudley Dursley");
+        dto.setInternExtern(INTERNAL_SHORT);
+        dto.setVoltageLevel(Constants.VOLTAGE_LEVEL_MS);
+        dto.setPressureLevel(Constants.PRESSURE_LEVEL_HD);
+        dto.setFailureBegin(Date.valueOf("2022-12-01"));
+        dto.setFailureEndPlanned(Date.valueOf("2022-12-02"));
+        dto.setFailureEndResupplied(Date.valueOf("2022-12-03"));
+        dto.setProbableReason("Über Kabel gestolpert");
+
+        dto.setFailureClassificationId(UUID.randomUUID());
+        dto.setFailureClassification("FailClazz");
+
+        dto.setFailureTypeId(UUID.randomUUID());
+        dto.setFailureType("FailTypo");
+
+        dto.setStatusInternId(UUID.randomUUID());
+        dto.setStatusIntern("NEW");
+
+        dto.setStatusExternId(UUID.randomUUID());
+        dto.setStatusExtern("CLOSED");
+
+        dto.setBranchId(UUID.randomUUID());
+        dto.setBranch("G");
+        dto.setBranchColorCode("#fdea64");
+
+        dto.setCreateDate(Date.valueOf("2020-05-08"));
+        dto.setCreateUser("weizenkeimk");
+        dto.setModDate(Date.valueOf("2020-05-23"));
+        dto.setModUser("schlonzh");
+
+        return dto;
+    }
+
+    public static FailureInformationDto mockHistFailureInformationDto2() {
+        FailureInformationDto dto = new FailureInformationDto();
+        dto.setUuid(UUID.randomUUID());
+        dto.setVersionNumber(2L);
+        dto.setResponsibility("Paulchen Panther");
+        dto.setInternExtern(INTERNAL_SHORT);
+        dto.setVoltageLevel(Constants.VOLTAGE_LEVEL_MS);
+        dto.setPressureLevel(Constants.PRESSURE_LEVEL_HD);
+        dto.setFailureBegin(Date.valueOf("2022-12-01"));
+        dto.setFailureEndPlanned(Date.valueOf("2022-12-02"));
+        dto.setFailureEndResupplied(Date.valueOf("2022-12-03"));
+        dto.setProbableReason("Über Rohr gestolpert");
+
+        dto.setFailureClassificationId(UUID.randomUUID());
+        dto.setFailureClassification("FailClazz");
+
+        dto.setFailureTypeId(UUID.randomUUID());
+        dto.setFailureType("FailTypo");
+
+        dto.setStatusInternId(UUID.randomUUID());
+        dto.setStatusIntern("NEW");
+
+        dto.setStatusExternId(UUID.randomUUID());
+        dto.setStatusExtern("CLOSED");
+
+        dto.setBranchId(UUID.randomUUID());
+        dto.setBranch("G");
+        dto.setBranchColorCode("#fdea64");
+
+        dto.setCreateDate(Date.valueOf("2020-05-08"));
+        dto.setCreateUser("weizenkeimk");
+        dto.setModDate(Date.valueOf("2020-05-23"));
+        dto.setModUser("schlonzh");
+
+        return dto;
+    }
+
+    public static  List<FailureInformationDto> mockHistGridFailureInformationDtoList() {
+        List<FailureInformationDto> retList = new LinkedList<>();
+        retList.add( mockHistFailureInformationDto() );
+        retList.add( mockHistFailureInformationDto2() );
+        return retList;
+    }
 
 }