diff --git a/core/coreopenapi.yaml b/core/coreopenapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..84de02f0bd011fb1d7b13bd6cfa6241b49550359
--- /dev/null
+++ b/core/coreopenapi.yaml
@@ -0,0 +1,1267 @@
+openapi: "3.0.3"
+info:
+  title: "smart_energy_management_system API"
+  description: "smart_energy_management_system API"
+  version: "1.0.0"
+servers:
+  - url: "https://smart_energy_management_system"
+paths:
+  /api/smart-meter/{id}:
+    put:
+      summary: "PUT api/smart-meter/{id}"
+      operationId: "updateById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/SmartMeterUpdateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/SmartMeterDto"
+    delete:
+      summary: "DELETE api/smart-meter/{id}"
+      operationId: "deleteById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/SmartMeterDto"
+    get:
+      summary: "GET api/smart-meter/{id}"
+      operationId: "findById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/SmartMeterDto"
+  /api/smart-meter:
+    post:
+      summary: "POST api/smart-meter"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/SmartMeterCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/SmartMeterDto"
+    get:
+      summary: "GET api/smart-meter"
+      operationId: "findAll"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/SmartMeterDto"
+  /api/smart-meter/pageable:
+    get:
+      summary: "GET api/smart-meter/pageable"
+      operationId: "findAllPageable"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/SmartMeterDto"
+  /api/device/{id}:
+    put:
+      summary: "PUT api/device/{id}"
+      operationId: "updateById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/DeviceUpdateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/DeviceDto"
+    delete:
+      summary: "DELETE api/device/{id}"
+      operationId: "deleteById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/DeviceDto"
+    get:
+      summary: "GET api/device/{id}"
+      operationId: "findById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/DeviceDto"
+  /api/device:
+    post:
+      summary: "POST api/device"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/DeviceCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/DeviceDto"
+    get:
+      summary: "GET api/device"
+      operationId: "findAll"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/DeviceDto"
+  /api/device/pageable:
+    get:
+      summary: "GET api/device/pageable"
+      operationId: "findAllPageable"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/DeviceDto"
+  /api/user/{id}:
+    put:
+      summary: "PUT api/user/{id}"
+      operationId: "updateById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/UserUpdateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/UserDto"
+    delete:
+      summary: "DELETE api/user/{id}"
+      operationId: "deleteById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/UserDto"
+    get:
+      summary: "GET api/user/{id}"
+      operationId: "findById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/UserDto"
+  /api/user:
+    post:
+      summary: "POST api/user"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/UserCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/UserDto"
+    get:
+      summary: "GET api/user"
+      operationId: "findAll"
+      parameters:
+        - name: "page"
+          in: "query"
+          required: true
+          schema:
+            type: "integer"
+            format: "int32"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/Result"
+  /api/user/statistics:
+    post:
+      summary: "POST api/user/statistics"
+      operationId: "userHouseStatistics"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/UserStatisticsCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  type: "number"
+                  format: "double"
+  /api/user/all:
+    get:
+      summary: "GET api/user/all"
+      operationId: "findAll"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/UserDto"
+  /api/company/{id}:
+    put:
+      summary: "PUT api/company/{id}"
+      operationId: "updateById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/CompanyUpdateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/CompanyDto"
+    delete:
+      summary: "DELETE api/company/{id}"
+      operationId: "deleteById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/CompanyDto"
+    get:
+      summary: "GET api/company/{id}"
+      operationId: "findById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/CompanyDto"
+  /api/company:
+    post:
+      summary: "POST api/company"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/CompanyCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/CompanyDto"
+    get:
+      summary: "GET api/company"
+      operationId: "findAll"
+      parameters:
+        - name: "page"
+          in: "query"
+          required: true
+          schema:
+            type: "integer"
+            format: "int32"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/Result"
+  /api/company/pageable:
+    get:
+      summary: "GET api/company/pageable"
+      operationId: "findAllPageable"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/CompanyDto"
+  /api/company/all:
+    get:
+      summary: "GET api/company/all"
+      operationId: "findAll"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/CompanyDto"
+  /api/role:
+    post:
+      summary: "POST api/role"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/Role"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/Role"
+    get:
+      summary: "GET api/role"
+      operationId: "findUserRoles"
+      parameters:
+        - name: "userId"
+          in: "query"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/Role"
+  /api/role/{id}:
+    delete:
+      summary: "DELETE api/role/{id}"
+      operationId: "deleteById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/Role"
+  /api/role/all:
+    get:
+      summary: "GET api/role/all"
+      operationId: "findAll"
+      parameters:
+        - name: "userId"
+          in: "query"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/Role"
+  /api/metric/{id}:
+    put:
+      summary: "PUT api/metric/{id}"
+      operationId: "updateById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/MetricsUpdateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/MetricsDto"
+    delete:
+      summary: "DELETE api/metric/{id}"
+      operationId: "deleteById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/MetricsDto"
+    get:
+      summary: "GET api/metric/{id}"
+      operationId: "findById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/MetricsDto"
+  /api/metric:
+    post:
+      summary: "POST api/metric"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/MetricsCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/MetricsDto"
+    get:
+      summary: "GET api/metric"
+      operationId: "findAll"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/MetricsDto"
+  /api/metric/pageable:
+    get:
+      summary: "GET api/metric/pageable"
+      operationId: "findAllPageable"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/MetricsDto"
+  /api/manufacturer/{id}:
+    put:
+      summary: "PUT api/manufacturer/{id}"
+      operationId: "updateById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/ManufacturerUpdateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ManufacturerDto"
+    delete:
+      summary: "DELETE api/manufacturer/{id}"
+      operationId: "deleteById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ManufacturerDto"
+    get:
+      summary: "GET api/manufacturer/{id}"
+      operationId: "findById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ManufacturerDto"
+  /api/manufacturer:
+    post:
+      summary: "POST api/manufacturer"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/ManufacturerCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ManufacturerDto"
+    get:
+      summary: "GET api/manufacturer"
+      operationId: "findAll"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/ManufacturerDto"
+  /api/manufacturer/pageable:
+    get:
+      summary: "GET api/manufacturer/pageable"
+      operationId: "findAllPageable"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/ManufacturerDto"
+  /api/house/{id}:
+    put:
+      summary: "PUT api/house/{id}"
+      operationId: "updateById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/HouseUpdateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/HouseDto"
+    delete:
+      summary: "DELETE api/house/{id}"
+      operationId: "deleteById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/HouseDto"
+    get:
+      summary: "GET api/house/{id}"
+      operationId: "findById"
+      parameters:
+        - name: "id"
+          in: "path"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/HouseDto"
+  /api/house:
+    post:
+      summary: "POST api/house"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/HouseCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/HouseDto"
+    get:
+      summary: "GET api/house"
+      operationId: "findAll"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/HouseDto"
+  /api/house/pageable:
+    get:
+      summary: "GET api/house/pageable"
+      operationId: "findAllPageable"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/HouseDto"
+  /<unknown>:
+    get:
+      summary: "GET ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    put:
+      summary: "PUT ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    post:
+      summary: "POST ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    delete:
+      summary: "DELETE ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    options:
+      summary: "OPTIONS ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    head:
+      summary: "HEAD ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    patch:
+      summary: "PATCH ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    trace:
+      summary: "TRACE ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+components:
+  schemas:
+    SmartMeterUpdateDto:
+      type: "object"
+      properties:
+        id:
+          type: "string"
+    SmartMeterDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    SmartMeterCreateDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    DeviceUpdateDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    DeviceDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    DeviceCreateDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    UserUpdateDto:
+      type: "object"
+      properties:
+        username:
+          type: "string"
+        password:
+          type: "string"
+        email:
+          type: "string"
+        firstName:
+          type: "string"
+        lastName:
+          type: "string"
+        id:
+          type: "string"
+    UserDto:
+      type: "object"
+      properties:
+        username:
+          type: "string"
+        email:
+          type: "string"
+        firstName:
+          type: "string"
+        lastName:
+          type: "string"
+        id:
+          type: "string"
+    UserCreateDto:
+      type: "object"
+      properties:
+        username:
+          type: "string"
+        password:
+          type: "string"
+        email:
+          type: "string"
+        firstName:
+          type: "string"
+        lastName:
+          type: "string"
+        id:
+          type: "string"
+    UserStatisticsCreateDto:
+      type: "object"
+      properties:
+        id:
+          type: "string"
+        houseId:
+          type: "string"
+        startTime:
+          type: "string"
+          format: "date-time"
+        endTime:
+          type: "string"
+          format: "date-time"
+    Result:
+      type: "object"
+      properties:
+        total:
+          type: "integer"
+          format: "int64"
+        page:
+          type: "integer"
+          format: "int32"
+        pageSize:
+          type: "integer"
+          format: "int32"
+        items:
+          type: "array"
+    CompanyUpdateDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    CompanyDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    CompanyCreateDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    Manufacturer:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        deviceList:
+          type: "array"
+          items:
+            $ref: "#/components/schemas/Device"
+        id:
+          type: "string"
+        createdDateTime:
+          type: "string"
+          format: "date-time"
+        deletedDateTime:
+          type: "string"
+          format: "date-time"
+    Device:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        smartMeterList:
+          type: "array"
+          items:
+            $ref: "#/components/schemas/SmartMeter"
+        manufacturer:
+          $ref: "#/components/schemas/Manufacturer"
+        id:
+          type: "string"
+        createdDateTime:
+          type: "string"
+          format: "date-time"
+        deletedDateTime:
+          type: "string"
+          format: "date-time"
+    Metrics:
+      type: "object"
+      properties:
+        timeStamp:
+          type: "string"
+          format: "date-time"
+        consumptionKWH:
+          type: "number"
+          format: "double"
+        smartMeter:
+          $ref: "#/components/schemas/SmartMeter"
+        id:
+          type: "string"
+        createdDateTime:
+          type: "string"
+          format: "date-time"
+        deletedDateTime:
+          type: "string"
+          format: "date-time"
+    SmartMeter:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        device:
+          $ref: "#/components/schemas/Device"
+        house:
+          $ref: "#/components/schemas/House"
+        metricsList:
+          type: "array"
+          items:
+            $ref: "#/components/schemas/Metrics"
+        id:
+          type: "string"
+        createdDateTime:
+          type: "string"
+          format: "date-time"
+        deletedDateTime:
+          type: "string"
+          format: "date-time"
+    House:
+      type: "object"
+      properties:
+        address:
+          type: "string"
+        city:
+          type: "string"
+        state:
+          type: "string"
+        zipcode:
+          type: "string"
+        smartMeterList:
+          type: "array"
+          items:
+            $ref: "#/components/schemas/SmartMeter"
+        user:
+          $ref: "#/components/schemas/User"
+        id:
+          type: "string"
+        createdDateTime:
+          type: "string"
+          format: "date-time"
+        deletedDateTime:
+          type: "string"
+          format: "date-time"
+    User:
+      type: "object"
+      properties:
+        username:
+          type: "string"
+        userType:
+          type: "string"
+          enum:
+            - "NORMAL"
+            - "EMPLOYEE"
+            - "ADMIN"
+        password:
+          type: "string"
+        email:
+          type: "string"
+        firstName:
+          type: "string"
+        lastName:
+          type: "string"
+        housesList:
+          type: "array"
+          items:
+            $ref: "#/components/schemas/House"
+        id:
+          type: "string"
+        createdDateTime:
+          type: "string"
+          format: "date-time"
+        deletedDateTime:
+          type: "string"
+          format: "date-time"
+    Role:
+      type: "object"
+      properties:
+        user:
+          $ref: "#/components/schemas/User"
+        roleType:
+          type: "string"
+          enum:
+            - "Admin"
+            - "Employee"
+            - "Owner"
+        id:
+          type: "string"
+        createdDateTime:
+          type: "string"
+          format: "date-time"
+        deletedDateTime:
+          type: "string"
+          format: "date-time"
+    MetricsUpdateDto:
+      type: "object"
+      properties:
+        id:
+          type: "string"
+    MetricsDto:
+      type: "object"
+      properties:
+        id:
+          type: "string"
+    MetricsCreateDto:
+      type: "object"
+      properties:
+        id:
+          type: "string"
+    ManufacturerUpdateDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    ManufacturerDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    ManufacturerCreateDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        id:
+          type: "string"
+    HouseUpdateDto:
+      type: "object"
+      properties:
+        name:
+          type: "string"
+        city:
+          type: "string"
+        state:
+          type: "string"
+        zipcode:
+          type: "string"
+        id:
+          type: "string"
+    HouseDto:
+      type: "object"
+      properties:
+        address:
+          type: "string"
+        city:
+          type: "string"
+        state:
+          type: "string"
+        zipcode:
+          type: "string"
+        id:
+          type: "string"
+    HouseCreateDto:
+      type: "object"
+      properties:
+        address:
+          type: "string"
+        city:
+          type: "string"
+        state:
+          type: "string"
+        zipcode:
+          type: "string"
+        id:
+          type: "string"
+    Object:
+      type: "object"
+      properties: { }
+    ModelMap:
+      type: "object"
+      properties: { }
+    HttpStatusCode:
+      type: "object"
+      properties: { }
+    ModelAndView:
+      type: "object"
+      properties:
+        view:
+          $ref: "#/components/schemas/Object"
+        model:
+          $ref: "#/components/schemas/ModelMap"
+        status:
+          $ref: "#/components/schemas/HttpStatusCode"
+    HttpHeaders:
+      type: "object"
+      properties: { }
+    ResponseEntity:
+      type: "object"
+      properties:
+        headers:
+          $ref: "#/components/schemas/HttpHeaders"
\ No newline at end of file
diff --git a/statistics/statisticsopenapi.yaml b/statistics/statisticsopenapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f4712434a4a9f4f05212504f85365d36f92c243c
--- /dev/null
+++ b/statistics/statisticsopenapi.yaml
@@ -0,0 +1,216 @@
+openapi: "3.0.3"
+info:
+  title: "smart_energy_management_system API"
+  description: "smart_energy_management_system API"
+  version: "1.0.0"
+servers:
+  - url: "https://smart_energy_management_system"
+paths:
+  /api/user-statistics:
+    post:
+      summary: "POST api/user-statistics"
+      operationId: "create"
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: "#/components/schemas/StatisticCreateDto"
+        required: true
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+  /api/user-statistics/all:
+    get:
+      summary: "GET api/user-statistics/all"
+      operationId: "findAllByUser"
+      parameters:
+        - name: "userId"
+          in: "query"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/UserStatistic"
+  /api/user-statistics/user:
+    get:
+      summary: "GET api/user-statistics/user"
+      operationId: "findHouseStatisticsByUser"
+      parameters:
+        - name: "userId"
+          in: "query"
+          required: true
+          schema:
+            type: "string"
+        - name: "houseId"
+          in: "query"
+          required: true
+          schema:
+            type: "string"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                type: "array"
+                items:
+                  $ref: "#/components/schemas/UserStatistic"
+  /<unknown>:
+    get:
+      summary: "GET ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    put:
+      summary: "PUT ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    post:
+      summary: "POST ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    delete:
+      summary: "DELETE ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    options:
+      summary: "OPTIONS ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    head:
+      summary: "HEAD ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    patch:
+      summary: "PATCH ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+    trace:
+      summary: "TRACE ${..}"
+      operationId: "error"
+      responses:
+        "200":
+          description: "OK"
+          content:
+            '*/*':
+              schema:
+                $ref: "#/components/schemas/ResponseEntity"
+components:
+  schemas:
+    StatisticCreateDto:
+      type: "object"
+      properties:
+        id:
+          type: "string"
+        userId:
+          type: "string"
+        userEmail:
+          type: "string"
+        houseId:
+          type: "string"
+        monthNum:
+          type: "integer"
+          format: "int32"
+        yearNum:
+          type: "integer"
+          format: "int32"
+    HttpHeaders:
+      type: "object"
+      properties: { }
+    ResponseEntity:
+      type: "object"
+      properties:
+        headers:
+          $ref: "#/components/schemas/HttpHeaders"
+    UserStatistic:
+      type: "object"
+      properties:
+        id:
+          type: "string"
+        userId:
+          type: "string"
+        userEmail:
+          type: "string"
+        houseId:
+          type: "string"
+        monthNum:
+          type: "integer"
+          format: "int32"
+        yearNum:
+          type: "integer"
+          format: "int32"
+        monthlyConsumption:
+          type: "number"
+          format: "double"
+        name:
+          type: "string"
+    Object:
+      type: "object"
+      properties: { }
+    ModelMap:
+      type: "object"
+      properties: { }
+    HttpStatusCode:
+      type: "object"
+      properties: { }
+    ModelAndView:
+      type: "object"
+      properties:
+        view:
+          $ref: "#/components/schemas/Object"
+        model:
+          $ref: "#/components/schemas/ModelMap"
+        status:
+          $ref: "#/components/schemas/HttpStatusCode"
\ No newline at end of file