diff --git a/core/pom.xml b/core/pom.xml
index d7d561c2d823a2610faeca705190015161c26a71..6bb308682acd979bbb40c1ac857390da9efaaddf 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -4,17 +4,55 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>smart-energy-management-system</artifactId>
-        <groupId>cz.fi.muni.pa165</groupId>
+        <groupId>cz.muni.fi.pa165</groupId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-
     <artifactId>core</artifactId>
-
+    <name>core</name>
+    <description>Core application for smart energy management system</description>
+    <dependencies>
+        <dependency>
+            <groupId>cz.muni.fi.pa165</groupId>
+            <artifactId>model</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+            <version>1.5.3.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
     <properties>
         <maven.compiler.source>17</maven.compiler.source>
         <maven.compiler.target>17</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
-
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
 </project>
\ No newline at end of file
diff --git a/core/src/main/java/cz/fi/muni/pa165/core/user/.gitkeep b/core/src/main/java/cz/fi/muni/pa165/core/user/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/core/src/main/java/cz/fi/muni/pa165/core/CoreApplication.java b/core/src/main/java/cz/muni/fi/pa165/core/CoreApplication.java
similarity index 90%
rename from core/src/main/java/cz/fi/muni/pa165/core/CoreApplication.java
rename to core/src/main/java/cz/muni/fi/pa165/core/CoreApplication.java
index 8d64445ba5b8251297cd4b9d6e938f19ab97acc1..f76cdbebeff0bbff160603daf449394bbaa0a5be 100644
--- a/core/src/main/java/cz/fi/muni/pa165/core/CoreApplication.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/CoreApplication.java
@@ -1,4 +1,4 @@
-package cz.fi.muni.pa165.core;
+package cz.muni.fi.pa165.core;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/DataInitializer.java b/core/src/main/java/cz/muni/fi/pa165/core/DataInitializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a13146a76d4e0c8feb1334556f7b0311d67c032
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/DataInitializer.java
@@ -0,0 +1,29 @@
+package cz.muni.fi.pa165.core;
+
+import cz.muni.fi.pa165.core.user.User;
+import cz.muni.fi.pa165.core.user.UserService;
+import cz.muni.fi.pa165.core.user.UserType;
+import lombok.RequiredArgsConstructor;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+@RequiredArgsConstructor
+@Component
+public class DataInitializer implements ApplicationRunner {
+	private final UserService userService;
+
+	@Override
+	public void run(ApplicationArguments args) throws Exception {
+		User user = User.builder()
+				.email("test@email.com")
+				.firstName("John")
+				.lastName("Doe")
+				.username("johnD")
+				.password("password")
+				.userType(UserType.ADMIN)
+				.build();
+		userService.create(user);
+
+	}
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/common/DomainMapper.java b/core/src/main/java/cz/muni/fi/pa165/core/common/DomainMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..099ae1a88796b382d0e571899f3faea7375eeb37
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/common/DomainMapper.java
@@ -0,0 +1,24 @@
+package cz.muni.fi.pa165.core.common;
+
+import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+
+import java.util.List;
+
+public interface DomainMapper<T extends DomainObject, S extends DomainObjectDto> {
+
+	T fromDto(S dto);
+
+	S toDto(T entity);
+
+	List<S> toDtoList(List<T> entities);
+
+   /*
+	@Mappings({
+			@Mapping(target = "total", expression = "java(source.getTotalElements())"),
+			@Mapping(target = "page", expression = "java(source.getNumber())"),
+			@Mapping(target = "pageSize", expression = "java(source.getSize())"),
+			@Mapping(target = "items", expression = "java(toDtoList(source.getContent()))")
+	})
+	Result<S> toResult(Page<T> source);
+    */
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/common/DomainObject.java b/core/src/main/java/cz/muni/fi/pa165/core/common/DomainObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..f49c03554e7f5d895dadb8f3683c73c5d72d2d88
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/common/DomainObject.java
@@ -0,0 +1,17 @@
+package cz.muni.fi.pa165.core.common;
+
+import jakarta.persistence.Id;
+import jakarta.persistence.MappedSuperclass;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.UUID;
+
+@Getter
+@Setter
+@MappedSuperclass
+public abstract class DomainObject {
+
+	@Id
+	private String id = UUID.randomUUID().toString();
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..2d094024cdfc6f863685f1d332e5e3613a4a4908
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/common/DomainService.java
@@ -0,0 +1,30 @@
+package cz.muni.fi.pa165.core.common;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.transaction.annotation.Transactional;
+
+public abstract class DomainService<T extends DomainObject> {
+
+	public static final int DEFAULT_PAGE_SIZE = 10;
+
+	public abstract JpaRepository<T, String> getRepository();
+
+	@Transactional
+	public T create(T entity) {
+		return getRepository().save(entity);
+	}
+
+	@Transactional(readOnly = true)
+	public Page<T> findAll(Pageable pageable) {
+		return getRepository().findAll(pageable);
+	}
+
+	@Transactional(readOnly = true)
+	public Page<T> findAll(int page) {
+		return getRepository().findAll(PageRequest.of(page, DEFAULT_PAGE_SIZE));
+	}
+}
+
diff --git a/core/src/main/java/cz/fi/muni/pa165/core/company/.gitkeep b/core/src/main/java/cz/muni/fi/pa165/core/company/.gitkeep
similarity index 100%
rename from core/src/main/java/cz/fi/muni/pa165/core/company/.gitkeep
rename to core/src/main/java/cz/muni/fi/pa165/core/company/.gitkeep
diff --git a/core/src/main/java/cz/fi/muni/pa165/core/device/.gitkeep b/core/src/main/java/cz/muni/fi/pa165/core/device/.gitkeep
similarity index 100%
rename from core/src/main/java/cz/fi/muni/pa165/core/device/.gitkeep
rename to core/src/main/java/cz/muni/fi/pa165/core/device/.gitkeep
diff --git a/core/src/main/java/cz/fi/muni/pa165/core/house/.gitkeep b/core/src/main/java/cz/muni/fi/pa165/core/house/.gitkeep
similarity index 100%
rename from core/src/main/java/cz/fi/muni/pa165/core/house/.gitkeep
rename to core/src/main/java/cz/muni/fi/pa165/core/house/.gitkeep
diff --git a/core/src/main/java/cz/fi/muni/pa165/core/smartmeter/.gitkeep b/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/.gitkeep
similarity index 100%
rename from core/src/main/java/cz/fi/muni/pa165/core/smartmeter/.gitkeep
rename to core/src/main/java/cz/muni/fi/pa165/core/smartmeter/.gitkeep
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/user/User.java b/core/src/main/java/cz/muni/fi/pa165/core/user/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ae1b425ca00d266094b38a271ae9ac585c621c5
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/User.java
@@ -0,0 +1,36 @@
+package cz.muni.fi.pa165.core.user;
+
+import cz.muni.fi.pa165.core.common.DomainObject;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Table(name = "domain_user")
+public class User extends DomainObject {
+
+	private String username;
+
+	@Enumerated(EnumType.STRING)
+	private UserType userType;
+
+	private String password;
+
+	private String email;
+
+	private String firstName;
+
+	private String lastName;
+
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..b143a7cb2f2b903cdce728d6240822ed52fa32ca
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/UserController.java
@@ -0,0 +1,48 @@
+package cz.muni.fi.pa165.core.user;
+
+import cz.muni.fi.pa165.model.dto.user.UserCreateDto;
+import cz.muni.fi.pa165.model.dto.user.UserDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/users")
+public class UserController {
+
+	private final UserService service;
+
+	private final UserMapper mapper;
+
+	@Autowired
+	public UserController(UserService service, UserMapper mapper) {
+		this.service = service;
+		this.mapper = mapper;
+	}
+
+	@GetMapping
+	public List<UserDto> findAll() {
+		return service.findAll().stream().map(mapper::toDto).toList();
+	}
+
+	@GetMapping("/{id}")
+	public UserDto find(@PathVariable String id) {
+		return mapper.toDto(service.find(id));
+	}
+
+	@PostMapping
+	public UserDto create(@RequestBody UserCreateDto dto) {
+		return mapper.toDto(service.create(mapper.fromCreateDto(dto)));
+	}
+
+	// @GetMapping
+	// public Result<UserDto> findAll(@RequestParam int page) {
+	//  	return mapper.toResult(service.findAll(page));
+	// }
+}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/user/UserMapper.java b/core/src/main/java/cz/muni/fi/pa165/core/user/UserMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce1a629f2507eea30681e6914f0348ff646a1fb3
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/UserMapper.java
@@ -0,0 +1,13 @@
+package cz.muni.fi.pa165.core.user;
+
+import cz.muni.fi.pa165.core.common.DomainMapper;
+import cz.muni.fi.pa165.model.dto.user.UserCreateDto;
+import cz.muni.fi.pa165.model.dto.user.UserDto;
+import org.mapstruct.Mapper;
+
+@Mapper
+public interface UserMapper extends DomainMapper<User, UserDto> {
+
+	User fromCreateDto(UserCreateDto dto);
+}
+
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
new file mode 100644
index 0000000000000000000000000000000000000000..58f12b1aa2bad06755c670eaa267cb69df59e72f
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/UserRepository.java
@@ -0,0 +1,9 @@
+package cz.muni.fi.pa165.core.user;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface UserRepository extends JpaRepository<User, String> {
+}
+
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
new file mode 100644
index 0000000000000000000000000000000000000000..1411527886277ed59b23d6ba335e80d74f0cee7e
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/UserService.java
@@ -0,0 +1,35 @@
+package cz.muni.fi.pa165.core.user;
+
+import cz.muni.fi.pa165.core.common.DomainService;
+import jakarta.persistence.EntityNotFoundException;
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+public class UserService extends DomainService<User> {
+
+	@Getter
+	private final UserRepository repository;
+
+	@Autowired
+	public UserService(UserRepository repository) {
+		this.repository = repository;
+	}
+
+	@Transactional(readOnly = true)
+	public User find(String id) {
+		return repository.findById(id)
+				.orElseThrow(() -> new EntityNotFoundException("User '" + id + "' not found."));
+	}
+
+	@Transactional(readOnly = true)
+	public List<User> findAll() {
+		return repository.findAll();
+	}
+
+}
+
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/user/UserType.java b/core/src/main/java/cz/muni/fi/pa165/core/user/UserType.java
new file mode 100644
index 0000000000000000000000000000000000000000..3208d51f80846f081add1faba4bcd9a8bf9ac61a
--- /dev/null
+++ b/core/src/main/java/cz/muni/fi/pa165/core/user/UserType.java
@@ -0,0 +1,7 @@
+package cz.muni.fi.pa165.core.user;
+
+public enum UserType {
+	NORMAL,
+	EMPLOYEE,
+	ADMIN
+}
diff --git a/core/src/test/java/cz/fi/muni/pa165/core/CoreApplicationTest.java b/core/src/test/java/cz/muni/fi/pa165/core/CoreApplicationTest.java
similarity index 85%
rename from core/src/test/java/cz/fi/muni/pa165/core/CoreApplicationTest.java
rename to core/src/test/java/cz/muni/fi/pa165/core/CoreApplicationTest.java
index e658bb4ef2f501ff9f57c27fda086e133a1fb6ce..9b7b7c0d57e7a12f34081e7656bcb9b21b33f3bd 100644
--- a/core/src/test/java/cz/fi/muni/pa165/core/CoreApplicationTest.java
+++ b/core/src/test/java/cz/muni/fi/pa165/core/CoreApplicationTest.java
@@ -1,4 +1,4 @@
-package cz.fi.muni.pa165.core;
+package cz.muni.fi.pa165.core;
 
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
diff --git a/microservice3/pom.xml b/microservice3/pom.xml
index ef83ff9fbf8a08cd8691d78fce5547065a1f1459..d5559ef22d81e3ad4fc2e2486ca8236c99063d73 100644
--- a/microservice3/pom.xml
+++ b/microservice3/pom.xml
@@ -4,7 +4,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>smart-energy-management-system</artifactId>
-        <groupId>cz.fi.muni.pa165</groupId>
+        <groupId>cz.muni.fi.pa165</groupId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
diff --git a/microservice3/src/main/java/cz/fi/muni/pa165/microservice3/App.java b/microservice3/src/main/java/cz/muni/fi/pa165/microservice3/App.java
similarity index 86%
rename from microservice3/src/main/java/cz/fi/muni/pa165/microservice3/App.java
rename to microservice3/src/main/java/cz/muni/fi/pa165/microservice3/App.java
index 6882ed9f862921bb0b4c1043664929aaaf2998f8..8b3f7ae17947df72d5abbbebc2c35c6f78cf26e2 100644
--- a/microservice3/src/main/java/cz/fi/muni/pa165/microservice3/App.java
+++ b/microservice3/src/main/java/cz/muni/fi/pa165/microservice3/App.java
@@ -1,4 +1,4 @@
-package cz.fi.muni.pa165.microservice3;
+package cz.muni.fi.pa165.microservice3;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/microservice3/src/test/java/cz/fi/muni/pa165/microservice3/AppTest.java b/microservice3/src/test/java/cz/muni/fi/pa165/microservice3/AppTest.java
similarity index 81%
rename from microservice3/src/test/java/cz/fi/muni/pa165/microservice3/AppTest.java
rename to microservice3/src/test/java/cz/muni/fi/pa165/microservice3/AppTest.java
index b5fed3c2bd68a93aa3cca9ddb9c36337376cbe86..927c9db533809664f7bb116442b93015fb07b864 100644
--- a/microservice3/src/test/java/cz/fi/muni/pa165/microservice3/AppTest.java
+++ b/microservice3/src/test/java/cz/muni/fi/pa165/microservice3/AppTest.java
@@ -1,4 +1,4 @@
-package cz.fi.muni.pa165.microservice3;
+package cz.muni.fi.pa165.microservice3;
 
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
diff --git a/microservice4/pom.xml b/microservice4/pom.xml
index 8dd8d7bc886297be07d46cf51d931b512d083f8c..388b2d43771b635dbc901048d6636a387d006929 100644
--- a/microservice4/pom.xml
+++ b/microservice4/pom.xml
@@ -4,7 +4,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>smart-energy-management-system</artifactId>
-        <groupId>cz.fi.muni.pa165</groupId>
+        <groupId>cz.muni.fi.pa165</groupId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
diff --git a/microservice4/src/main/java/cz/fi/muni/pa165/microservice4/App.java b/microservice4/src/main/java/cz/muni/fi/pa165/microservice4/App.java
similarity index 86%
rename from microservice4/src/main/java/cz/fi/muni/pa165/microservice4/App.java
rename to microservice4/src/main/java/cz/muni/fi/pa165/microservice4/App.java
index 1a72bee879fb75d494102d2d835cae33e908f82a..9044aa6836c9db6ca18db423a2496d3cc829deb2 100644
--- a/microservice4/src/main/java/cz/fi/muni/pa165/microservice4/App.java
+++ b/microservice4/src/main/java/cz/muni/fi/pa165/microservice4/App.java
@@ -1,4 +1,4 @@
-package cz.fi.muni.pa165.microservice4;
+package cz.muni.fi.pa165.microservice4;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/microservice4/src/test/java/cz/fi/muni/pa165/microservice4/AppTest.java b/microservice4/src/test/java/cz/muni/fi/pa165/microservice4/AppTest.java
similarity index 81%
rename from microservice4/src/test/java/cz/fi/muni/pa165/microservice4/AppTest.java
rename to microservice4/src/test/java/cz/muni/fi/pa165/microservice4/AppTest.java
index 992adf0bb98a1d3a6eed8b74b6e3ba3019a122a5..3a9a025da2d45eb03d3615bb2714abc2f5a75cd3 100644
--- a/microservice4/src/test/java/cz/fi/muni/pa165/microservice4/AppTest.java
+++ b/microservice4/src/test/java/cz/muni/fi/pa165/microservice4/AppTest.java
@@ -1,4 +1,4 @@
-package cz.fi.muni.pa165.microservice4;
+package cz.muni.fi.pa165.microservice4;
 
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
diff --git a/model/pom.xml b/model/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c5662a97f9ff213bdba277f6649839dcfb5fac85
--- /dev/null
+++ b/model/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>smart-energy-management-system</artifactId>
+        <groupId>cz.muni.fi.pa165</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>model</artifactId>
+    <name>models</name>
+    <description>Library for smart energy management system with domain model objects</description>
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
+    </properties>
+</project>
\ No newline at end of file
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/common/DomainObjectDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/common/DomainObjectDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..f99c4d29aad4bd029500006c83e933325cef4838
--- /dev/null
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/common/DomainObjectDto.java
@@ -0,0 +1,11 @@
+package cz.muni.fi.pa165.model.dto.common;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public abstract class DomainObjectDto {
+
+	private String id;
+}
\ No newline at end of file
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserCreateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserCreateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..8221a4866056513ea5ccd926bbd226c6fe08d14c
--- /dev/null
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserCreateDto.java
@@ -0,0 +1,22 @@
+package cz.muni.fi.pa165.model.dto.user;
+
+import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class UserCreateDto extends DomainObjectDto {
+
+	private String username;
+
+	private String password;
+
+	private String email;
+
+	private String firstName;
+
+	private String lastName;
+
+}
+
diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..ede86aca9100f2ee3b287685ae93beb1a65f1e36
--- /dev/null
+++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/user/UserDto.java
@@ -0,0 +1,20 @@
+package cz.muni.fi.pa165.model.dto.user;
+
+import cz.muni.fi.pa165.model.dto.common.DomainObjectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class UserDto extends DomainObjectDto {
+
+	private String username;
+
+	private String email;
+
+	private String firstName;
+
+	private String lastName;
+
+
+}
diff --git a/pom.xml b/pom.xml
index 95710e817322cf42b48fe9ced146b96021089c39..46c7101bb2338f173a272109a15b24b823a0da38 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,6 +8,7 @@
 		<module>statistics</module>
 		<module>microservice3</module>
 		<module>microservice4</module>
+		<module>model</module>
 	</modules>
     <parent>
 		<groupId>org.springframework.boot</groupId>
@@ -15,13 +16,18 @@
 		<version>3.0.4</version>
 		<relativePath/> <!-- lookup parent from repository -->
 	</parent>
-	<groupId>cz.fi.muni.pa165</groupId>
+	<groupId>cz.muni.fi.pa165</groupId>
 	<artifactId>smart-energy-management-system</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
 	<name>smart-energy-management-system</name>
 	<description>Demo project for Spring Boot</description>
 	<properties>
 		<java.version>17</java.version>
+		<maven.compiler.source>17</maven.compiler.source>
+		<maven.compiler.target>17</maven.compiler.target>
+		<lombok.version>1.18.26</lombok.version>
+		<org.mapstruct.version>1.5.3.Final</org.mapstruct.version>
+		<example.version>0.0.1-SNAPSHOT</example.version>
 	</properties>
 	<dependencies>
 		<dependency>
@@ -34,15 +40,62 @@
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>${lombok.version}</version>
+		</dependency>
+
 	</dependencies>
 
 	<build>
 		<plugins>
 			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.8.1</version>
+				<configuration>
+					<source>17</source> <!-- depending on your project -->
+					<target>17</target> <!-- depending on your project -->
+					<annotationProcessorPaths>
+						<!-- Order is IMPORTANT! Lombok needs to go first -->
+						<path>
+							<groupId>org.projectlombok</groupId>
+							<artifactId>lombok</artifactId>
+							<version>${lombok.version}</version>
+						</path>
+						<path>
+							<groupId>org.mapstruct</groupId>
+							<artifactId>mapstruct-processor</artifactId>
+							<version>${org.mapstruct.version}</version>
+						</path>
+						<!-- other annotation processors -->
+					</annotationProcessorPaths>
+					<compilerArgs>
+						<compilerArg>
+							-Amapstruct.defaultComponentModel=spring
+						</compilerArg>
+					</compilerArgs>
+				</configuration>
 			</plugin>
 		</plugins>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.springframework.boot</groupId>
+					<artifactId>spring-boot-maven-plugin</artifactId>
+					<configuration>
+						<excludes>
+							<exclude>
+								<groupId>org.projectlombok</groupId>
+								<artifactId>lombok</artifactId>
+							</exclude>
+						</excludes>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
 	</build>
 
 </project>
diff --git a/statistics/pom.xml b/statistics/pom.xml
index f0121295fa359ce8c56c0a25cbab559a45085399..eb661fce761f0ef4769edc76ad1c3ad285230be8 100644
--- a/statistics/pom.xml
+++ b/statistics/pom.xml
@@ -4,7 +4,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>smart-energy-management-system</artifactId>
-        <groupId>cz.fi.muni.pa165</groupId>
+        <groupId>cz.muni.fi.pa165</groupId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
diff --git a/statistics/src/main/java/cz/fi/muni/pa165/statistics/StatisticsApplication.java b/statistics/src/main/java/cz/muni/fi/pa165/statistics/StatisticsApplication.java
similarity index 88%
rename from statistics/src/main/java/cz/fi/muni/pa165/statistics/StatisticsApplication.java
rename to statistics/src/main/java/cz/muni/fi/pa165/statistics/StatisticsApplication.java
index 588560d48800b5f928fc2272674db5c3d3c6b747..f73b192563f145e934a607c405d973ba013a4a9b 100644
--- a/statistics/src/main/java/cz/fi/muni/pa165/statistics/StatisticsApplication.java
+++ b/statistics/src/main/java/cz/muni/fi/pa165/statistics/StatisticsApplication.java
@@ -1,4 +1,4 @@
-package cz.fi.muni.pa165.statistics;
+package cz.muni.fi.pa165.statistics;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/statistics/src/test/java/cz/fi/muni/pa165/statistics/StatisticsApplicationTest.java b/statistics/src/test/java/cz/muni/fi/pa165/statistics/StatisticsApplicationTest.java
similarity index 83%
rename from statistics/src/test/java/cz/fi/muni/pa165/statistics/StatisticsApplicationTest.java
rename to statistics/src/test/java/cz/muni/fi/pa165/statistics/StatisticsApplicationTest.java
index ebce479fd93c76a0ce693365bda79cd9ae0ceeca..07c0c264f9e2f672839e1775d10648f89b475364 100644
--- a/statistics/src/test/java/cz/fi/muni/pa165/statistics/StatisticsApplicationTest.java
+++ b/statistics/src/test/java/cz/muni/fi/pa165/statistics/StatisticsApplicationTest.java
@@ -1,4 +1,4 @@
-package cz.fi.muni.pa165.statistics;
+package cz.muni.fi.pa165.statistics;
 
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;