Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Admin.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Admin.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Admin.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,4 +3,5 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
@@ -8,13 +9,12 @@
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "admin_table")
 @PrimaryKeyJoinColumn(name = "id_user")
 public class Admin extends User {
 
-    public Admin(LocalDate dateCreated, String name, String email, String password, String telephone) {
+    public Admin(LocalDate dateCreated, String name, String email,
+                 String password, String telephone) {
         super(dateCreated, name, email, password, telephone);
     }
-
-    public Admin() {
-    }
 }
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 b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Adopter.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -7,4 +7,5 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
@@ -13,4 +14,5 @@
 @Entity
 @Table(name = "adopter")
+@RequiredArgsConstructor
 @PrimaryKeyJoinColumn(name = "id_user")
 public class Adopter extends User {
@@ -40,6 +42,7 @@
     private Boolean verified;
 
-    @Column(name = "verified_by_employee")
-    private Integer verifiedByEmployeeId;
+    @ManyToOne
+    @JoinColumn(name = "verified_by_employee")
+    Employee employeeVerificator;
 
     public Adopter(LocalDate dateCreated, String name, String email, String password, String telephone,
@@ -57,18 +60,3 @@
     }
 
-    public Adopter(FreeTime freeTime, Funds funds, boolean hasOtherPets, boolean hasKids, Housing housing,
-                   PhysicalActivity physicalActivity, boolean willFoster, boolean verified, int verifiedByEmployeeId) {
-        this.freeTime = freeTime;
-        this.funds = funds;
-        this.hasOtherPets = hasOtherPets;
-        this.hasKids = hasKids;
-        this.housing = housing;
-        this.physicalActivity = physicalActivity;
-        this.willFoster = willFoster;
-        this.verified = verified;
-        this.verifiedByEmployeeId = verifiedByEmployeeId;
-    }
-
-    public Adopter() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Adoption.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Adoption.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Adoption.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,10 +3,11 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
-import java.util.Date;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "adoption")
 public class Adoption {
@@ -24,17 +25,16 @@
 
     @Column(name = "approved", nullable = false)
-    private boolean approved;
+    private Boolean approved;
 
-    @Column(name = "id_adopter", nullable = false)
-    private int adopterId;
+    @ManyToOne
+    @JoinColumn(name = "id_adopter", nullable = false)
+    private Adopter adopter;
 
-    public Adoption(LocalDate startDate, LocalDate endDateFoster, boolean approved, int adopterId) {
+    public Adoption(LocalDate startDate, LocalDate endDateFoster, Boolean approved,
+                    Adopter adopter) {
         this.startDate = startDate;
         this.endDateFoster = endDateFoster;
         this.approved = approved;
-        this.adopterId = adopterId;
-    }
-
-    public Adoption() {
+        this.adopter = adopter;
     }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Category.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Category.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Category.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,7 +3,11 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "category")
 public class Category {
@@ -17,9 +21,13 @@
     private String name;
 
+    @ManyToMany
+    @JoinTable(name = "pet_belongs_to_category",
+            joinColumns = @JoinColumn(name = "id_category"),
+            inverseJoinColumns = @JoinColumn(name = "id_pet"))
+    List<Pet> pets;
+
     public Category(String name) {
         this.name = name;
     }
 
-    public Category() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Donor.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Donor.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Donor.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,9 +3,12 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
+import java.util.List;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "donor")
 @PrimaryKeyJoinColumn(name = "id_user")
@@ -13,10 +16,18 @@
 
     @Column(name = "is_from_organisation", nullable = false)
-    private boolean fromOrganisation;
+    private Boolean fromOrganisation;
 
     @Column(name = "name_organisation_donor", nullable = true, length = 100)
     private String organisationName;
 
-    public Donor(LocalDate dateCreated, String name, String email, String password, String telephone, boolean fromOrganisation, String organisationName) {
+    @ManyToMany
+    @JoinTable(name = "donor_donates_to_organisation",
+            joinColumns = @JoinColumn(name = "id_user"),
+            inverseJoinColumns = @JoinColumn(name = "id_organisation"))
+    List<Organisation> donatedToOrganisations;
+
+    public Donor(LocalDate dateCreated, String name, String email,
+                 String password, String telephone, Boolean fromOrganisation,
+                 String organisationName) {
         super(dateCreated, name, email, password, telephone);
         this.fromOrganisation = fromOrganisation;
@@ -24,11 +35,3 @@
     }
 
-    public Donor(boolean fromOrganisation, String organisationName) {
-        this.fromOrganisation = fromOrganisation;
-        this.organisationName = organisationName;
-    }
-
-    public Donor() {
-    }
-
 }
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 b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Employee.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,4 +3,5 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
@@ -8,4 +9,5 @@
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "employee")
 @PrimaryKeyJoinColumn(name = "id_user")
@@ -15,31 +17,22 @@
     private String position;
 
-    @Column(name = "id_shelter", nullable = false)
-    private Integer shelterId;
+    @ManyToOne
+    @JoinColumn(name = "id_shelter", nullable = false)
+    private Shelter shelter;
 
     @Column(name = "is_verified", nullable = false)
-    private boolean verified;
+    private Boolean verified;
 
-    @Column(name = "verified_by_admin")
-    private Integer verifiedByAdminId;
+    @ManyToOne
+    @JoinColumn(name = "verified_by_admin")
+    private Admin adminVerificator;
 
     public Employee(LocalDate dateCreated, String name, String email, String password, String telephone,
-                    String position, int shelterId, boolean verified) {
+                    String position, Shelter shelter, Boolean verified) {
         super(dateCreated, name, email, password, telephone);
         this.position = position;
-        this.shelterId = shelterId;
+        this.shelter = shelter;
         this.verified = verified;
     }
 
-    public Employee(String position, int shelterId, boolean verified, int verifiedByAdminId) {
-        this.position = position;
-        this.shelterId = shelterId;
-        this.verified = verified;
-        this.verifiedByAdminId = verifiedByAdminId;
-    }
-
-    public Employee() {
-
-    }
-
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Food.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Food.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Food.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -4,7 +4,11 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "food")
 public class Food {
@@ -24,4 +28,10 @@
     private FoodType type;
 
+    @ManyToMany
+    @JoinTable(name = "pet_preferably_eats_food",
+            joinColumns = @JoinColumn(name = "id_food"),
+            inverseJoinColumns = @JoinColumn(name = "id_pet"))
+    List<Pet> pets;
+
     public Food(String manufacturer, String name, FoodType type) {
         this.manufacturer = manufacturer;
@@ -29,6 +39,3 @@
         this.type = type;
     }
-
-    public Food() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Organisation.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Organisation.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Organisation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,7 +3,11 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "organisation")
 public class Organisation {
@@ -23,4 +27,10 @@
     private String billingInformation;
 
+    @ManyToMany
+    @JoinTable(name = "donor_donates_to_organisation",
+            joinColumns = @JoinColumn(name = "id_organisation"),
+            inverseJoinColumns = @JoinColumn(name = "id_user"))
+    List<Donor> donors;
+
     public Organisation(String name, String email, String billingInformation) {
         this.name = name;
@@ -28,6 +38,3 @@
         this.billingInformation = billingInformation;
     }
-
-    public Organisation() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/PersonalProfile.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/PersonalProfile.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/PersonalProfile.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -2,12 +2,11 @@
 
 import finki.paw5.model.enumerations.*;
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
+import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "personal_profile")
 public class PersonalProfile {
@@ -16,4 +15,8 @@
     @Column(name = "id_pet", nullable = false)
     private Integer id;
+
+    @OneToOne
+    @JoinColumn(name = "id_pet", nullable = false)
+    private Pet pet;
 
     @Column(name = "friendly_to_kids", nullable = false)
@@ -32,6 +35,7 @@
     private GroomingNeed groomingNeed;
 
-    public PersonalProfile(int id, FriendlyToKids friendlyToKids, FriendlyToPets friendlyToPets, AttentionNeed attentionNeed, PhysicalActivity physicalActivity, GroomingNeed groomingNeed) {
+    public PersonalProfile(Integer id, Pet pet, FriendlyToKids friendlyToKids, FriendlyToPets friendlyToPets, AttentionNeed attentionNeed, PhysicalActivity physicalActivity, GroomingNeed groomingNeed) {
         this.id = id;
+        this.pet = pet;
         this.friendlyToKids = friendlyToKids;
         this.friendlyToPets = friendlyToPets;
@@ -40,6 +44,3 @@
         this.groomingNeed = groomingNeed;
     }
-
-    public PersonalProfile() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Pet.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Pet.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Pet.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -7,7 +7,11 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "pet")
 public class Pet {
@@ -17,4 +21,8 @@
     @Column(name = "id_pet")
     private Integer id;
+
+    @OneToOne
+    @JoinColumn(name = "id_pet", nullable = false)
+    private PersonalProfile personalProfile;
 
     @Column(name = "url_pet_image", length = 200)
@@ -40,13 +48,41 @@
 
     @Column(name = "can_be_fostered", nullable = false)
-    private boolean canBeFostered;
+    private Boolean canBeFostered;
 
-    @Column(name = "id_adoption")
-    private int adoptionId;
+    @ManyToOne
+    @JoinColumn(name = "id_adoption")
+    private Adoption adoption;
 
-    @Column(name = "id_shelter")
-    private int shelterId;
+    @ManyToOne
+    @JoinColumn(name = "id_shelter")
+    private Shelter shelter;
 
-    public Pet(String imageUrl, AgeGroup ageGroup, Size size, String breed, String name, Species species, Gender gender, boolean canBeFostered, int adoptionId, int shelterId) {
+    @ManyToMany
+    @JoinTable(name = "pet_belongs_to_category",
+            joinColumns = @JoinColumn(name = "id_pet"),
+            inverseJoinColumns = @JoinColumn(name = "id_category"))
+    List<Category> categories;
+
+    @ManyToMany
+    @JoinTable(name = "pet_needs_intervention_in_vet_clinic",
+            joinColumns = @JoinColumn(name = "id_pet"),
+            inverseJoinColumns = @JoinColumn(name = "id_vet_clinic"))
+    List<VetClinic> vetClinicsTreatedIn;
+
+    @ManyToMany
+    @JoinTable(name = "pet_needs_therapy",
+            joinColumns = @JoinColumn(name = "id_pet"),
+            inverseJoinColumns = @JoinColumn(name = "id_therapy"))
+    List<Therapy> therapies;
+
+    @ManyToMany
+    @JoinTable(name = "pet_preferably_eats_food",
+            joinColumns = @JoinColumn(name = "id_pet"),
+            inverseJoinColumns = @JoinColumn(name = "id_food"))
+    List<Food> preferredFoods;
+
+    public Pet(String imageUrl, AgeGroup ageGroup, Size size, String breed,
+               String name, Species species, Gender gender, Boolean canBeFostered,
+               Adoption adoption, Shelter shelter) {
         this.imageUrl = imageUrl;
         this.ageGroup = ageGroup;
@@ -57,9 +93,6 @@
         this.gender = gender;
         this.canBeFostered = canBeFostered;
-        this.adoptionId = adoptionId;
-        this.shelterId = shelterId;
-    }
-
-    public Pet() {
+        this.adoption = adoption;
+        this.shelter = shelter;
     }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Post.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Post.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Post.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,10 +3,11 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
-import java.util.Date;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "post")
 public class Post {
@@ -23,22 +24,23 @@
     private String thumbnailUrl;
 
-    @Column(name="id_pet", nullable = false)
-    private int petId;
+    @OneToOne
+    @JoinColumn(name="id_pet", nullable = false)
+    private Pet pet;
 
-    @Column(name="id_surendee")
-    private int surendeeId;
+    @ManyToOne
+    @JoinColumn(name="id_surendee")
+    private Surendee surendeePoster;
 
-    @Column(name="id_employee")
-    private int employeeId;
+    @ManyToOne
+    @JoinColumn(name="id_employee")
+    private Employee employeePoster;
 
-    public Post(LocalDate dateCreated, String thumbnailUrl, int petId, int surendeeId, int employeeId) {
+    public Post(LocalDate dateCreated, String thumbnailUrl,
+                Pet pet, Surendee surendeePoster, Employee employeePoster) {
         this.dateCreated = dateCreated;
         this.thumbnailUrl = thumbnailUrl;
-        this.petId = petId;
-        this.surendeeId = surendeeId;
-        this.employeeId = employeeId;
-    }
-
-    public Post() {
+        this.pet = pet;
+        this.surendeePoster = surendeePoster;
+        this.employeePoster = employeePoster;
     }
 }
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 b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Shelter.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,7 +3,9 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "shelter")
 public class Shelter {
@@ -20,6 +22,7 @@
     private String telephone;
 
-    @Column(name = "id_organisation")
-    private Integer organisationId;
+    @ManyToOne
+    @JoinColumn(name = "id_organisation")
+    private Organisation organisation;
 
     @Column(name = "name_shelter", nullable = false, length = 100)
@@ -29,13 +32,11 @@
     private String email;
 
-    public Shelter(String address, String telephone, Integer organisationId, String name, String email) {
+    public Shelter(String address, String telephone, Organisation organisation,
+                   String name, String email) {
         this.address = address;
         this.telephone = telephone;
-        this.organisationId = organisationId;
+        this.organisation = organisation;
         this.name = name;
         this.email = email;
     }
-
-    public Shelter() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Surendee.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Surendee.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Surendee.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,4 +3,5 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
@@ -8,4 +9,5 @@
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "surendee")
 @PrimaryKeyJoinColumn(name = "id_user")
@@ -16,6 +18,3 @@
     }
 
-    public Surendee() {
-    }
-
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Therapy.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Therapy.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/Therapy.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,10 +3,13 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
 import java.util.Date;
+import java.util.List;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "therapy")
 public class Therapy {
@@ -26,4 +29,10 @@
     private LocalDate endDate;
 
+    @ManyToMany
+    @JoinTable(name = "pet_needs_therapy",
+            joinColumns = @JoinColumn(name = "id_therapy"),
+            inverseJoinColumns = @JoinColumn(name = "id_pet"))
+    List<Pet> pets;
+
     public Therapy(String healthProblem, LocalDate startDate, LocalDate endDate) {
         this.healthProblem = healthProblem;
@@ -31,6 +40,3 @@
         this.endDate = endDate;
     }
-
-    public Therapy() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/User.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/User.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/User.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,4 +3,5 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
@@ -9,4 +10,5 @@
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "user_table")
 @Inheritance(strategy = InheritanceType.JOINED)
@@ -40,6 +42,3 @@
         this.telephone = telephone;
     }
