Index: pom.xml
===================================================================
--- pom.xml	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ pom.xml	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -35,4 +35,9 @@
             <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
Index: src/main/java/mk/ukim/finki/easyfood/EasyFoodApplication.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/EasyFoodApplication.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/EasyFoodApplication.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -3,4 +3,8 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
 
 @SpringBootApplication
@@ -11,3 +15,9 @@
     }
 
+    @Bean
+    PasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder(10);
+    }
+
+
 }
Index: src/main/java/mk/ukim/finki/easyfood/config/SecurityConfig.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/config/SecurityConfig.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/config/SecurityConfig.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,22 @@
+package mk.ukim.finki.easyfood.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
+import org.springframework.security.web.SecurityFilterChain;
+import org.springframework.context.annotation.Bean;
+
+@Configuration
+public class SecurityConfig {
+
+    @Bean
+    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
+        http
+                .csrf(AbstractHttpConfigurer::disable)
+                .authorizeHttpRequests((requests) -> requests
+                        .requestMatchers("/**")
+                        .permitAll()
+                );
+        return http.build();
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/config/WebConfig.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/config/WebConfig.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/config/WebConfig.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,15 @@
+package mk.ukim.finki.easyfood.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/media/**")
+                .addResourceLocations("file:src/main/resources/images/media/");
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/Administrator.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Administrator.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/Administrator.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,4 +2,7 @@
 
 import jakarta.persistence.*;
+import lombok.NoArgsConstructor;
+import mk.ukim.finki.easyfood.model.enumerations.ROLE;
+
 import java.time.LocalDate;
 
@@ -7,4 +10,5 @@
 @Table(name = "administrator")
 @PrimaryKeyJoinColumn(name = "user_id")
+@NoArgsConstructor
 public class Administrator extends AppUser {
 
@@ -16,3 +20,6 @@
 
     // getters and setters
+    public Administrator(String email, String password, String firstName, String lastName, String phone, ROLE role) {
+        super(email, password, firstName, lastName, phone, role);
+    }
 }
Index: src/main/java/mk/ukim/finki/easyfood/model/AppUser.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/AppUser.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/AppUser.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,4 +2,8 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import mk.ukim.finki.easyfood.model.enumerations.ROLE;
+
 import java.util.List;
 
@@ -7,4 +11,6 @@
 @Table(name = "app_user")
 @Inheritance(strategy = InheritanceType.JOINED)
+@Data
+@NoArgsConstructor
 public class AppUser {
 
@@ -29,4 +35,7 @@
     private String phone;
 
+    @Enumerated(EnumType.STRING)
+    private ROLE role;
+
     @ManyToMany
     @JoinTable(
@@ -37,4 +46,15 @@
     private List<Address> addresses;
 
-    // getters and setters
+
+    public AppUser(String email, String password, String firstName, String lastName, String phone, ROLE role) {
+        this.email = email;
+        this.password = password;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.phone = phone;
+        this.role = role;
+    }
+
+
+
 }
Index: src/main/java/mk/ukim/finki/easyfood/model/Category.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Category.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/Category.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,4 +2,7 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+import lombok.Getter;
+
 import java.util.List;
 
@@ -19,5 +22,20 @@
     private String description;
 
-    // getters and setters
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
 }
 
Index: src/main/java/mk/ukim/finki/easyfood/model/Customer.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Customer.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/Customer.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,4 +2,7 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import mk.ukim.finki.easyfood.model.enumerations.ROLE;
 
 import java.util.List;
@@ -8,6 +11,8 @@
 @Entity
 @Table(name = "customer")
-@PrimaryKeyJoinColumn(name = "user_id")  // links PK to AppUser
-public class Customer extends AppUser{
+@PrimaryKeyJoinColumn(name = "user_id")
+@Data
+@NoArgsConstructor
+public class Customer extends AppUser {
 
 
@@ -18,5 +23,9 @@
     private ShoppingCart shoppingCart;
 
-    // getters and setters
+
+    public Customer(String email, String password, String firstName, String lastName, String phone, ROLE role) {
+        super(email, password, firstName, lastName, phone, role);
+    }
+
 }
 
Index: src/main/java/mk/ukim/finki/easyfood/model/DeliveryMan.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/DeliveryMan.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/DeliveryMan.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,10 +2,17 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import mk.ukim.finki.easyfood.model.enumerations.ROLE;
 
 @Entity
 @Table(name = "delivery_man")
 @PrimaryKeyJoinColumn(name = "user_id")
+@Data
+@NoArgsConstructor
 public class DeliveryMan extends AppUser {
-
+    public DeliveryMan(String email, String password, String firstName, String lastName, String phone, ROLE role) {
+        super(email, password, firstName, lastName, phone, role);
+    }
 }
 
Index: src/main/java/mk/ukim/finki/easyfood/model/Item.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Item.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/Item.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,4 +2,8 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
 import java.math.BigDecimal;
 import java.util.List;
@@ -7,4 +11,5 @@
 @Entity
 @Table(name = "item")
+@Data
 public class Item {
 
@@ -15,10 +20,14 @@
 
     @Column(name = "image_url", length = 255)
+    @Getter
     private String imageUrl;
 
     @Column(name = "name", nullable = false, length = 100)
+    @Getter
+
     private String name;
 
     @Column(name = "price", nullable = false)
+
     private BigDecimal price;
 
@@ -26,6 +35,52 @@
     private String description;
 
-    // Relationships (e.g., OrderItems, ItemIngredients) can be added later
+    public Item() {
+    }
 
-    // getters and setters
+    public Item(String imageUrl, String name, BigDecimal price, String description) {
+        this.imageUrl = imageUrl;
+        this.name = name;
+        this.price = price;
+        this.description = description;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getImageUrl() {
+        return imageUrl;
+    }
+
+    public void setImageUrl(String imageUrl) {
+        this.imageUrl = imageUrl;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
 }
Index: src/main/java/mk/ukim/finki/easyfood/model/Menu.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Menu.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/Menu.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,8 +2,11 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+
 import java.time.LocalDateTime;
 
 @Entity
 @Table(name = "menu")
+@Data
 public class Menu {
 
Index: src/main/java/mk/ukim/finki/easyfood/model/MenuItem.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/MenuItem.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/MenuItem.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -3,9 +3,15 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
 @Entity
 @Table(name = "menu_item")
 @IdClass(MenuItemId.class)
-public class MenuItem {
+public class MenuItem implements Serializable {
 
     @Id
@@ -19,5 +25,6 @@
     private Item item;
 
-    // getters and setters
+    public Item getItem() {
+        return item;
+    }
 }
-
Index: src/main/java/mk/ukim/finki/easyfood/model/Restaurant.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Restaurant.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/Restaurant.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,4 +2,6 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+
 import java.time.LocalTime;
 import java.util.List;
@@ -7,4 +9,5 @@
 @Entity
 @Table(name = "restaurant")
+@Data
 public class Restaurant {
 
Index: src/main/java/mk/ukim/finki/easyfood/model/RestaurantOwner.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/RestaurantOwner.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/RestaurantOwner.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -3,4 +3,6 @@
 
 import jakarta.persistence.*;
+import lombok.NoArgsConstructor;
+import mk.ukim.finki.easyfood.model.enumerations.ROLE;
 
 import java.util.List;
@@ -9,4 +11,5 @@
 @Table(name = "restaurant_owner")
 @PrimaryKeyJoinColumn(name = "user_id")
+@NoArgsConstructor
 public class RestaurantOwner extends AppUser {
 
@@ -20,4 +23,8 @@
     private List<Restaurant> restaurants;
     // getters and setters
+
+    public RestaurantOwner(String email, String password, String firstName, String lastName, String phone, ROLE role) {
+        super(email, password, firstName, lastName, phone, role);
+    }
 }
 
Index: src/main/java/mk/ukim/finki/easyfood/model/ShoppingCart.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/ShoppingCart.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/model/ShoppingCart.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -12,8 +12,7 @@
     private Long id;
 
-    @ManyToOne
-    @JoinColumn(name = "user_id", nullable = false)
-    private AppUser user;
+    @OneToOne
+    @JoinColumn(name = "customer_id") // foreign key column
+    private Customer customer;
 
-    // getters and setters
 }
Index: src/main/java/mk/ukim/finki/easyfood/model/enumerations/ROLE.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/enumerations/ROLE.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/model/enumerations/ROLE.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,7 @@
+package mk.ukim.finki.easyfood.model.enumerations;
+
+public enum ROLE {
+    CUSTOMER,
+    DELIVERY_MAN,
+    RESTAURANT_OWNER
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/exceptions/CategoryNotFoundException.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/exceptions/CategoryNotFoundException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/model/exceptions/CategoryNotFoundException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,11 @@
+package mk.ukim.finki.easyfood.model.exceptions;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.NOT_FOUND)
+public class CategoryNotFoundException extends RuntimeException {
+    public CategoryNotFoundException(Long categoryId) {
+        super(String.format("Category with id %d does not exist.", categoryId));
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/exceptions/InvalidArgumentsException.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/exceptions/InvalidArgumentsException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/model/exceptions/InvalidArgumentsException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,8 @@
+package mk.ukim.finki.easyfood.model.exceptions;
+
+public class InvalidArgumentsException extends RuntimeException {
+    public InvalidArgumentsException() {
+        super("Invalid arguments exception");
+    }
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/exceptions/InvalidUserCredentialsException.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/exceptions/InvalidUserCredentialsException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/model/exceptions/InvalidUserCredentialsException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,8 @@
+package mk.ukim.finki.easyfood.model.exceptions;
+
+public class InvalidUserCredentialsException extends RuntimeException {
+    public InvalidUserCredentialsException() {
+        super("Invalid user credentials exception");
+    }
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/exceptions/PasswordsDoNotMatchException.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/exceptions/PasswordsDoNotMatchException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/model/exceptions/PasswordsDoNotMatchException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,8 @@
+package mk.ukim.finki.easyfood.model.exceptions;
+
+public class PasswordsDoNotMatchException extends RuntimeException {
+    public PasswordsDoNotMatchException() {
+        super("Passwords do not match exception");
+    }
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/exceptions/RestaurantNotFoundException.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/exceptions/RestaurantNotFoundException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/model/exceptions/RestaurantNotFoundException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,12 @@
+package mk.ukim.finki.easyfood.model.exceptions;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.NOT_FOUND)
+public class RestaurantNotFoundException extends RuntimeException {
+    public RestaurantNotFoundException(Long restaurantId) {
+        super(String.format("Restaurant with id %d does not exist.", restaurantId));
+    }
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/exceptions/UsernameAlreadyExistsException.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/exceptions/UsernameAlreadyExistsException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/model/exceptions/UsernameAlreadyExistsException.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,12 @@
+package mk.ukim.finki.easyfood.model.exceptions;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(HttpStatus.PRECONDITION_FAILED)
+public class UsernameAlreadyExistsException extends RuntimeException {
+    public UsernameAlreadyExistsException(String username) {
+        super(String.format("User with username: %s already exists", username));
+    }
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/repository/AddressRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/AddressRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/AddressRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface AddressRepository extends JpaRepository<Address, Integer> {
+public interface AddressRepository extends JpaRepository<Address, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/AdministratorRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/AdministratorRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/AdministratorRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface AdministratorRepository extends JpaRepository<Administrator,Integer> {
+public interface AdministratorRepository extends JpaRepository<Administrator, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/AppUserRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/AppUserRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/AppUserRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -5,5 +5,9 @@
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
-public interface AppUserRepository extends JpaRepository<AppUser,Integer> {
+public interface AppUserRepository extends JpaRepository<AppUser, Long> {
+    Optional<AppUser> findByEmail(String email);
+
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/CartItemsRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/CartItemsRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/CartItemsRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -7,4 +7,4 @@
 
 @Repository
-public interface CartItemsRepository extends JpaRepository<CartItems, Integer> {
+public interface CartItemsRepository extends JpaRepository<CartItems, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/CategoryRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/CategoryRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/CategoryRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface CategoryRepository extends JpaRepository<Category,Integer> {
+public interface CategoryRepository extends JpaRepository<Category, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/CostsRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/CostsRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/CostsRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface CostsRepository extends JpaRepository<Costs, Integer> {
+public interface CostsRepository extends JpaRepository<Costs, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/CustomerRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/CustomerRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/CustomerRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface CustomerRepository extends JpaRepository<Customer, Integer> {
+public interface CustomerRepository extends JpaRepository<Customer, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/DeliveryAssignmentRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/DeliveryAssignmentRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/DeliveryAssignmentRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -7,4 +7,4 @@
 
 @Repository
-public interface DeliveryAssignmentRepository extends JpaRepository<DeliveryAssignment, Integer> {
+public interface DeliveryAssignmentRepository extends JpaRepository<DeliveryAssignment, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/DeliveryFirmRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/DeliveryFirmRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/DeliveryFirmRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface DeliveryFirmRepository extends JpaRepository<DeliveryFirm, Integer> {
+public interface DeliveryFirmRepository extends JpaRepository<DeliveryFirm, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/DeliveryManRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/DeliveryManRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/DeliveryManRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface DeliveryManRepository extends JpaRepository<DeliveryMan, Integer> {
+public interface DeliveryManRepository extends JpaRepository<DeliveryMan, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/EarningsRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/EarningsRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/EarningsRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface EarningsRepository extends JpaRepository<Earnings, Integer> {
+public interface EarningsRepository extends JpaRepository<Earnings, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/IngredientRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/IngredientRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/IngredientRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface IngredientRepository extends JpaRepository<Ingredient, Integer> {
+public interface IngredientRepository extends JpaRepository<Ingredient, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/ItemRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/ItemRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/ItemRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -5,5 +5,11 @@
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+import java.util.Optional;
+
 @Repository
-public interface ItemRepository extends JpaRepository<Item, Integer> {
+public interface ItemRepository extends JpaRepository<Item, Long> {
+    Optional<Item> findByName(String name);
+
+    List<Item> findAllByIdIn(List<Long> ids);
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/MenuItemRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/MenuItemRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/repository/MenuItemRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,13 @@
+package mk.ukim.finki.easyfood.repository;
+
+import mk.ukim.finki.easyfood.model.Menu;
+import mk.ukim.finki.easyfood.model.MenuItem;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface MenuItemRepository extends JpaRepository<MenuItem, Long> {
+    List<MenuItem> findByMenu(Menu menu);
+}
Index: src/main/java/mk/ukim/finki/easyfood/repository/MenuRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/MenuRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/MenuRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,8 +2,10 @@
 
 import mk.ukim.finki.easyfood.model.Menu;
+import mk.ukim.finki.easyfood.model.Restaurant;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface MenuRepository extends JpaRepository<Menu, Integer> {
+public interface MenuRepository extends JpaRepository<Menu, Long> {
+    Menu findByRestaurant(Restaurant restaurant);
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/OrderItemsRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/OrderItemsRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/OrderItemsRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface OrderItemsRepository extends JpaRepository<OrderItems, Integer> {
+public interface OrderItemsRepository extends JpaRepository<OrderItems, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/OrderRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/OrderRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/OrderRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface OrderRepository extends JpaRepository<Order, Integer> {
+public interface OrderRepository extends JpaRepository<Order, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/RestaurantOwnerRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/RestaurantOwnerRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/RestaurantOwnerRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface RestaurantOwnerRepository extends JpaRepository<RestaurantOwner, Integer> {
+public interface RestaurantOwnerRepository extends JpaRepository<RestaurantOwner, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/RestaurantRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/RestaurantRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/RestaurantRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface RestaurantRepository extends JpaRepository<Restaurant, Integer> {
+public interface RestaurantRepository extends JpaRepository<Restaurant, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/ShoppingCartRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/ShoppingCartRepository.java	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/java/mk/ukim/finki/easyfood/repository/ShoppingCartRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -6,4 +6,4 @@
 
 @Repository
-public interface ShoppingCartRepository extends JpaRepository<ShoppingCart, Integer> {
+public interface ShoppingCartRepository extends JpaRepository<ShoppingCart, Long> {
 }
Index: src/main/java/mk/ukim/finki/easyfood/repository/UserRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/repository/UserRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/repository/UserRepository.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,11 @@
+package mk.ukim.finki.easyfood.repository;
+
+import mk.ukim.finki.easyfood.model.AppUser;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface UserRepository extends JpaSpecificationRepository<AppUser, Long> {
+    Optional<AppUser> findByEmailAndPassword(String email, String password);
+}
Index: src/main/java/mk/ukim/finki/easyfood/service/CategoryService.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/service/CategoryService.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/service/CategoryService.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,24 @@
+package mk.ukim.finki.easyfood.service;
+
+
+import mk.ukim.finki.easyfood.model.Category;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface CategoryService {
+    List<Category> listCategories();
+
+    Optional<Category> create(String name, String description);
+
+    Optional<Category> update(Long id, String name, String description);
+
+    void delete(String name);
+
+    void deleteById(Long id);
+
+    List<Category> searchCategories(String text);
+
+    Optional<Category> findById(Long id);
+
+}
Index: src/main/java/mk/ukim/finki/easyfood/service/ItemService.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/service/ItemService.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/service/ItemService.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,14 @@
+package mk.ukim.finki.easyfood.service;
+
+import mk.ukim.finki.easyfood.model.Item;
+import org.springframework.data.domain.Page;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Optional;
+
+public interface ItemService {
+    List<Item> findAll();
+    List<Item> findRecommendedItems();
+    List<Item> findItemsByRestaurantId(Long restaurantId);
+}
Index: src/main/java/mk/ukim/finki/easyfood/service/UserService.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/service/UserService.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/service/UserService.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,8 @@
+package mk.ukim.finki.easyfood.service;
+
+import mk.ukim.finki.easyfood.model.AppUser;
+
+public interface UserService {
+    AppUser register(String fullName, String email, String phoneNumber, String password, String repeatPassword);
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/service/impl/CategoryServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/service/impl/CategoryServiceImpl.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/service/impl/CategoryServiceImpl.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,55 @@
+package mk.ukim.finki.easyfood.service.impl;
+
+import mk.ukim.finki.easyfood.model.Category;
+import mk.ukim.finki.easyfood.repository.CategoryRepository;
+import mk.ukim.finki.easyfood.service.CategoryService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class CategoryServiceImpl implements CategoryService {
+
+    private final CategoryRepository categoryRepository;
+
+    public CategoryServiceImpl(CategoryRepository categoryRepository) {
+        this.categoryRepository = categoryRepository;
+    }
+
+
+    @Override
+    public List<Category> listCategories() {
+        return categoryRepository.findAll();
+    }
+
+    @Override
+    public Optional<Category> create(String name, String description) {
+        return Optional.empty();
+    }
+
+    @Override
+    public Optional<Category> update(Long id, String name, String description) {
+        return Optional.empty();
+    }
+
+    @Override
+    public void delete(String name) {
+
+    }
+
+    @Override
+    public void deleteById(Long id) {
+
+    }
+
+    @Override
+    public List<Category> searchCategories(String text) {
+        return List.of();
+    }
+
+    @Override
+    public Optional<Category> findById(Long id) {
+        return Optional.empty();
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/service/impl/ItemServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/service/impl/ItemServiceImpl.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/service/impl/ItemServiceImpl.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,57 @@
+package mk.ukim.finki.easyfood.service.impl;
+
+import mk.ukim.finki.easyfood.model.*;
+
+import mk.ukim.finki.easyfood.repository.ItemRepository;
+import mk.ukim.finki.easyfood.repository.MenuItemRepository;
+import mk.ukim.finki.easyfood.repository.MenuRepository;
+import mk.ukim.finki.easyfood.repository.RestaurantRepository;
+import mk.ukim.finki.easyfood.service.ItemService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class ItemServiceImpl implements ItemService {
+
+    private final ItemRepository itemRepository;
+    private final MenuItemRepository menuItemRepository;
+    private final MenuRepository menuRepository;
+    private final RestaurantRepository restaurantRepository;
+
+    public ItemServiceImpl(ItemRepository itemRepository,
+                           MenuItemRepository menuItemRepository,
+                           MenuRepository menuRepository,
+                           RestaurantRepository restaurantRepository) {
+        this.itemRepository = itemRepository;
+        this.menuItemRepository = menuItemRepository;
+        this.menuRepository = menuRepository;
+        this.restaurantRepository = restaurantRepository;
+    }
+
+    @Override
+    public List<Item> findAll() {
+        return itemRepository.findAll();
+    }
+
+    @Override
+    public List<Item> findRecommendedItems() {
+        return itemRepository.findAll().stream().limit(5).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<Item> findItemsByRestaurantId(Long restaurantId) {
+        Restaurant restaurant = restaurantRepository.findById(restaurantId)
+                .orElseThrow(() -> new RuntimeException("Restaurant not found"));
+
+        Menu menu = menuRepository.findByRestaurant(restaurant);
+        if (menu == null) return List.of();
+
+        List<MenuItem> menuItems = menuItemRepository.findByMenu(menu);
+        return menuItems.stream()
+                .map(MenuItem::getItem)
+                .collect(Collectors.toList());
+    }
+
+}
Index: src/main/java/mk/ukim/finki/easyfood/service/impl/UserServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/service/impl/UserServiceImpl.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/service/impl/UserServiceImpl.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,52 @@
+package mk.ukim.finki.easyfood.service.impl;
+
+import mk.ukim.finki.easyfood.model.AppUser;
+import mk.ukim.finki.easyfood.model.Customer;
+import mk.ukim.finki.easyfood.model.enumerations.ROLE;
+import mk.ukim.finki.easyfood.model.exceptions.InvalidArgumentsException;
+import mk.ukim.finki.easyfood.model.exceptions.PasswordsDoNotMatchException;
+import mk.ukim.finki.easyfood.model.exceptions.UsernameAlreadyExistsException;
+import mk.ukim.finki.easyfood.repository.AppUserRepository;
+import mk.ukim.finki.easyfood.service.UserService;
+import org.springframework.stereotype.Service;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+@Service
+public class UserServiceImpl implements UserService {
+
+    private final AppUserRepository userRepository;
+    private final PasswordEncoder passwordEncoder;
+
+    public UserServiceImpl(AppUserRepository appUserRepository, PasswordEncoder passwordEncoder) {
+        this.userRepository = appUserRepository;
+        this.passwordEncoder = passwordEncoder;
+    }
+
+
+    @Override
+    public AppUser register(String fullName, String email, String phoneNumber, String password, String repeatPassword) {
+        if (fullName == null || fullName.isEmpty() ||
+                email == null || email.isEmpty() ||
+                phoneNumber == null || phoneNumber.isEmpty() ||
+                password == null || password.isEmpty()) {
+            throw new InvalidArgumentsException();
+        }
+
+        if (!password.equals(repeatPassword)) {
+            throw new PasswordsDoNotMatchException();
+        }
+
+        if (this.userRepository.findByEmail(email).isPresent()) {
+            throw new UsernameAlreadyExistsException(email);
+        }
+
+
+        String[] nameParts = fullName.trim().split("\\s+", 2);
+        String firstName = nameParts[0];
+        String lastName = nameParts.length > 1 ? nameParts[1] : "";
+
+        Customer customer = new Customer(email, passwordEncoder.encode(password), firstName, lastName, phoneNumber, ROLE.CUSTOMER);
+
+        return userRepository.save(customer);
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/web/controller/HomeController.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/web/controller/HomeController.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/web/controller/HomeController.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,45 @@
+package mk.ukim.finki.easyfood.web.controller;
+
+import mk.ukim.finki.easyfood.model.Category;
+import mk.ukim.finki.easyfood.model.Item;
+import mk.ukim.finki.easyfood.service.CategoryService;
+import mk.ukim.finki.easyfood.service.ItemService;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.List;
+
+@Controller
+@RequestMapping(path = {"/", "", "/home"})
+public class HomeController {
+
+    private final CategoryService categoryService;
+    private final ItemService itemService;
+
+    public HomeController(CategoryService categoryService, ItemService itemService) {
+        this.categoryService = categoryService;
+        this.itemService = itemService;
+    }
+
+//    @GetMapping
+//    public String getHomePage(Model model) {
+//        model.addAttribute("bodyContent", "home");
+//        return "main_pg";
+//    }
+
+    @GetMapping("/")
+    public String getHomePage(Model model) {
+        List<Category> categories = categoryService.listCategories();
+        List<Item> items = itemService.findAll();
+        List<Item> recommendedItems = itemService.findRecommendedItems();
+        model.addAttribute("categories", categories);
+        model.addAttribute("items", items);
+        model.addAttribute("recommendedItems", recommendedItems);
+        return "main_pg";
+    }
+
+
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/web/controller/RegisterController.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/web/controller/RegisterController.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
+++ src/main/java/mk/ukim/finki/easyfood/web/controller/RegisterController.java	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -0,0 +1,44 @@
+package mk.ukim.finki.easyfood.web.controller;
+
+import mk.ukim.finki.easyfood.service.UserService;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+
+@Controller
+@RequestMapping("/register")
+public class RegisterController {
+    private final UserService userService;
+
+    public RegisterController(UserService userService) {
+        this.userService = userService;
+    }
+
+    @GetMapping
+    public String getRegisterPage() {
+        return "registe_customer";
+    }
+
+    @PostMapping
+    public String register(@RequestParam String fullName,
+                           @RequestParam String email,
+                           @RequestParam String phoneNumber,
+                           @RequestParam String password,
+                           @RequestParam String repeatedPassword) {
+        try {
+            this.userService.register(fullName, email, phoneNumber, password, repeatedPassword);
+            return "redirect:/home";
+        } catch (RuntimeException ex) {
+            String errorMsg = URLEncoder.encode(ex.getMessage(), StandardCharsets.UTF_8);
+            return "redirect:/register?error=" + errorMsg;
+        }
+    }
+}
+
+
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/resources/application.properties	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -5,5 +5,2 @@
 spring.datasource.driver-class-name=org.postgresql.Driver
 
-# Optional but recommended
-spring.jpa.hibernate.ddl-auto=update
-spring.jpa.show-sql=true
Index: src/main/resources/templates/main_pg.html
===================================================================
--- src/main/resources/templates/main_pg.html	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/resources/templates/main_pg.html	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -16,4 +16,5 @@
             scroll-behavior: smooth;
         }
+
         #cuisine .card {
             flex: 0 0 auto;
@@ -24,28 +25,33 @@
             transition: transform 0.2s;
         }
+
         #cuisine .card:hover {
             transform: scale(1.05);
         }
 
-        /* --- Custom Scrollbar --- */
+        /* Scrollbar */
         #cuisine::-webkit-scrollbar {
-            height: 6px; /* thin */
+            height: 6px;
         }
