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 f4b7c25812c8bf0ee7f7206fe7bbabefde9812c9..56bd7cb344f1f31fcd26ac45a8231eb553a98bd2 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
@@ -140,9 +140,9 @@ public class UserController {
 			@ApiResponse(responseCode = "200", description = "Success"),
 			@ApiResponse(responseCode = "404", description = "User not found"),
 	})
-	public List<Double> userHouseStatistics(
+	public Double userHouseStatistics(
 			@RequestBody UserStatisticsCreateDto createStatDto) {
-		return userService.getConsumption(createStatDto.getId(), createStatDto.getHouseId(),
+		return userService.getConsumption(createStatDto.getUserId(), createStatDto.getHouseId(),
 				createStatDto.getStartTime(), createStatDto.getEndTime());
 	}
 
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/user/UserRepository.java b/core/src/main/java/cz/muni/fi/pa165/core/user/UserRepository.java
index 2526372ec8950faab64cbc8357502337ca407423..7b3a836ad846bed651be897e407dc70b9845979b 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/user/UserRepository.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/UserRepository.java
@@ -18,14 +18,14 @@ public interface UserRepository extends JpaRepository<User, String> {
 	int update(@Param("user") User user, @Param("id") String id);
 
 
-	@Query("Select m.consumptionKWH " +
+	@Query("Select SUM(m.consumptionKWH) " +
 			"From User u " +
 			"INNER JOIN House h " +
 			"INNER JOIN SmartMeter s " +
 			"INNER JOIN Metrics m " +
 			"where u.id = :#{#userId} and h.id = :#{#houseId} and m.timeStamp >= :#{#startTime} and m.timeStamp <= :#{#endTime}")
-	List<Double> getStatisticsData(@Param("userId") String userId,
+	Double getStatisticsData(@Param("userId") String userId,
 							 @Param("houseId") String houseId,
 							 @Param("startTime") LocalDateTime startTime,
-							 @Param("startTime") LocalDateTime endTime);
+							 @Param("endTime") LocalDateTime endTime);
 }
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/user/UserService.java b/core/src/main/java/cz/muni/fi/pa165/core/user/UserService.java
index f20afdfd4734929e2dcfae30ded8319560580bae..eb39e986567c7c51e761a12a14e11a4f73445585 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/user/UserService.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/UserService.java
@@ -30,7 +30,7 @@ public class UserService extends DomainService<User> {
   }
 
   @Transactional(readOnly = true)
-  public List<Double> getConsumption(String userId,
+  public Double getConsumption(String userId,
                                      String houseId,
                                      LocalDateTime startTime,
                                      LocalDateTime endTime) {
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 0c7fe3d71579c44dafaf4875329e82148f2cbf7c..5884c44ffd86481afffc74f5f84d62d5d9950beb 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
@@ -1,7 +1,11 @@
 package cz.muni.fi.pa165.model.dto.metrics;
 
 import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+import lombok.Getter;
+import lombok.Setter;
 
+@Getter
+@Setter
 public class MetricsCreateDto extends DomainObjectDto {
     private double consumptionKWH;
 }
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsDto.java
index 20c1ddca95de6060325cfb549b646dfb57c32e08..2907ffa1a50d5f4e33ca394f665dde5deffa9a21 100644
--- a/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsDto.java
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsDto.java
@@ -1,7 +1,11 @@
 package cz.muni.fi.pa165.model.dto.metrics;
 
 import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+import lombok.Getter;
+import lombok.Setter;
 
+@Getter
+@Setter
 public class MetricsDto extends DomainObjectDto {
     private double consumptionKWH;
 }
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsUpdateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsUpdateDto.java
index 99556ef0be0ca3b9acd7301e44f7d9f335e349bd..d4904ba92d39a35adf99673a8b098c2136fa7b34 100644
--- a/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsUpdateDto.java
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/metrics/MetricsUpdateDto.java
@@ -1,7 +1,11 @@
 package cz.muni.fi.pa165.model.dto.metrics;
 
 import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+import lombok.Getter;
+import lombok.Setter;
 
+@Getter
+@Setter
 public class MetricsUpdateDto extends DomainObjectDto {
     private double consumptionKWH;
 }
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserStatisticsCreateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserStatisticsCreateDto.java
index 098d93430030af610250b3d621d98cb2fa806569..c7b405f675b2fe5a4f7029b4cccc1c26b624210f 100644
--- a/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserStatisticsCreateDto.java
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserStatisticsCreateDto.java
@@ -9,7 +9,7 @@ import java.time.LocalDateTime;
 @Setter
 public class UserStatisticsCreateDto {
 
-    private String id;
+    private String userId;
     private String houseId;
     private LocalDateTime startTime;
     private LocalDateTime endTime;
diff --git a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticCreateDto.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticCreateDto.java
index 484ed505f017f884deed133b368a42495f8405cb..90ef59ec270d0a1fb9e7e642178c1ee56b3993b5 100644
--- a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticCreateDto.java
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticCreateDto.java
@@ -18,7 +18,6 @@ import java.util.Date;
 @Builder
 @Data
 public class StatisticCreateDto {
-    private String id;
     private String userId;
     @Email
     private String userEmail;
diff --git a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticRepository.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticRepository.java
index f8c79bbb8d07da26e5a23bf945b2c7aeb7cbf39d..7c5df6b66be1df76c847a8da821342980d0c56ef 100644
--- a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticRepository.java
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticRepository.java
@@ -11,12 +11,12 @@ import java.util.List;
 @Repository
 public interface StatisticRepository extends JpaRepository<UserStatistic, String> {
 
-    @Query("select name, userId, monthNum, yearNum, monthlyConsumption  from UserStatistic where userId = :#{#userId}")
+    @Query("select new UserStatistic (u.id, u.userId, u.userEmail, u.houseId, u.monthNum, u.yearNum, u.monthlyConsumption, u.name)  from UserStatistic u where u.userId = :#{#userId}")
     List<UserStatistic> findAllByUser(@Param("userId") String userId);
 
-    @Query("select id, name, userId, monthNum, yearNum, monthlyConsumption  from UserStatistic where userId = :#{#userId} and houseId = :#{#houseId}")
+    @Query("select new UserStatistic (u.id, u.userId, u.userEmail, u.houseId, u.monthNum, u.yearNum, u.monthlyConsumption, u.name)  from UserStatistic u where u.userId = :#{#userId} and u.houseId = :#{#houseId}")
     List<UserStatistic> findAllByUserAndHouse(@Param("userId") String userId, @Param("houseId") String houseId);
 
-    @Query("select id, name, userId, monthNum, yearNum, monthlyConsumption  from UserStatistic where userId = :#{#userId} and houseId = :#{#houseId} and monthNum = :#{#month} and yearNum = :#{#year}")
+    @Query("select new UserStatistic(u.id, u.userId, u.userEmail, u.houseId, u.monthNum, u.yearNum, u.monthlyConsumption, u.name)  from UserStatistic u where u.userId = :#{#userId} and u.houseId = :#{#houseId} and u.monthNum = :#{#month} and u.yearNum = :#{#year}")
     UserStatistic findUserHouseDateStatistics(@Param("userId") String userId, @Param("houseId") String houseId, @Param("month") int month, @Param("year") int year);
 }
diff --git a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticService.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticService.java
index ca349d7c01d79deade0bdf0cb23d3316a5ae1b50..cd61ce68ba209ec860a2ed4d84d2b72c5af2612a 100644
--- a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticService.java
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticService.java
@@ -7,6 +7,7 @@ import org.apache.http.client.methods.HttpHead;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.ContentType;
 import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -39,6 +40,11 @@ public class StatisticService {
 
         if (statistic == null){
             userStatistic.setId(UUID.randomUUID().toString());
+            userStatistic.setName(String.format("User%s_house%s_%d/%d.",
+                    userStatistic.getUserEmail(),
+                    userStatistic.getHouseId(),
+                    userStatistic.getMonthNum(),
+                    userStatistic.getYearNum()));
             userStatistic.setMonthlyConsumption(GenerateStatistic(userStatistic));
             repository.save(userStatistic);
             return userStatistic;
@@ -60,34 +66,53 @@ public class StatisticService {
     }
 
     private double GenerateStatistic(UserStatistic userStatistic) throws IOException {
-        // TODO: get first and last day of month
-        LocalDateTime startDateTime = LocalDateTime.of(2023,3,1,0,0,0,1);
-        LocalDateTime lastDateTime = LocalDateTime.of(2023,3,30,0,0,0,1);
+
+        LocalDateTime startDateTime = GetFirstDayOfMonth(userStatistic.getYearNum(), userStatistic.getMonthNum());
+        LocalDateTime lastDateTime = GetLastDayOfMonth(userStatistic.getYearNum(), userStatistic.getMonthNum());
 
         String payload = String.format("""
                 {
-                    "id": "%s",
+                    "userId": "%s",
                     "houseId": "%s",
-                    "startTime": "%s"
+                    "startTime": "%s",
                     "endTime": "%s"
                 }
-                """, userStatistic.getId(),
+                """, userStatistic.getUserId(),
                 userStatistic.getHouseId(),
                 startDateTime,
                 lastDateTime);
         StringEntity entity = new StringEntity(payload,
-                ContentType.APPLICATION_FORM_URLENCODED);
+                ContentType.APPLICATION_JSON);
 
         HttpClient httpClient = HttpClientBuilder.create().build();
         HttpPost request = new HttpPost("http://localhost:8080/api/user/statistics");
         request.setEntity(entity);
         request.setHeader("Content-Type", "application/json");
-        request.setHeader("accept:", "*/*");
 
         HttpResponse response = httpClient.execute(request);
-        System.out.println(response.getStatusLine().getStatusCode());
-        HttpEntity content = response.getEntity();
-        //System.out.println(content.);
-        return 0;
+
+        // TODO: assert response equals 200 and write message if not
+
+        String result = EntityUtils.toString(response.getEntity());
+
+        return result.isEmpty() ? 0
+                : Double.valueOf(result);
+    }
+
+    private LocalDateTime GetLastDayOfMonth(int year, int month){
+        LocalDateTime date = LocalDateTime.of(year,
+                month,1,0,0,0,0);
+        date.plusMonths(1);
+        date.minusDays(1);
+
+        return LocalDateTime.of(year,
+                month,
+                date.getDayOfMonth(),
+                23,59,59,999999);
+    }
+
+    private LocalDateTime GetFirstDayOfMonth(int year, int month){
+        return LocalDateTime.of(year,
+                month,1,0,0,0,0);
     }
 }
diff --git a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticsFacade.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticsFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa0598830804fb2e0b896652647e6c12bfbaceb9
--- /dev/null
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/StatisticsFacade.java
@@ -0,0 +1,40 @@
+package cz.muni.fi.pa165.statistics.statistics;
+
+import jakarta.validation.Valid;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.io.IOException;
+import java.util.List;
+
+@Component
+@Transactional
+public class StatisticsFacade {
+
+    private final StatisticService statisticService;
+
+    private final UserStatisticsMapper mapper;
+    @Autowired
+    public StatisticsFacade(StatisticService statisticService, UserStatisticsMapper mapper) {
+        this.statisticService = statisticService;
+        this.mapper = mapper;
+    }
+
+    @Transactional
+    public UserStatisticsDto CreateStatistics(StatisticCreateDto entity) throws IOException {
+        return mapper.toDto(statisticService.CreateStatistic(mapper.fromDto(entity)));
+    }
+
+    @Transactional
+    public List<UserStatisticsDto> FindAllByUser(String userId){
+        return mapper.toDtoList(statisticService.findAllUserStatistics(userId));
+    }
+
+    @Transactional
+    public List<UserStatisticsDto> findHouseStatisticsByUser(String userId,
+                                                             String houseId) {
+        return mapper.toDtoList(statisticService.findAllUserStatisticsByHouse(userId, houseId));
+    }
+}
diff --git a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatistic.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatistic.java
index abdab02467ec5ee5377e14e07bf299529857e1a2..01979e6397b1e45d26c7fc4aafc328d69dd77fba 100644
--- a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatistic.java
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatistic.java
@@ -27,5 +27,5 @@ public class UserStatistic {
     private int monthNum;
     private int yearNum;
     private Double monthlyConsumption;
-    private String name = String.format("User%s_house%s_%d/%d.", userEmail, houseId, monthNum, yearNum);
+    private String name;
 }
diff --git a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsController.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsController.java
index f626f0e7258243125e0c17bf26a99f5f65f755dd..bc6b196375f4c21c65a3b2ae0e57c1be92ca6283 100644
--- a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsController.java
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsController.java
@@ -3,7 +3,6 @@ package cz.muni.fi.pa165.statistics.statistics;
 import io.swagger.v3.oas.annotations.Operation;
 import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
@@ -13,46 +12,36 @@ import java.util.List;
 @RequestMapping("/api/user-statistics")
 public class UserStatisticsController {
 
-    private final StatisticService statisticService;
-    private final UserStatisticsMapper mapper;
+    private final StatisticsFacade statisticsFacade;
 
     @Autowired
-    public UserStatisticsController(StatisticService statisticService, UserStatisticsMapper mapper)
+    public UserStatisticsController(StatisticsFacade statisticsFacade)
     {
-        this.statisticService = statisticService;
-        this.mapper = mapper;
+        this.statisticsFacade = statisticsFacade;
     }
 
     @Operation(
             summary = "Create statistics",
             description = "Creates a new statistics.")
     @PostMapping
-    public ResponseEntity create(@RequestBody @Valid StatisticCreateDto createDto) throws IOException {
-        /*try
-        {*/
-            statisticService.CreateStatistic(mapper.fromDto(createDto));
-            return ResponseEntity.ok().build();
-        /*}
-        catch (Exception e)
-        {*/
-           // return ResponseEntity.internalServerError(e.getMessage()).build();
-        //}
+    public UserStatisticsDto create(@RequestBody @Valid StatisticCreateDto createDto) throws IOException {
+        return statisticsFacade.CreateStatistics(createDto);
     }
 
     @Operation(
             summary = "Get user statistics",
             description = "Get user statistics.")
     @GetMapping("/all")
-    public List<UserStatistic> findAllByUser(@RequestParam @Valid String userId) {
-        return statisticService.findAllUserStatistics(userId);
+    public List<UserStatisticsDto> findAllByUser(@RequestParam @Valid String userId) {
+        return statisticsFacade.FindAllByUser(userId);
     }
 
     @Operation(
             summary = "Get user statistics for house",
             description = "Get user statistics for house.")
     @GetMapping("/user")
-    public List<UserStatistic> findHouseStatisticsByUser(@RequestParam @Valid String userId,
+    public List<UserStatisticsDto> findHouseStatisticsByUser(@RequestParam @Valid String userId,
                                                          @RequestParam @Valid String houseId) {
-        return statisticService.findAllUserStatistics(userId);
+        return statisticsFacade.findHouseStatisticsByUser(userId, houseId);
     }
 }
diff --git a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsDto.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..2028028310aa7dc33466630ce2aa26a6aae507b5
--- /dev/null
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsDto.java
@@ -0,0 +1,27 @@
+package cz.muni.fi.pa165.statistics.statistics;
+
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import lombok.Builder;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+@Builder
+@Data
+public class UserStatisticsDto {
+    private String userId;
+    @Email
+    private String userEmail;
+    private String houseId;
+    @Min(1)
+    @Max(12)
+    private int monthNum;
+    @Min(2000)
+    @Max(2030)
+    private int yearNum;
+    private Double monthlyConsumption;
+}
diff --git a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsMapper.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsMapper.java
index 670a02b8223259ede9b97b1d6d1b54e7e03da4ec..499d8b6f027e9eb2e6d7b208f30241bd916a3a0e 100644
--- a/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsMapper.java
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/statistics/UserStatisticsMapper.java
@@ -2,7 +2,12 @@ package cz.muni.fi.pa165.statistics.statistics;
 
 import org.mapstruct.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface UserStatisticsMapper{
     UserStatistic fromDto(StatisticCreateDto entity);
+    UserStatisticsDto toDto(UserStatistic entity);
+
+    List<UserStatisticsDto> toDtoList(List<UserStatistic> entities);
 }