-
-    public User() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/VetClinic.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/VetClinic.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/entities/VetClinic.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,7 +3,11 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "vet_clinic")
 public class VetClinic {
@@ -23,4 +27,10 @@
     private String name;
 
+    @ManyToMany
+    @JoinTable(name = "pet_needs_intervention_in_vet_clinic",
+            joinColumns = @JoinColumn(name = "id_vet_clinic"),
+            inverseJoinColumns = @JoinColumn(name = "id_pet"))
+    List<Pet> pets;
+
     public VetClinic(String telephone, String address, String name) {
         this.telephone = telephone;
@@ -28,6 +38,3 @@
         this.name = name;
     }
-
-    public VetClinic() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/exceptions/InvalidPetIdException.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/exceptions/InvalidPetIdException.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/exceptions/InvalidPetIdException.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,4 @@
+package finki.paw5.model.exceptions;
+
+public class InvalidPetIdException extends RuntimeException{
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/DonorDonatesToOrganisation.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/DonorDonatesToOrganisation.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/DonorDonatesToOrganisation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,7 +3,9 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "donor_donates_to_organisation")
 @IdClass(DonorDonatesToOrganisationId.class)
@@ -22,7 +24,3 @@
         this.organisationId = organisationId;
     }
-
-    public DonorDonatesToOrganisation() {
-        
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetBelongsToCategory.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetBelongsToCategory.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetBelongsToCategory.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,7 +3,9 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "pet_belongs_to_category")
 @IdClass(PetBelongsToCategoryId.class)