+
         #cuisine::-webkit-scrollbar-track {
             background: #f1f1f1;
             border-radius: 10px;
         }
+
         #cuisine::-webkit-scrollbar-thumb {
-            background: #f0ad4e; /* Bootstrap warning color */
+            background: #f0ad4e;
             border-radius: 10px;
         }
+
         #cuisine::-webkit-scrollbar-thumb:hover {
             background: #d9902e;
         }
-        /* Firefox */
+
         #cuisine {
             scrollbar-width: thin;
             scrollbar-color: #f0ad4e #f1f1f1;
         }
+
         .recommended-scroll {
             display: flex;
@@ -55,14 +61,17 @@
             scroll-behavior: smooth;
         }
+
         .recommended-scroll .card {
             flex: 0 0 auto;
             width: 14rem;
             border-radius: 12px;
-            box-shadow: 0 2px 8px rgba(0,0,0,0.1);
+            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
             transition: transform 0.2s;
         }
+
         .recommended-scroll .card:hover {
             transform: scale(1.05);
         }
+
         .recommended-scroll img {
             height: 140px;
@@ -72,64 +81,25 @@
         }
 
-        /* --- Scrollbar theme --- */
-        .recommended-scroll::-webkit-scrollbar {
-            height: 6px;
-        }
-        .recommended-scroll::-webkit-scrollbar-track {
-            background: #f1f1f1;
-            border-radius: 10px;
-        }
-        .recommended-scroll::-webkit-scrollbar-thumb {
-            background: #f0ad4e;
-            border-radius: 10px;
-        }
-        .recommended-scroll::-webkit-scrollbar-thumb:hover {
-            background: #d9902e;
-        }
-        .recommended-scroll {
-            scrollbar-width: thin;
-            scrollbar-color: #f0ad4e #f1f1f1;
-        }
-        #favourites img {
-            object-fit: cover;
-        }
-        #favourites .card {
-            margin-bottom: 1rem; /* spacing between cards */
-        }
     </style>
 </head>
 <body class="bg-light">
 
