Index: trip-planner/src/main/java/finki/diplomska/tripplanner/models/User.java
===================================================================
--- trip-planner/src/main/java/finki/diplomska/tripplanner/models/User.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
+++ trip-planner/src/main/java/finki/diplomska/tripplanner/models/User.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
@@ -0,0 +1,84 @@
+package finki.diplomska.tripplanner.models;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import javax.persistence.*;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import java.util.Collection;
+import java.util.Date;
+
+@Entity
+@Table(name = "users")
+@AllArgsConstructor
+@Getter
+@Setter
+public class User implements UserDetails {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Email(message = "Username needs to be an email")
+    @NotBlank(message = "username is required")
+    @Column(unique = true)
+    private String username;
+    @NotBlank(message = "Please enter your full name")
+    private String fullName;
+    @NotBlank(message = "Password field is required")
+    private String password;
+    @Transient
+    private String confirmPassword;
+    private Date create_At;
+    private Date update_At;
+
+    //OneToMany with Project
+
+    public User() {
+    }
+
+
+    @PrePersist
+    protected void onCreate(){
+        this.create_At = new Date();
+    }
+    @PreUpdate
+    protected void onUpdate(){
+        this.update_At = new Date();
+    }
+
+    @Override
+    @JsonIgnore
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+        return null;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isAccountNonExpired() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isAccountNonLocked() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isCredentialsNonExpired() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isEnabled() {
+        return true;
+    }
+}
Index: trip-planner/src/main/java/finki/diplomska/tripplanner/models/dto/PlannerDto.java
===================================================================
--- trip-planner/src/main/java/finki/diplomska/tripplanner/models/dto/PlannerDto.java	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner/src/main/java/finki/diplomska/tripplanner/models/dto/PlannerDto.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
@@ -3,5 +3,4 @@
 import lombok.Data;
 
-import java.util.List;
 
 @Data
Index: trip-planner/src/main/java/finki/diplomska/tripplanner/models/dto/UserDto.java
===================================================================
--- trip-planner/src/main/java/finki/diplomska/tripplanner/models/dto/UserDto.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
+++ trip-planner/src/main/java/finki/diplomska/tripplanner/models/dto/UserDto.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
@@ -0,0 +1,30 @@
+package finki.diplomska.tripplanner.models.dto;
+
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class UserDto {
+    private String username;
+
+    private String fullName;
+
+    private String password;
+
+    private String confirmPassword;
+
+    private Date create_At;
+
+    private Date update_At;
+
+    public UserDto(String username, String fullName, String password, String confirmPassword, Date create_At, Date update_At) {
+        this.username = username;
+        this.fullName = fullName;
+        this.password = password;
+        this.confirmPassword = confirmPassword;
+        this.create_At = create_At;
+        this.update_At = update_At;
+    }
+}
Index: trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/CustomResponseEntityExceptionHandler.java
===================================================================
--- trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/CustomResponseEntityExceptionHandler.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
+++ trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/CustomResponseEntityExceptionHandler.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
@@ -0,0 +1,18 @@
+package finki.diplomska.tripplanner.models.exceptions;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.WebRequest;
+
+@ControllerAdvice
+@RestController
+public class CustomResponseEntityExceptionHandler {
+    @ExceptionHandler
+    public final ResponseEntity<Object> handleUsernameAlreadyExists(UsernameAlreadyExistsException ex, WebRequest request){
+        UsernameAlreadyExistsResponse exceptionResponse = new UsernameAlreadyExistsResponse(ex.getMessage());
+        return new ResponseEntity(exceptionResponse, HttpStatus.BAD_REQUEST);
+    }
+}
Index: trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/InvalidLoginResponse.java
===================================================================
--- trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/InvalidLoginResponse.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
+++ trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/InvalidLoginResponse.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
@@ -0,0 +1,27 @@
+package finki.diplomska.tripplanner.models.exceptions;
+
+public class InvalidLoginResponse {
+    private String username;
+    private String password;
+
+    public InvalidLoginResponse() {
+        this.username = "Invalid username";
+        this.password = "Invalid password";
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}
Index: trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/UsernameAlreadyExistsException.java
===================================================================
--- trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/UsernameAlreadyExistsException.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
+++ trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/UsernameAlreadyExistsException.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
@@ -0,0 +1,12 @@
+package finki.diplomska.tripplanner.models.exceptions;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(HttpStatus.BAD_REQUEST)
+public class UsernameAlreadyExistsException extends RuntimeException{
+
+    public UsernameAlreadyExistsException (String message){
+        super(message);
+    }
+}
Index: trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/UsernameAlreadyExistsResponse.java
===================================================================
--- trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/UsernameAlreadyExistsResponse.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
+++ trip-planner/src/main/java/finki/diplomska/tripplanner/models/exceptions/UsernameAlreadyExistsResponse.java	(revision 1ad8e64a349fcc7c996155279b16efc2cfe001dd)
@@ -0,0 +1,17 @@
+package finki.diplomska.tripplanner.models.exceptions;
+
+public class UsernameAlreadyExistsResponse {
+    private String username;
+
+    public UsernameAlreadyExistsResponse(String username) {
+        this.username = username;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+}