@@ -22,7 +24,3 @@
         this.categoryId = categoryId;
     }
-
-    public PetBelongsToCategory() {
-
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetNeedsInterventionInVetClinic.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetNeedsInterventionInVetClinic.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetNeedsInterventionInVetClinic.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,4 +3,5 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
@@ -9,4 +10,5 @@
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "pet_needs_intervention_in_vet_clinic")
 @IdClass(PetNeedsInterventionInVetClinicId.class)
@@ -33,7 +35,3 @@
         this.description = description;
     }
-
-    public PetNeedsInterventionInVetClinic() {
-
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetNeedsTherapy.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetNeedsTherapy.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetNeedsTherapy.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,7 +3,9 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "pet_needs_therapy")
 @IdClass(PetNeedsTherapyId.class)
@@ -22,6 +24,3 @@
         this.therapyId = therapyId;
     }
-
-    public PetNeedsTherapy() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetPreferablyEatsFood.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetPreferablyEatsFood.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/model/relations/PetPreferablyEatsFood.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,7 +3,9 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.RequiredArgsConstructor;
 
 @Data
 @Entity
+@RequiredArgsConstructor
 @Table(name = "pet_preferably_eats_food")
 @IdClass(PetPreferablyEatsFoodId.class)
@@ -26,6 +28,3 @@
         this.quantityPerDay = quantityPerDay;
     }