-<!-- Navbar with search -->
-<!-- Navbar with search -->
+<!-- Navbar -->
 <nav class="navbar bg-body-tertiary shadow-sm">
     <div class="container-fluid">
-        <!-- Logo -->
         <a class="navbar-brand d-flex align-items-center" href="#">
-            <img src="media/easyfood.png" alt="Logo" height="40" class="d-inline-block align-text-top">
+            <img src="/images/logo.JPG" alt="Logo" height="90" class="d-inline-block align-text-top">
         </a>
-
-        <!-- Search bar inside navbar -->
         <form class="d-flex mx-auto w-50" role="search">
             <input class="form-control me-2" type="search" placeholder="Search for food..." aria-label="Search">
             <button class="btn btn-warning" type="submit">Search</button>
         </form>
-
-        <!-- Icons (Cart + Profile) -->
         <div class="d-flex align-items-center gap-2">
-            <!-- Shopping Cart -->
             <a href="cart.html" class="btn btn-outline-secondary rounded-circle p-2 position-relative">
-                <img src="https://cdn-icons-png.flaticon.com/512/1170/1170678.png"
-                     alt="Cart" width="22" height="22">
-                <!-- Optional badge for cart count -->
-                <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-warning text-dark">
-                    2
-                </span>
+                <img src="https://cdn-icons-png.flaticon.com/512/1170/1170678.png" alt="Cart" width="22" height="22">
+                <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-warning text-dark">2</span>
             </a>
