diff --git a/core/src/main/java/cz/muni/fi/pa165/core/common/DomainService.java b/core/src/main/java/cz/muni/fi/pa165/core/common/DomainService.java
index 55fec5d0884d4191b45a32adfea9a4aa746d6bb1..1f3240a11a6c55677bb392bbfbd8efb36aca7571 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/common/DomainService.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/common/DomainService.java
@@ -95,6 +95,16 @@ public abstract class DomainService<T extends DomainObject> {
 		getRepository().saveAll(entities);
 	}
 
+	/**
+	 * Deletes all entities by array of id's
+	 */
+	@Transactional
+	public void deleteAllById(String[] ids) {
+		for (String id: ids) {
+			deleteById(id);
+		}
+	}
+
 	/**
 	 * Deletes the entity with the given ID by setting its deletion datetime.
 	 *
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/device/DeviceController.java b/core/src/main/java/cz/muni/fi/pa165/core/device/DeviceController.java
index d06588d84d150b029567280b727831a451f9b4f5..e892d591f9dc6848b5bd061b9e42f07c6434137a 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/device/DeviceController.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/device/DeviceController.java
@@ -1,5 +1,6 @@
 package cz.muni.fi.pa165.core.device;
 
+import cz.muni.fi.pa165.core.helpers.exceptions.EntityDeletionException;
 import cz.muni.fi.pa165.model.dto.device.DeviceCreateDto;
 import cz.muni.fi.pa165.model.dto.device.DeviceDto;
 import cz.muni.fi.pa165.model.dto.device.DeviceUpdateDto;
@@ -8,6 +9,9 @@ import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -19,6 +23,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import org.springframework.data.domain.Pageable;
+
+import javax.swing.*;
 import java.util.List;
 
 @RestController
@@ -80,8 +86,8 @@ public class DeviceController {
             summary = "Delete device",
             description = "Deletes the device with the specified id.")
     @DeleteMapping("/{id}")
-    public DeviceDto deleteById(
+    public ResponseEntity<DeviceDto> deleteById(
             @PathVariable @Parameter(description = "The id of the device.") String id) {
-      return deviceFacade.deleteById(id);
+        return new ResponseEntity<>(deviceFacade.deleteById(id), HttpStatus.OK);
     }
 }
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/device/DeviceFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/device/DeviceFacade.java
index 83ebcbe6ddd4c713c3731e5ca6f29df9b8e3d131..3084375ac196254acc548bff37ba2d341fed7c8f 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/device/DeviceFacade.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/device/DeviceFacade.java
@@ -1,9 +1,11 @@
 package cz.muni.fi.pa165.core.device;
 
 import cz.muni.fi.pa165.core.common.DomainFacade;
+import cz.muni.fi.pa165.core.helpers.exceptions.EntityDeletionException;
 import cz.muni.fi.pa165.model.dto.device.DeviceCreateDto;
 import cz.muni.fi.pa165.model.dto.device.DeviceDto;
 import cz.muni.fi.pa165.model.dto.device.DeviceUpdateDto;
+import lombok.SneakyThrows;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -17,4 +19,14 @@ public class DeviceFacade extends DomainFacade<Device, DeviceDto, DeviceCreateDt
 		super(deviceService, deviceMapper);
 		this.deviceService = deviceService;
 	}
+
+	@SneakyThrows
+	@Override
+	public DeviceDto deleteById(String id) {
+		Device device = deviceService.findById(id);
+		if (!device.getSmartMeterList().isEmpty()){
+			throw new EntityDeletionException("Entity has some data");
+		}
+		return new DeviceDto();
+	}
 }
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/helpers/exceptions/EntityDeletionException.java b/core/src/main/java/cz/muni/fi/pa165/core/helpers/exceptions/EntityDeletionException.java
new file mode 100644
index 0000000000000000000000000000000000000000..bee9ff576f0d1cdf53b0caad454220fe2a394887
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/helpers/exceptions/EntityDeletionException.java
@@ -0,0 +1,7 @@
+package cz.muni.fi.pa165.core.helpers.exceptions;
+
+public class EntityDeletionException extends Exception{
+    public EntityDeletionException(String message) {
+        super(message);
+    }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/metrics/MetricsFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/metrics/MetricsFacade.java
index e6e112aded8af539aaea8131a9c4bf9878cc06c1..debfc4d2f8225be4f0c632c855514d40d64c5dd5 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/metrics/MetricsFacade.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/metrics/MetricsFacade.java
@@ -1,6 +1,8 @@
 package cz.muni.fi.pa165.core.metrics;
 
 import cz.muni.fi.pa165.core.common.DomainFacade;
+import cz.muni.fi.pa165.core.smartmeter.SmartMeter;
+import cz.muni.fi.pa165.core.smartmeter.SmartMeterService;
 import cz.muni.fi.pa165.model.dto.metrics.MetricsCreateDto;
 import cz.muni.fi.pa165.model.dto.metrics.MetricsDto;
 import cz.muni.fi.pa165.model.dto.metrics.MetricsUpdateDto;
@@ -13,10 +15,22 @@ public class MetricsFacade extends DomainFacade<Metrics,
 		MetricsCreateDto,
 		MetricsUpdateDto> {
 	private MetricsService metricsService; // For the "MetricsService" specific methods
+	private final SmartMeterService smartMeterService;
 	@Autowired
 	public MetricsFacade(MetricsService metricsService,
-						 MetricsMapper metricsMapper) {
+						 MetricsMapper metricsMapper, SmartMeterService smartMeterService) {
 		super(metricsService, metricsMapper);
 		this.metricsService = metricsService;
+		this.smartMeterService = smartMeterService;
+	}
+
+	@Override
+	public MetricsDto create(MetricsCreateDto metricsCreateDto){
+		Metrics metrics = mapper.fromCreateDto(metricsCreateDto);
+		SmartMeter smartMeter = smartMeterService.findById(metricsCreateDto.getSmartMeterId());
+		metrics.setSmartMeter(smartMeter);
+
+		Metrics metricsCreated = metricsService.create(metrics);
+		return mapper.toDto(metricsCreated);
 	}
 }
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeterFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeterFacade.java
index 4312f57c888b5f412535cf896fbfb8de8ae0f5d5..325cfbc8fa2b1e2a1f2a1afc22c4165d347f8b37 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeterFacade.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeterFacade.java
@@ -1,11 +1,15 @@
 package cz.muni.fi.pa165.core.smartmeter;
 
 import cz.muni.fi.pa165.core.common.DomainFacade;
+import cz.muni.fi.pa165.core.device.DeviceService;
+import cz.muni.fi.pa165.core.house.HouseService;
+import cz.muni.fi.pa165.core.metrics.MetricsService;
 import cz.muni.fi.pa165.model.dto.smartDevice.SmartMeterCreateDto;
 import cz.muni.fi.pa165.model.dto.smartDevice.SmartMeterDto;
 import cz.muni.fi.pa165.model.dto.smartDevice.SmartMeterUpdateDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 @Component
 public class SmartMeterFacade extends DomainFacade<SmartMeter,
@@ -13,12 +17,36 @@ public class SmartMeterFacade extends DomainFacade<SmartMeter,
 		SmartMeterCreateDto,
 		SmartMeterUpdateDto> {
 	private final SmartMeterService smartMeterService; // For the "SmartMeterService" specific methods
-
+	private final DeviceService deviceService;
+	private final HouseService houseService;
+	private final MetricsService metricsService;
 	@Autowired
 	public SmartMeterFacade(SmartMeterService smartMeterService,
-							SmartMeterMapper smartMeterMapper
-	) {
+							SmartMeterMapper smartMeterMapper,
+							DeviceService deviceService, HouseService houseService, MetricsService metricsService) {
 		super(smartMeterService, smartMeterMapper);
 		this.smartMeterService = smartMeterService;
+		this.deviceService = deviceService;
+		this.houseService = houseService;
+		this.metricsService = metricsService;
+	}
+
+	@Override
+	public SmartMeterDto create(SmartMeterCreateDto smartMeterCreateDto){
+		SmartMeter smartMeter = mapper.fromCreateDto(smartMeterCreateDto);
+		smartMeter.setDevice(deviceService.findById(smartMeterCreateDto.getDeviceId()));
+		smartMeter.setHouse(houseService.findById(smartMeterCreateDto.getHouseId()));
+		return mapper.toDto(smartMeterService.create(smartMeter));
+	}
+
+	@Override
+	@Transactional
+	public SmartMeterDto deleteById(String id){
+		// soft delete Smart Devices
+		SmartMeter smartMeter = smartMeterService.findById(id);
+		metricsService.deleteAllById((String[]) smartMeter.getMetricsList().stream().map(sm -> smartMeter.getId()).toArray());
+
+		SmartMeter smartMeterDeleted = smartMeterService.deleteById(smartMeter.getId());
+		return mapper.toDto(smartMeterDeleted);
 	}
 }
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/user/UserController.java b/core/src/main/java/cz/muni/fi/pa165/core/user/UserController.java
index 317a298869e35105b831a027539e4c17ca7f7d35..ad867dbbbd7939a47d10167f63ef19758bab1e1a 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/user/UserController.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/UserController.java
@@ -131,6 +131,7 @@ public class UserController {
 	})
 	public UserDto deleteById(
 			@Parameter(description = "ID of the user to be deleted") @PathVariable String id) {
+
 		return userFacade.deleteById(id);
 	}
 
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/user/roles/RoleController.java b/core/src/main/java/cz/muni/fi/pa165/core/user/roles/RoleController.java
index 3abef5e887ffa31a77718d16d2976a239cb0180e..31a36ffdebc55bbf7e2159eea3914e3290fa596c 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/user/roles/RoleController.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/roles/RoleController.java
@@ -72,7 +72,6 @@ public class RoleController {
     public CompanyRoleDto createCompanyRole(
             @Parameter(description = "Role to be created") @RequestBody CompanyRoleDto roleDto) {
         return roleFacade.createCompanyRole(roleDto);
-        //return new CompanyRole();
     }
 
     @Operation(
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsCreateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsCreateDto.java
index 5884c44ffd86481afffc74f5f84d62d5d9950beb..b4a683d80c667396bdc40772e3c51d2e4547ae49 100644
--- a/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsCreateDto.java
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsCreateDto.java
@@ -8,4 +8,5 @@ import lombok.Setter;
 @Setter
 public class MetricsCreateDto extends DomainObjectDto {
     private double consumptionKWH;
+    private String smartMeterId;
 }
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/smartDevice/SmartMeterCreateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/smartDevice/SmartMeterCreateDto.java
index 4d3007de99e61fad394513a435d225bc6759b630..6854ff914a05e4d207a6fdede5d846c8c6502748 100644
--- a/model/src/main/java/cz/muni/fi/pa165/model/dto/smartDevice/SmartMeterCreateDto.java
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/smartDevice/SmartMeterCreateDto.java
@@ -10,4 +10,6 @@ import lombok.Setter;
 @Setter
 public class SmartMeterCreateDto extends DomainObjectDto {
   private String name;
+  private String houseId;
+  private String deviceId;
 }