-
-    public PetPreferablyEatsFood() {
-    }
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/AdoptionService.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/AdoptionService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/AdoptionService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,8 @@
+package finki.paw5.service;
+
+import finki.paw5.model.entities.Adoption;
+
+public interface AdoptionService {
+
+    void save(Adoption adoption);
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/PersonalProfileService.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/PersonalProfileService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/PersonalProfileService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,10 @@
+package finki.paw5.service;
+
+import finki.paw5.model.entities.PersonalProfile;
+import finki.paw5.web.controllers.PostController;
+
+import java.util.Optional;
+
+public interface PersonalProfileService {
+    Optional<PersonalProfile> findById(Integer petId);
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/PetService.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/PetService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/PetService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,14 @@
+package finki.paw5.service;
+
+import finki.paw5.model.entities.Pet;
+
+import java.util.List;
+
+public interface PetService {
+
+    void save (Pet pet);
+
+    List<Pet> listpets();
+
+    Pet findById(Integer id);
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/PostService.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/PostService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/PostService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,14 @@
+package finki.paw5.service;
+
+import finki.paw5.model.entities.Post;
+import java.util.List;
+import java.util.Optional;
+
+public interface PostService {
+
+    void save (Post post);
+
+    List<Post> findAll();
+
+    Optional<Post> findById(Integer id);
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/ShelterService.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/ShelterService.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/ShelterService.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -4,6 +4,8 @@
 
 import java.util.List;
+import java.util.Optional;
 
 public interface ShelterService {
+    Optional<Shelter> findById(Integer id);
     List<Shelter> listShelters();
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AdoptionServiceImplementation.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AdoptionServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AdoptionServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,21 @@
+package finki.paw5.service.implementation;
+
+import finki.paw5.model.entities.Adoption;
+import finki.paw5.repository.AdoptionRepository;
+import finki.paw5.service.AdoptionService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AdoptionServiceImplementation implements AdoptionService {
+
+    private final AdoptionRepository adoptionRepository;
+
+    public AdoptionServiceImplementation(AdoptionRepository adoptionRepository) {
+        this.adoptionRepository = adoptionRepository;
+    }
+
+    @Override
+    public void save(Adoption adoption) {
+        this.adoptionRepository.save(adoption);
+    }
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AuthServiceImplementation.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AuthServiceImplementation.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/AuthServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -3,4 +3,5 @@
 import finki.paw5.model.entities.Adopter;
 import finki.paw5.model.entities.Employee;
+import finki.paw5.model.entities.Shelter;
 import finki.paw5.model.entities.User;
 import finki.paw5.model.enumerations.FreeTime;
@@ -10,4 +11,5 @@
 import finki.paw5.repository.AdopterRepository;
 import finki.paw5.repository.EmployeeRepository;
+import finki.paw5.repository.ShelterRepository;
 import finki.paw5.repository.UserRepository;
 import finki.paw5.service.AuthService;
@@ -22,9 +24,11 @@
     private final AdopterRepository adopterRepository;
     private final EmployeeRepository employeeRepository;
+    private final ShelterRepository shelterRepository;
 
-    public AuthServiceImplementation(UserRepository userRepository, AdopterRepository adopterRepository, EmployeeRepository employeeRepository) {
+    public AuthServiceImplementation(UserRepository userRepository, AdopterRepository adopterRepository, EmployeeRepository employeeRepository, ShelterRepository shelterRepository) {
         this.userRepository = userRepository;
         this.adopterRepository = adopterRepository;
         this.employeeRepository = employeeRepository;
+        this.shelterRepository = shelterRepository;
     }
 
@@ -47,5 +51,6 @@
     @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);
+        Shelter shelter = this.shelterRepository.findById(shelterId).get();
+        Employee employee = new Employee(LocalDate.now(),name, email,password,telephone,position,shelter,false);
         return employeeRepository.save(employee);
     }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PersonalProfileServiceImplementation.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PersonalProfileServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PersonalProfileServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,23 @@
+package finki.paw5.service.implementation;
+
+import finki.paw5.model.entities.PersonalProfile;
+import finki.paw5.repository.PersonalProfileRepository;
+import finki.paw5.service.PersonalProfileService;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+@Service
+public class PersonalProfileServiceImplementation implements PersonalProfileService {
+
+    private final PersonalProfileRepository personalProfileRepository;
+
+    public PersonalProfileServiceImplementation(PersonalProfileRepository personalProfileRepository) {
+        this.personalProfileRepository = personalProfileRepository;
+    }
+
+    @Override
+    public Optional<PersonalProfile> findById(Integer petId) {
+        return this.personalProfileRepository.findById(petId);
+    }
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PetServiceImplementation.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PetServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PetServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,30 @@
+package finki.paw5.service.implementation;
+
+import finki.paw5.model.entities.Pet;
+import finki.paw5.repository.PetRepository;
+import finki.paw5.service.PetService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class PetServiceImplementation implements PetService {
+
+    private final PetRepository petRepository;
+
+    public PetServiceImplementation(PetRepository petRepository) {
+        this.petRepository = petRepository;
+    }
+
+    @Override
+    public void save(Pet pet) {
+        this.petRepository.save(pet);
+    }
+
+    public List<Pet> listpets() {return this.petRepository.findAll();}
+
+    @Override
+    public Pet findById(Integer id) {
+        return this.petRepository.findById(id).get();
+    }
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PostServiceImplementation.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PostServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/PostServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,34 @@
+package finki.paw5.service.implementation;
+
+import finki.paw5.model.entities.Post;
+import finki.paw5.repository.PostRepository;
+import finki.paw5.service.PostService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class PostServiceImplementation implements PostService {
+
+    private final PostRepository postRepository;
+
+    public PostServiceImplementation(PostRepository PostRepository){
+        this.postRepository = PostRepository;
+    }
+
+    @Override
+    public void save(Post post) {
+        this.postRepository.save(post);
+    }
+
+    @Override
+    public List<Post> findAll() {
+        return this.postRepository.findAll();
+    }
+
+    @Override
+    public Optional<Post> findById(Integer id) {
+        return this.postRepository.findById(id);
+    }
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/ShelterServiceImplementation.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/ShelterServiceImplementation.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/service/implementation/ShelterServiceImplementation.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -7,7 +7,9 @@
 
 import java.util.List;
+import java.util.Optional;
 
 @Service
 public class ShelterServiceImplementation implements ShelterService {
+
     private final ShelterRepository shelterRepository;
 
@@ -16,4 +18,8 @@
     }
 
+    @Override
+    public Optional<Shelter> findById(Integer id) {
+        return this.shelterRepository.findById(id);
+    }
 
     @Override
@@ -21,3 +27,5 @@
         return shelterRepository.findAll();
     }
+
+
 }
Index: Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/HomeController.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/HomeController.java	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/HomeController.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -1,4 +1,5 @@
 package finki.paw5.web.controllers;
 
+import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -10,7 +11,11 @@
 
     @GetMapping
-    public String getHomePage(){
+    public String getHomePage(HttpServletRequest request) {
+        if(request.getSession().getAttribute("user")==null){
+            return "redirect:/login";
+        }
         return "home";
     }
+
     @GetMapping("/aboutUs")
     public String getAboutUsPage(){
Index: Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/PetController.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/PetController.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/PetController.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,41 @@
+package finki.paw5.web.controllers;
+
+import finki.paw5.model.entities.Adopter;
+import finki.paw5.model.entities.Adoption;
+import finki.paw5.model.entities.Pet;
+import finki.paw5.service.AdoptionService;
+import finki.paw5.service.PetService;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.time.LocalDate;
+
+@Controller
+public class PetController {
+
+    private final PetService petService;
+    private final AdoptionService adoptionService;
+
+    public PetController(PetService petService, AdoptionService adoptionService) {
+        this.petService = petService;
+        this.adoptionService = adoptionService;
+    }
+
+    @PostMapping("/submit-adoption-{id}")
+    public String saveAdoption(@PathVariable Integer id, HttpServletRequest request) {
+
+        Pet pet = this.petService.findById(id);
+        
+        Adopter adopter = (Adopter) request.getSession().getAttribute("user");
+
+        Adoption adoption = new Adoption(LocalDate.now(), null, false, adopter);
+        this.adoptionService.save(adoption);
+
+        pet.setAdoption(adoption);
+        this.petService.save(pet);
+
+        return "redirect:/home";
+    }
+}
Index: Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/PostController.java
===================================================================
--- Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/PostController.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/java/finki/paw5/web/controllers/PostController.java	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,101 @@
+package finki.paw5.web.controllers;
+import finki.paw5.model.entities.Pet;
+import finki.paw5.model.entities.Post;
+import finki.paw5.model.entities.Employee;
+import finki.paw5.model.enumerations.AgeGroup;
+import finki.paw5.model.enumerations.Gender;
+import finki.paw5.model.enumerations.Size;
+import finki.paw5.model.enumerations.Species;
+import finki.paw5.service.PersonalProfileService;
+import finki.paw5.service.PetService;
+import finki.paw5.service.PostService;
+import finki.paw5.service.ShelterService;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Controller
+public class PostController {
+
+    private final PostService postService;
+    private final PetService petService;
+    private final PersonalProfileService personalProfileService;
+
+    public PostController(PostService postService, PetService petService, PersonalProfileService personalProfileService, ShelterService shelterService) {
+        this.postService = postService;
+        this.petService = petService;
+        this.personalProfileService = personalProfileService;
+    }
+
+    @GetMapping("/create-post")
+    public String get(Model model) {
+        model.addAttribute("pets", this.petService.listpets());
+        return "create-post";
+    }
+
+    @PostMapping("/submit-post")
+    public String savePost(@RequestParam(required = false) Integer petId,
+                           @RequestParam(required = false) boolean newPetCheckbox,
+                           @RequestParam(required = false) String name,
+                           @RequestParam(required = false) String gender,
+                           @RequestParam(required = false) String ageGroup,
+                           @RequestParam(required = false) String size,
+                           @RequestParam(required = false) String species,
+                           @RequestParam(required = false) String breed,
+                           @RequestParam(required = false) String imageUrl,
+                           @RequestParam(required = false) boolean canBeFostered,
+                           HttpServletRequest request) {
+
+        Employee employee = (Employee) request.getSession().getAttribute("user");
+
+        if(newPetCheckbox == true){
+
+            Pet newPet = new Pet(imageUrl, AgeGroup.valueOf(ageGroup), Size.valueOf(size), breed, name, Species.valueOf(species), Gender.valueOf(gender), canBeFostered, null, employee.getShelter());
+            this.petService.save(newPet);
+
+            Post post = new Post(LocalDate.now(), imageUrl, newPet, null, employee);
+            this.postService.save(post);
+
+        } else{
+
+            Pet selectedPet = this.petService.findById(petId);
+
+            Post post = new Post(LocalDate.now(), imageUrl, selectedPet, null, employee);
+            this.postService.save(post);
+
+        }
+
+        return "redirect:/home";
+    }
+
+    @GetMapping("/adoption-posts")
+    public String getAdoptionPosts(Model model){
+
+        List<Post> posts = this.postService.findAll();
+        List<Pet> pets = this.petService.listpets();
+        model.addAttribute("posts", posts);
+        model.addAttribute("pets",pets);
+
+        return "list-posts-adoption";
+    }
+
+    @GetMapping("/pet-details-{id}")
+    public String getPostDetails(@PathVariable Integer id,
+                                 Model model){
+
+        Post post = this.postService.findById(id).get();
+        Pet pet = post.getPet();
+
+        model.addAttribute("pet", pet);
+        model.addAttribute("post", post);
+
+        return "pet-details";
+    }
+}
Index: Prototype Application/Paw5/src/main/resources/templates/aboutUs.html
===================================================================
--- Prototype Application/Paw5/src/main/resources/templates/aboutUs.html	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/resources/templates/aboutUs.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
-<html lang="en">
+<html lang="en" xmlns:th="http://thymeleaf.org">
 <head>
     <meta charset="UTF-8">
@@ -46,5 +46,5 @@
     <h5 class="text-center text-danger" th:if="${session.user != null}">
         You successfully logged in
-        <th:block  th:text="${session.user.getId()}"></th:block>
+        <th:block  th:text="${session.user?.getId()}"></th:block>
     </h5>
 </div>
Index: Prototype Application/Paw5/src/main/resources/templates/create-post.html
===================================================================
--- Prototype Application/Paw5/src/main/resources/templates/create-post.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/resources/templates/create-post.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://thymeleaf.org"
+      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
+      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
+<head>
+    <meta charset="UTF-8">
+    <title>Create a post</title>
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+    <script>
+        function addNewPet(addNewPetCheckBox){
+
+            if(addNewPetCheckBox.checked){
+
+                document.getElementById("name").disabled = false;
+                document.getElementById("gender").disabled = false;
+                document.getElementById("ageGroup").disabled = false;
+                document.getElementById("size").disabled = false;
+                document.getElementById("species").disabled = false;
+                document.getElementById("breed").disabled = false;
+                document.getElementById("imageUrl").disabled = false;
+                document.getElementById("canBeFostered").disabled = false;
+
+                document.getElementById("petId").disabled = true;
+            } else{
+
+                document.getElementById("name").disabled = true;
+                document.getElementById("gender").disabled = true;
+                document.getElementById("ageGroup").disabled = true;
+                document.getElementById("size").disabled = true;
+                document.getElementById("species").disabled = true;
+                document.getElementById("breed").disabled = true;
+                document.getElementById("imageUrl").disabled = true;
+                document.getElementById("canBeFostered").disabled = true;
+
+                document.getElementById("petId").disabled = false;
+
+            }
+        }
+    </script>
+</head>
+<body>
+<header>
+    <nav class="navbar navbar-expand-md navbar-dark bg-dark">
+        <div class="container">
+            <a class="navbar-brand" href="/home">Paw 5</a>
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault"
+                    aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <div class="collapse navbar-collapse justify-content-end" id="navbarsExampleDefault">
+                <ul class="navbar-nav m-auto">
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/home/aboutUs">About us</a>
+                    </li>
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/login">Login</a>
+                    </li>
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/register">Register</a>
+                    </li>
+                </ul>
+            </div>
+        </div>
+    </nav>
+</header>
+    <h1>Create post</h1>
+<form th:action="@{/submit-post}" method="post">
+
+    <div>
+        <label for="petId">Select pet:</label>
+        <select id="petId" name="petId">
+            <option
+            th:each="pet :${pets}"
+            th:text="${pet.getName()}"
+            th:value="${pet.getId()}">
+            </option>
+        </select>
+    </div>
+
+    <div>
+        <label for="newPetCheckbox">Add new pet:</label>
+            <input id="newPetCheckbox" name="newPetCheckbox" type="checkbox" onclick="addNewPet(this)">
+    </div>
+
+    <div>
+        <label for="name">Name:</label>
+        <input type="text"
+               id="name"
+               name="name"
+               class="form-control"
+               placeholder="Enter name"
+               disabled>
+    </div>
+
+    <div>
+        <label for="gender">Gender:</label>
+        <select id="gender"
+                name="gender"
+                class="form-control"
+                disabled>
+            <option value = "MALE">male</option>
+            <option value = "FEMALE">female</option>
+        </select>
+    </div>
+
+    <div>
+        <label for="ageGroup">Age Group:</label>
+        <select id="ageGroup"
+                name="ageGroup"
+                class="form-control"
+                disabled>
+            <option value = "YOUNG">young</option>
+            <option value = "ADULT">adult</option>
+            <option value = "ELDER">elder</option>
+        </select>
+    </div>
+
+    <div>
+        <label for="size">Size:</label>
+        <select id="size"
+                name="size"
+                class="form-control"
+                disabled>
+            <option value = "XSMALL">extra small</option>
+            <option value = "SMALL">small</option>
+            <option value = "MEDIUM">medium</option>
+            <option value = "LARGE">large</option>
+            <option value = "XLARGE">extra large</option>
+        </select>
+    </div>
+
+    <div>
+        <label for="species">Species:</label>
+        <select id="species"
+                name="species"
+                class="form-control"
+                disabled>
+            <option value = "CAT">cat</option>
+            <option value = "DOG">dog</option>
+            <option value = "BIRD">bird</option>
+        </select>
+    </div>
+
+    <div>
+        <label for="breed">Breed:</label>
+        <input type="text"
+               id="breed"
+               name="breed"
+               class="form-control"
+               placeholder="Enter breed"
+               disabled>
+    </div>
+
+    <div>
+        <label for="imageUrl">Image URL:</label>
+        <input type="text"
+               id="imageUrl"
+               name="imageUrl"
+               class="form-control"
+               placeholder="Enter image URL"
+               disabled>
+        <!-- <label for="upload">Image:</label>
+        <input id="upload" type="file" accept="image/*">
+        <input type="submit">-->
+    </div>
+
+    <div>
+        <label for="canBeFostered">Can be fostered:</label>
+        <input type="checkbox"
+               id="canBeFostered"
+               name="canBeFostered"
+               class="form-control"
+               value=false
+               disabled>
+    </div>
+
+    <button id="submit" type="submit">Submit</button>
+
+</form>
+</body>
+</html>
Index: Prototype Application/Paw5/src/main/resources/templates/home.html
===================================================================
--- Prototype Application/Paw5/src/main/resources/templates/home.html	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/resources/templates/home.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
-<html lang="en">
+<html lang="en" xmlns:th="http://thymeleaf.org">
 <head>
     <meta charset="UTF-8">
@@ -41,5 +41,4 @@
   </nav>
 </header>
-
 <div>
   <h1>Welcome to Paw 5</h1>
@@ -48,5 +47,18 @@
   </h3>
 </div>
-
+<div>
+  <form method="get" th:action="@{'/create-post'}">
+    <button id="createPost"
+            type="submit"
+            class="btn">Create an Adoption Post</button>
+  </form>
+</div>
+<div>
+  <form method="get" th:action="@{'/adoption-posts'}">
+    <button id="submit"
+            type="submit"
+            class="btn">View Pet Posts</button>
+  </form>
+</div>
 </body>
 </html>
Index: Prototype Application/Paw5/src/main/resources/templates/list-posts-adoption.html
===================================================================
--- Prototype Application/Paw5/src/main/resources/templates/list-posts-adoption.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/resources/templates/list-posts-adoption.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://thymeleaf.org"
+      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
+      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
+<head>
+    <meta charset="UTF-8">
+    <title>Adoption Posts</title>
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+
+</head>
+<body>
+<header>
+    <nav class="navbar navbar-expand-md navbar-dark bg-dark">
+        <div class="container">
+            <a class="navbar-brand" href="/home">Paw 5</a>
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault"
+                    aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <div class="collapse navbar-collapse justify-content-end" id="navbarsExampleDefault">
+                <ul class="navbar-nav m-auto">
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/home/aboutUs">About us</a>
+                    </li>
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/login">Login</a>
+                    </li>
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/register">Register</a>
+                    </li>
+                </ul>
+            </div>
+        </div>
+    </nav>
+</header>
+<table>
+    <tr>
+        <th>Post ID</th>
+        <th>Pet Name</th>
+        <th>Species</th>
+    </tr>
+    <tr th:each = "post : ${posts}">
+        <td th:text = "${post.getId()}"></td>
+        <td th:text = "${post.getPet().getName()}"></td>
+        <td th:text = "${post.getPet().getSpecies()}"></td>
+        <td>
+            <form th:action="@{'/pet-details-{id}' (id=${post.getId()})}"
+                  th:method="GET">
+                <button type="submit"
+                        class="btn">
+                        View Details
+                </button>
+            </form>
+
+        </td>
+    </tr>
+</table>
+</body>
+</html>
Index: Prototype Application/Paw5/src/main/resources/templates/login.html
===================================================================
--- Prototype Application/Paw5/src/main/resources/templates/login.html	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/resources/templates/login.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
-<html lang="en">
+<html lang="en" xmlns:th="http://thymeleaf.org">
 <head>
   <meta charset="UTF-8">
Index: Prototype Application/Paw5/src/main/resources/templates/pet-details.html
===================================================================
--- Prototype Application/Paw5/src/main/resources/templates/pet-details.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
+++ Prototype Application/Paw5/src/main/resources/templates/pet-details.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://thymeleaf.org"
+      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
+      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+</head>
+<body>
+<header>
+    <nav class="navbar navbar-expand-md navbar-dark bg-dark">
+        <div class="container">
+            <a class="navbar-brand" href="/home">Paw 5</a>
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault"
+                    aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+
+            <div class="collapse navbar-collapse justify-content-end" id="navbarsExampleDefault">
+                <ul class="navbar-nav m-auto">
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/home/aboutUs">About us</a>
+                    </li>
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/login">Login</a>
+                    </li>
+                    <li class="nav-item m-auto">
+                        <a class="nav-link active" href="/register">Register</a>
+                    </li>
+                </ul>
+            </div>
+        </div>
+    </nav>
+</header>
+<table>
+    <tr>
+        <th>Post ID</th>
+        <td th:text = "${post.getId()}"></td>
+    <tr>
+        <th>Pet Name</th>
+        <td th:text = "${pet.getName()}"></td>
+    </tr>
+    <tr>
+        <th>Species</th>
+        <td th:text = "${pet.getSpecies()}"></td>
+    </tr>
+    <tr>
+        <th>Breed</th>
+        <td th:text = "${pet.getBreed()}"></td>
+    </tr>
+    <tr>
+        <th>Gender</th>
+        <td th:text = "${pet.getGender()}"></td>
+    </tr>
+    <tr>
+        <th>Age Group</th>
+        <td th:text = "${pet.getAgeGroup}"></td>
+    </tr>
+    <tr>
+        <th>Size</th>
+        <td th:text = "${pet.getSize()}"></td>
+    </tr>
+</table>
+<form method="POST"
+      th:action="@{'/submit-adoption-{id}' (id=${pet.getId()})}"
+      th:if="${pet.getAdoption()==null}">
+    <button id="submit"
+            type="submit"
+            class="btn">Adopt</button>
+</form>
+
+</body>
+</html>
Index: Prototype Application/Paw5/src/main/resources/templates/register.html
===================================================================
--- Prototype Application/Paw5/src/main/resources/templates/register.html	(revision b46d1f26dfd32f9eaa287bdfc552b2c58b5e539e)
+++ Prototype Application/Paw5/src/main/resources/templates/register.html	(revision 0078d84fd2b12673fec45f5406570b3543b5b034)
@@ -1,4 +1,4 @@
 <!DOCTYPE html>
-<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<html lang="en" xmlns:th="http://thymeleaf.org">
 <head>
     <meta charset="UTF-8">