-
-            <!-- Profile -->
             <a href="profile.html" class="btn btn-outline-secondary rounded-circle p-2">
-                <img src="https://cdn-icons-png.flaticon.com/512/847/847969.png"
-                     alt="Profile" width="22" height="22">
+                <img src="https://cdn-icons-png.flaticon.com/512/847/847969.png" alt="Profile" width="22" height="22">
             </a>
         </div>
@@ -144,101 +114,18 @@
 </div>
 
-<!-- Cuisine Section -->
+<!-- Cuisine Section (Dynamic Categories) -->
 <div id="cuisine" class="container-fluid">
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Fast Food</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Italian</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Asian</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Desserts</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Vegan</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">BBQ</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Seafood</h6></div>
-  <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Fast Food</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Italian</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Asian</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Desserts</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Vegan</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">BBQ</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Seafood</h6></div>
-    <div class="card bg-warning d-flex justify-content-center align-items-center"><h6 class="mb-0">Healthy</h6></div>
+    <div th:each="category : ${categories}" class="card bg-warning d-flex justify-content-center align-items-center">
+        <h6 class="mb-0" th:text="${category.name}">Category Name</h6>
+    </div>
 </div>
 
 <div id="Recommended" class="container-fluid my-4">
     <div class="recommended-scroll">
