Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Adopter.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Adopter.java	(revision f0232fb99a3ac7792c71956fb500c0a49afd9ea6)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Adopter.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -41,9 +41,9 @@
 
     @Column(name = "verified_by_employee")
-    private int verifiedByEmployeeId;
+    private Integer verifiedByEmployeeId;
 
     public Adopter(LocalDate dateCreated, String name, String email, String password, String telephone,
                    FreeTime freeTime, Funds funds, boolean hasOtherPets, boolean hasKids, Housing housing,
-                   PhysicalActivity physicalActivity, boolean willFoster, boolean verified, int verifiedByEmployeeId) {
+                   PhysicalActivity physicalActivity, boolean willFoster, boolean verified) {
         super(dateCreated, name, email, password, telephone);
         this.freeTime = freeTime;
@@ -55,5 +55,4 @@
         this.willFoster = willFoster;
         this.verified = verified;
-        this.verifiedByEmployeeId = verifiedByEmployeeId;
     }
 
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Employee.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Employee.java	(revision f0232fb99a3ac7792c71956fb500c0a49afd9ea6)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Employee.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -16,5 +16,5 @@
 
     @Column(name = "id_shelter", nullable = false)
-    private int shelterId;
+    private Integer shelterId;
 
     @Column(name = "is_verified", nullable = false)
@@ -22,13 +22,12 @@
 
     @Column(name = "verified_by_admin")
-    private int verifiedByAdminId;
+    private Integer verifiedByAdminId;
 
     public Employee(LocalDate dateCreated, String name, String email, String password, String telephone,
-                    String position, int shelterId, boolean verified, int verifiedByAdminId) {
+                    String position, int shelterId, boolean verified) {
         super(dateCreated, name, email, password, telephone);
         this.position = position;
         this.shelterId = shelterId;
         this.verified = verified;
-        this.verifiedByAdminId = verifiedByAdminId;
     }
 
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Shelter.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Shelter.java	(revision f0232fb99a3ac7792c71956fb500c0a49afd9ea6)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Shelter.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -21,5 +21,5 @@
 
     @Column(name = "id_organisation")
-    private int organisationId;
+    private Integer organisationId;
 
     @Column(name = "name_shelter", nullable = false, length = 100)
@@ -29,5 +29,5 @@
     private String email;
 