-        <!-- Card 1 -->
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Burger">
+        <div class="card" th:each="item : ${items}">
+            <img th:src="@{'/images/media/' + ${item.imageUrl}}" class="card-img-top" th:alt="${item.name}">
             <div class="card-body">
-                <h5 class="card-title">Cheese Burger</h5>
-                <p class="card-text text-muted">12.99$</p>
-                <a href="#" class="btn btn-warning w-100">Add to cart</a>
-            </div>
-        </div>
-        <!-- Card 2 -->
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Pizza">
-            <div class="card-body">
-                <h5 class="card-title">Pepperoni Pizza</h5>
-                <p class="card-text text-muted">15.49$</p>
-                <a href="#" class="btn btn-warning w-100">Add to cart</a>
-            </div>
-        </div>
-        <!-- Card 3 -->
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Sushi">
-            <div class="card-body">
-                <h5 class="card-title">Sushi Set</h5>
-                <p class="card-text text-muted">18.00$</p>
-                <a href="#" class="btn btn-warning w-100">Add to cart</a>
-            </div>
-        </div>
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Burger">
-            <div class="card-body">
-                <h5 class="card-title">Cheese Burger</h5>
-                <p class="card-text text-muted">12.99$</p>
-                <a href="#" class="btn btn-warning w-100">Add to cart</a>
-            </div>
-        </div>
-        <!-- Card 2 -->
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Pizza">
-            <div class="card-body">
-                <h5 class="card-title">Pepperoni Pizza</h5>
-                <p class="card-text text-muted">15.49$</p>
-                <a href="#" class="btn btn-warning w-100">Add to cart</a>
-            </div>
-        </div>
-        <!-- Card 3 -->
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Sushi">
-            <div class="card-body">
-                <h5 class="card-title">Sushi Set</h5>
-                <p class="card-text text-muted">18.00$</p>
-                <a href="#" class="btn btn-warning w-100">Add to cart</a>
-            </div>
-        </div>
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Burger">
-            <div class="card-body">
-                <h5 class="card-title">Cheese Burger</h5>
-                <p class="card-text text-muted">12.99$</p>
-                <a href="#" class="btn btn-warning w-100">Add to cart</a>
-            </div>
-        </div>
-        <!-- Card 2 -->
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Pizza">
-            <div class="card-body">
-                <h5 class="card-title">Pepperoni Pizza</h5>
-                <p class="card-text text-muted">15.49$</p>
-                <a href="#" class="btn btn-warning w-100">Add to cart</a>
-            </div>
-        </div>
-        <!-- Card 3 -->
-        <div class="card">
-            <img src="media/burger.png" class="card-img-top" alt="Sushi">
-            <div class="card-body">
-                <h5 class="card-title">Sushi Set</h5>
-                <p class="card-text text-muted">18.00$</p>
+                <h5 class="card-title" th:text="${item.name}">Item Name</h5>
+                <p class="card-text text-muted" th:text="${item.price} + '$'">Price</p>
                 <a href="#" class="btn btn-warning w-100">Add to cart</a>
             </div>
@@ -246,60 +133,14 @@
     </div>
 </div>
-<div id="favourites" class="container-fluid my-4">
-    <h4 class="mb-3">Recommended for you</h4>
 
-    <div class="card shadow-sm border-0 w-100 mb-3">
-        <div class="row g-0">
-            <!-- Image -->
-            <div class="col-md-3 col-4">
-                <img src="media/burger.png"
-                     class="w-100 object-fit-cover rounded-start"
-                     alt="Burger"
-                     style="height:150px;">
-            </div>
 
-            <!-- Content -->
-            <div class="col-md-9 col-8 d-flex flex-column justify-content-between p-3" style="height:150px;">
-                <div>
-                    <h5 class="card-title mb-1">Cheese Burger</h5>
-                    <p class="card-text text-muted fs-6 fw-semibold mb-2">25.85$</p>
-                </div>
-                <button class="btn btn-warning fw-semibold align-self-start">Add to cart</button>
-            </div>
-        </div>
-    </div>
-
-    <div class="card shadow-sm border-0 w-100 mb-3">
-        <div class="row g-0">
-            <div class="col-md-3 col-4">
-                <img src="media/pizza.png"
-                     class="w-100 object-fit-cover rounded-start"
-                     alt="Pizza"
-                     style="height:150px;">
-            </div>
-            <div class="col-md-9 col-8 d-flex flex-column justify-content-between p-3" style="height:150px;">
-                <div>
-                    <h5 class="card-title mb-1">Pepperoni Pizza</h5>
-                    <p class="card-text text-muted fs-6 fw-semibold mb-2">15.49$</p>
-                </div>
-                <button class="btn btn-warning fw-semibold align-self-start">Add to cart</button>
-            </div>
-        </div>
-    </div>
-
-    <div class="card shadow-sm border-0 w-100 mb-3">
-        <div class="row g-0">
-            <div class="col-md-3 col-4">
-                <img src="media/sushi.png"
-                     class="w-100 object-fit-cover rounded-start"
-                     alt="Sushi"
-                     style="height:150px;">
-            </div>
-            <div class="col-md-9 col-8 d-flex flex-column justify-content-between p-3" style="height:150px;">
-                <div>
-                    <h5 class="card-title mb-1">Sushi Set</h5>
-                    <p class="card-text text-muted fs-6 fw-semibold mb-2">18.00$</p>
-                </div>
-                <button class="btn btn-warning fw-semibold align-self-start">Add to cart</button>
+<div id="RecommendedItems" class="container-fluid my-4">
+    <div class="recommended-scroll-items">
+        <div class="card" th:each="item : ${recommendedItems}">
+            <img th:src="@{'/images/media/' + ${item.imageUrl}}" class="card-img-top" th:alt="${item.name}">
+            <div class="card-body">
+                <h5 class="card-title" th:text="${item.name}">Item Name</h5>
+                <p class="card-text text-muted" th:text="${item.price} + '$'">Price</p>
+                <a href="#" class="btn btn-warning w-100">Add to cart</a>
             </div>
         </div>