-    public Shelter(String address, String telephone, int organisationId, String name, String email) {
+    public Shelter(String address, String telephone, Integer organisationId, String name, String email) {
         this.address = address;
         this.telephone = telephone;
Index: Prototype Application/Paw5/src/main/java/finki/paw5/repository/AdopterRepository.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/repository/AdopterRepository.java	(revision f0232fb99a3ac7792c71956fb500c0a49afd9ea6)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/repository/AdopterRepository.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -5,4 +5,5 @@
 import org.springframework.stereotype.Repository;
 
+
 @Repository
 public interface AdopterRepository extends JpaRepository<Adopter, Integer> {
Index: Prototype Application/Paw5/src/main/java/finki/paw5/repository/EmployeeRepository.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/repository/EmployeeRepository.java	(revision f0232fb99a3ac7792c71956fb500c0a49afd9ea6)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/repository/EmployeeRepository.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -2,6 +2,9 @@
 
 import finki.paw5.model.entities.Employee;
+import finki.paw5.model.entities.Shelter;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
 
 @Repository
Index: Prototype Application/Paw5/src/main/java/finki/paw5/repository/ShelterRepository.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/repository/ShelterRepository.java	(revision f0232fb99a3ac7792c71956fb500c0a49afd9ea6)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/repository/ShelterRepository.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -5,4 +5,6 @@
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface ShelterRepository extends JpaRepository<Shelter, Integer> {
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/AuthService.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/AuthService.java	(revision f0232fb99a3ac7792c71956fb500c0a49afd9ea6)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/AuthService.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -4,11 +4,13 @@
 import finki.paw5.model.entities.Employee;
 import finki.paw5.model.entities.User;
-
-import java.util.Optional;
+import finki.paw5.model.enumerations.FreeTime;
+import finki.paw5.model.enumerations.Funds;
+import finki.paw5.model.enumerations.Housing;
+import finki.paw5.model.enumerations.PhysicalActivity;
 
 public interface AuthService {
     User login (String email, String password);
-//    Adopter registerAdopter(String password, String repeatPassword, String name, String email, String telephone);
-//    Employee registerEmployee(String password, String repeatPassword, String name, String email, String telephone);
+    Adopter registerAdopter(String name, String email, String password, String telephone, FreeTime freeTime, Funds funds, boolean hasOtherPets, boolean hasKids, Housing housing, PhysicalActivity physicalActivity, boolean willFoster);
+    Employee registerEmployee(String name, String email, String password, String telephone, String position, Integer shelterId);
 
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/OrganisationService.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/OrganisationService.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/OrganisationService.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -0,0 +1,9 @@
+package finki.paw5.service;
+
+import finki.paw5.model.entities.Organisation;
+
+import java.util.List;
+
+public interface OrganisationService {
+    List<Organisation> findAll();
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/ShelterService.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/ShelterService.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/ShelterService.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -0,0 +1,9 @@
+package finki.paw5.service;
+
+import finki.paw5.model.entities.Shelter;
+
+import java.util.List;
+
+public interface ShelterService {
+    List<Shelter> listShelters();
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AuthServiceImpl.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AuthServiceImpl.java	(revision f0232fb99a3ac7792c71956fb500c0a49afd9ea6)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AuthServiceImpl.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -1,6 +1,13 @@
 package finki.paw5.service.implementation;
 
+import finki.paw5.model.entities.Adopter;
+import finki.paw5.model.entities.Employee;
 import finki.paw5.model.entities.User;
-import finki.paw5.model.exceptions.NonExistingArgumentsException;
+import finki.paw5.model.enumerations.FreeTime;
+import finki.paw5.model.enumerations.Funds;
+import finki.paw5.model.enumerations.Housing;
+import finki.paw5.model.enumerations.PhysicalActivity;
+import finki.paw5.repository.AdopterRepository;
+import finki.paw5.repository.EmployeeRepository;
 import finki.paw5.repository.UserRepository;
 import finki.paw5.service.AuthService;
@@ -8,6 +15,4 @@
 
 import java.time.LocalDate;
-import java.util.Objects;
-import java.util.Optional;
 
 @Service
@@ -15,7 +20,11 @@
 
     private final UserRepository userRepository;
+    private final AdopterRepository adopterRepository;
+    private final EmployeeRepository employeeRepository;
 
-    public AuthServiceImpl(UserRepository userRepository) {
+    public AuthServiceImpl(UserRepository userRepository, AdopterRepository adopterRepository, EmployeeRepository employeeRepository) {
         this.userRepository = userRepository;
+        this.adopterRepository = adopterRepository;
+        this.employeeRepository = employeeRepository;
     }
 
@@ -29,19 +38,16 @@
     }
 
-    /*
+
     @Override
-    public Adopter registerAdopter(String password, String repeatPassword, String name, String email, String telephone) {
-        if (email == null || email.isEmpty() || password == null || password.isEmpty()) {
-            //throw new Exception();
-        }
-        if (!password.equals(repeatPassword)) {
-            //throw new Exception();
-        }
-        if (this.userRepository.findByEmail(email)!=null) {
-            //throw new Exception("Username exists:"+email);
-        }
-        User user = new User(LocalDate.now(), name, email, password, telephone);
-        return userRepository.save(user);
+    public Adopter registerAdopter(String name, String email, String password, String telephone, FreeTime freeTime, Funds funds, boolean hasOtherPets, boolean hasKids, Housing housing, PhysicalActivity physicalActivity, boolean willFoster) {
+        Adopter adopter = new Adopter(LocalDate.now(), name, email, password, telephone,freeTime,funds,hasOtherPets,hasKids,housing,physicalActivity,willFoster,false);
+        return adopterRepository.save(adopter);
     }
-    */
+
+    @Override
+    public Employee registerEmployee(String name, String email, String password, String telephone, String position, Integer shelterId) {
+        Employee employee = new Employee(LocalDate.now(),name, email,password,telephone,position,shelterId,false);
+        return employeeRepository.save(employee);
+    }
+
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/OrganisationServiceImpl.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/OrganisationServiceImpl.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/OrganisationServiceImpl.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -0,0 +1,21 @@
+package finki.paw5.service.implementation;
+
+import finki.paw5.model.entities.Organisation;
+import finki.paw5.repository.OrganisationRepository;
+import finki.paw5.service.OrganisationService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+@Service
+public class OrganisationServiceImpl implements OrganisationService {
+    private final OrganisationRepository organisationRepository;
+
+    public OrganisationServiceImpl(OrganisationRepository organisationRepository) {
+        this.organisationRepository = organisationRepository;
+    }
+
+    @Override
+    public List<Organisation> findAll() {
+        return organisationRepository.findAll();
+    }
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/ShelterServiceImp.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/ShelterServiceImp.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/ShelterServiceImp.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -0,0 +1,23 @@
+package finki.paw5.service.implementation;
+
+import finki.paw5.model.entities.Shelter;
+import finki.paw5.repository.ShelterRepository;
+import finki.paw5.service.ShelterService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ShelterServiceImp implements ShelterService {
+    private final ShelterRepository shelterRepository;
+
+    public ShelterServiceImp(ShelterRepository shelterRepository) {
+        this.shelterRepository = shelterRepository;
+    }
+
+
+    @Override
+    public List<Shelter> listShelters() {
+        return shelterRepository.findAll();
+    }
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/RegisterController.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/RegisterController.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/RegisterController.java	(revision da44aefab446c6f41792dadef297c98e1477752b)
@@ -0,0 +1,78 @@
+package finki.paw5.web.controllers;
+import finki.paw5.model.entities.Adopter;
+import finki.paw5.model.entities.Employee;
+import finki.paw5.model.enumerations.FreeTime;
+import finki.paw5.model.enumerations.Funds;
+import finki.paw5.model.enumerations.Housing;
+import finki.paw5.model.enumerations.PhysicalActivity;
+import finki.paw5.service.AuthService;
+import finki.paw5.service.OrganisationService;
+import finki.paw5.service.ShelterService;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@Controller
+@RequestMapping("/register")
+public class RegisterController {
+
+    private final OrganisationService organisationService;
+    private final ShelterService shelterService;
+    private final AuthService authService;
+
+    public RegisterController(OrganisationService organisationService, ShelterService shelterService, AuthService authService) {
+        this.organisationService = organisationService;
+        this.shelterService = shelterService;
+        this.authService = authService;
+    }
+
+    @GetMapping
+    public String getRegisterPage(Model model) {
+        model.addAttribute("shelters", this.shelterService.listShelters());
+        model.addAttribute("organisations", this.organisationService.findAll());
+        return "register";
+    }
+
+    @PostMapping
+    public String registerUser(@RequestParam String name, @RequestParam String email,
+                               @RequestParam String password, @RequestParam String repeatPassword,
+                               @RequestParam String telephone,@RequestParam String role,
+                               HttpServletRequest request) {
+
+        if(role.equals("adopter") & password.equals(repeatPassword)){
+            String freeTime = request.getParameter("freeTime");
+            String funds = request.getParameter("funds");
+            boolean hasOtherPets = Boolean.parseBoolean(request.getParameter("hasOtherPets"));
+            boolean hasKids = Boolean.parseBoolean(request.getParameter("hasKids"));
+            String housing = request.getParameter("housing");
+            String physicalActivity = request.getParameter("physicalActivity");
+            boolean willFoster = Boolean.parseBoolean(request.getParameter("willFoster"));
+
+            FreeTime ft = FreeTime.valueOf(freeTime);
+            Funds f = Funds.valueOf(funds);
+            Housing h = Housing.valueOf(housing);
+            PhysicalActivity pa = PhysicalActivity.valueOf(physicalActivity);
+
+            Adopter adopterUser = authService.registerAdopter(name, email, password, telephone,ft,f,hasOtherPets,hasKids,h,pa,willFoster);
+
+            request.getSession().setAttribute("user",adopterUser);
+            return "redirect:/home";
+        }
+        else if(role.equals("employee") & password.equals(repeatPassword)){
+            Integer shelter = Integer.valueOf(request.getParameter("shelter"));
+            String position = request.getParameter("position");
+
+            Employee employeeUser = authService.registerEmployee(name, email, password, telephone,position,shelter);
+
+            request.getSession().setAttribute("user",employeeUser);
+            return "redirect:/home";
+        }
+
+        return "redirect:/register";
+    }
+
+}