@@ -307,4 +148,5 @@
 </div>
 
+
 </body>
 </html>
Index: src/main/resources/templates/registe_customer.html
===================================================================
--- src/main/resources/templates/registe_customer.html	(revision 7ff4aa88251db55cd755f14d704a5bf103f4c942)
+++ src/main/resources/templates/registe_customer.html	(revision 6cf5acf33a585687d4fdc55a66add0c83ed0326f)
@@ -2,8 +2,8 @@
 <html lang="en">
 <head>
-  <meta charset="UTF-8">
-  <title>EasyFood - Register</title>
-  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
-  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
+    <meta charset="UTF-8">
+    <title>EasyFood - Register</title>
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
 </head>
 <body class="bg-light">
@@ -11,77 +11,76 @@
 <!-- Navbar -->
 <nav class="navbar bg-body-tertiary shadow-sm">
-  <div class="container-fluid">
-    <!-- Logo -->
-    <a class="navbar-brand d-flex align-items-center" href="index.html">
-      <img src="media/easyfood.png" alt="Logo" height="40">
-    </a>
+    <div class="container-fluid">
+        <!-- Logo -->
+        <a class="navbar-brand d-flex align-items-center" href="index.html">
+            <img src="media/easyfood.png" alt="Logo" height="40">
+        </a>
 
 
+        <!-- Profile Icon -->
+        <div class="d-flex align-items-center">
 
-    <!-- Profile Icon -->
-    <div class="d-flex align-items-center">
-
+        </div>
     </div>
-  </div>
 </nav>
 <div class=" mt-5 d-flex justify-content-center">
-  <div class="bg-white p-2 rounded-3 ">
-    <a class="text-warning">register as customer</a>/
-    <a href="">register as restaurant owner</a>
-  </div>
 </div>
 
 <!-- Profile Settings -->
 <div class="container my-5">
-  <div class="row justify-content-center">
-    <div class="col-md-8 col-lg-6">
-      <div class="card shadow-sm border-0 rounded-3">
-        <div class="card-body p-4">
-          <!-- Title -->
-          <h3 class="mb-4 text-center">Register as customer</h3>
+    <div class="row justify-content-center">
+        <div class="col-md-8 col-lg-6">
+            <div class="card shadow-sm border-0 rounded-3">
+                <div class="card-body p-4">
+                    <!-- Title -->
+                    <h3 class="mb-4 text-center">Register as customer</h3>
 
-          <!-- Profile Picture -->
-          <div class="text-center mb-4">
-            <img src="https://cdn-icons-png.flaticon.com/512/847/847969.png"
-                 class="rounded-circle border shadow-sm"
-                 alt="Profile" width="100" height="100">
+                    <!-- Profile Picture -->
+                    <div class="text-center mb-4">
+                        <img src="https://cdn-icons-png.flaticon.com/512/847/847969.png"
+                             class="rounded-circle border shadow-sm"
+                             alt="Profile" width="100" height="100">
 
-          </div>
+                    </div>
 
-          <!-- Form -->
-          <form>
-            <div class="mb-3">
-              <label class="form-label fw-semibold">Full Name</label>
-              <input type="text" class="form-control" value="John Doe">
+                    <div xmlns:th="http://www.thymeleaf.org">
+                        <!-- Form -->
+                        <form class="form-signin mt-xl-5" method="post" action="/register">
+                            <div class="mb-3">
+                                <label class="form-label fw-semibold">Full Name</label>
+                                <input type="text" name="fullName" class="form-control" value="">
+                            </div>
+
+                            <div class="mb-3">
+                                <label class="form-label fw-semibold">Email</label>
+                                <input type="email" name="email" class="form-control" value="">
+                            </div>
+
+                            <div class="mb-3">
+                                <label class="form-label fw-semibold">Phone Number</label>
+                                <input type="tel" name="phoneNumber" class="form-control" value="">
+                            </div>
+
+                            <div class="mb-3">
+                                <label class="form-label fw-semibold">Password</label>
+                                <input type="password" name="password" class="form-control" placeholder="">
+                            </div>
+
+                            <div class="mb-3">
+                                <label class="form-label fw-semibold">Repeat Password</label>
+                                <input type="password" name="repeatedPassword" class="form-control" placeholder="">
+                            </div>
+
+                            <div class="d-flex justify-content-center">
+                                <button type="submit" class="btn btn-warning fw-semibold">Register</button>
+                            </div>
+                        </form>
+
+                    </div>
+
+                </div>
             </div>
-
-            <div class="mb-3">
-              <label class="form-label fw-semibold">Email</label>
-              <input type="email" class="form-control" value="john@example.com">
-            </div>
-
-            <div class="mb-3">
-              <label class="form-label fw-semibold">Phone Number</label>
-              <input type="tel" class="form-control" value="+1 234 567 890">
-            </div>
-
-            <div class="mb-3">
-              <label class="form-label fw-semibold">Password</label>
-              <input type="password" class="form-control" placeholder="********">
-            </div>
-            <div class="mb-3">
-              <label class="form-label fw-semibold">Repeat Password</label>
-              <input type="password" class="form-control" placeholder="********">
-            </div>
-
-            <div class="d-flex justify-content-center">
-              <button type="submit" class="btn btn-warning fw-semibold">register</button>
-            </div>
-          </form>
-
         </div>
-      </div>
     </div>
-  </div>
 </div>
 
