Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/AllController.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/AllController.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/AllController.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,36 @@
+package com.ukim.finki.develop.finkwave.controller;
+
+import com.ukim.finki.develop.finkwave.model.Admin;
+import com.ukim.finki.develop.finkwave.model.Event;
+import com.ukim.finki.develop.finkwave.model.User;
+import com.ukim.finki.develop.finkwave.repository.AdminRepository;
+import com.ukim.finki.develop.finkwave.repository.EventRepository;
+import com.ukim.finki.develop.finkwave.service.UserService;
+import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@CrossOrigin("*")
+@AllArgsConstructor
+@RequestMapping("/all")
+public class AllController {
+    private final AdminRepository adminRepository;
+    private final EventRepository eventRepository;
+
+    @GetMapping("/admins")
+    public HttpEntity<List<Admin>> getAllAdmins(){
+        return ResponseEntity.ok(adminRepository.findAll());
+    }
+    @GetMapping("/events")
+    public HttpEntity<List<Event>> getAllEvents(){
+        return ResponseEntity.ok(eventRepository.findAll());
+    }
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Admin.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Admin.java	(revision 838441d03f6ee84ef8c1303656d5d97cf5b732ae)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Admin.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -1,10 +1,19 @@
 package com.ukim.finki.develop.finkwave.model;
 
-import jakarta.persistence.*;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
 import lombok.Getter;
-import lombok.Setter;
 
 @Entity
 @Table(name = "admins", schema = "project")
+@Getter
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
 public class Admin {
     @Id
@@ -13,7 +22,7 @@
 
     @MapsId
-    @OneToOne(fetch = FetchType.LAZY)
+    @OneToOne
     @JoinColumn(name = "user_id")
-    private User users;
+    private User user;
 
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Album.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Album.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Album.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,35 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "albums", schema = "project")
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+public class Album {
+    @Id
+    @Column(name = "id", nullable = false)
+    private Long id;
+
+    @MapsId
+    @OneToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "id", nullable = false)
+    private MusicalEntity musicalEntities;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Artist.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Artist.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Artist.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,35 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "artists", schema = "project")
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+public class Artist {
+    @Id
+    @Column(name = "user_id", nullable = false)
+    private Long id;
+
+    @MapsId
+    @OneToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "user_id", nullable = false)
+    private NonAdminUser nonAdminUser;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContribution.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContribution.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContribution.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,32 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "artist_contributions", schema = "project")
+public class ArtistContribution {
+    @EmbeddedId
+    private ArtistContributionId id;
+
+    @MapsId("artistId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "artist_id", nullable = false)
+    private Artist artist;
+
+    @MapsId("musicalEntityId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "musical_entity_id", nullable = false)
+    private MusicalEntity musicalEntity;
+
+    @Column(name = "role", nullable = false, length = Integer.MAX_VALUE)
+    private String role;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContributionId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContributionId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContributionId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class ArtistContributionId implements Serializable {
+    private static final long serialVersionUID = -3193987026608380950L;
+    @Column(name = "artist_id", nullable = false)
+    private Long artistId;
+
+    @Column(name = "musical_entity_id", nullable = false)
+    private Long musicalEntityId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        ArtistContributionId entity = (ArtistContributionId) o;
+        return Objects.equals(this.artistId, entity.artistId) &&
+                Objects.equals(this.musicalEntityId, entity.musicalEntityId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(artistId, musicalEntityId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Event.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Event.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Event.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,44 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "events", schema = "project")
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+public class Event {
+    @Id
+    @Column(name = "event_id", nullable = false)
+    private Long id;
+
+    @Column(name = "location", nullable = false, length = Integer.MAX_VALUE)
+    private String location;
+
+    @Column(name = "venue", nullable = false, length = Integer.MAX_VALUE)
+    private String venue;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "creator_artist_id")
+    private Artist creatorArtist;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "creator_admin_id")
+    private Admin creatorAdmin;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Follow.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Follow.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Follow.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,29 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "follows", schema = "project")
+public class Follow {
+    @EmbeddedId
+    private FollowId id;
+
+    @MapsId("follower")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "follower", nullable = false)
+    private NonAdminUser follower;
+
+    @MapsId("followee")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "followee", nullable = false)
+    private NonAdminUser followee;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/FollowId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/FollowId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/FollowId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class FollowId implements Serializable {
+    private static final long serialVersionUID = -915670330063692538L;
+    @Column(name = "follower", nullable = false)
+    private Long follower;
+
+    @Column(name = "followee", nullable = false)
+    private Long followee;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        FollowId entity = (FollowId) o;
+        return Objects.equals(this.follower, entity.follower) &&
+                Objects.equals(this.followee, entity.followee);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(follower, followee);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Like.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Like.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Like.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,29 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "likes", schema = "project")
+public class Like {
+    @EmbeddedId
+    private LikeId id;
+
+    @MapsId("listenerId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "listener_id", nullable = false)
+    private Listener listener;
+
+    @MapsId("musicalEntityId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "musical_entity_id", nullable = false)
+    private MusicalEntity musicalEntity;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/LikeId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/LikeId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/LikeId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class LikeId implements Serializable {
+    private static final long serialVersionUID = -2521356135522333223L;
+    @Column(name = "listener_id", nullable = false)
+    private Long listenerId;
+
+    @Column(name = "musical_entity_id", nullable = false)
+    private Long musicalEntityId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        LikeId entity = (LikeId) o;
+        return Objects.equals(this.listenerId, entity.listenerId) &&
+                Objects.equals(this.musicalEntityId, entity.musicalEntityId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(listenerId, musicalEntityId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listen.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listen.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listen.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,34 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.ColumnDefault;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "listens", schema = "project")
+public class Listen {
+    @EmbeddedId
+    private ListenId id;
+
+    @MapsId("listenerId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "listener_id", nullable = false)
+    private Listener listener;
+
+    @MapsId("songId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "song_id", nullable = false)
+    private Song song;
+
+    @ColumnDefault("1")
+    @Column(name = "listen_count", nullable = false)
+    private Integer listenCount;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ListenId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ListenId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ListenId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class ListenId implements Serializable {
+    private static final long serialVersionUID = 7485589950837124664L;
+    @Column(name = "listener_id", nullable = false)
+    private Long listenerId;
+
+    @Column(name = "song_id", nullable = false)
+    private Long songId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        ListenId entity = (ListenId) o;
+        return Objects.equals(this.listenerId, entity.listenerId) &&
+                Objects.equals(this.songId, entity.songId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(listenerId, songId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listener.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listener.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listener.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,35 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "listeners", schema = "project")
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+public class Listener {
+    @Id
+    @Column(name = "user_id", nullable = false)
+    private Long id;
+
+    @MapsId
+    @OneToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "user_id", nullable = false)
+    private NonAdminUser nonAdminUser;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalEntity.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalEntity.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalEntity.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,44 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import java.time.LocalDate;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "musical_entities", schema = "project")
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+public class MusicalEntity {
+    @Id
+    @Column(name = "id", nullable = false)
+    private Long id;
+
+    @Column(name = "title", nullable = false, length = Integer.MAX_VALUE)
+    private String title;
+
+    @Column(name = "genre", nullable = false, length = Integer.MAX_VALUE)
+    private String genre;
+
+    @Column(name = "release_date", nullable = false)
+    private LocalDate releaseDate;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "released_by")
+    private Artist releasedBy;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/NonAdminUser.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/NonAdminUser.java	(revision 838441d03f6ee84ef8c1303656d5d97cf5b732ae)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/NonAdminUser.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -15,7 +15,7 @@
 
     @MapsId
-    @OneToOne(fetch = FetchType.LAZY)
+    @OneToOne
     @JoinColumn(name = "user_id")
-    private User users;
+    private User user;
 
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PerformsAt.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PerformsAt.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PerformsAt.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,29 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "performs_at", schema = "project")
+public class PerformsAt {
+    @EmbeddedId
+    private PerformsAtId id;
+
+    @MapsId("eventId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "event_id", nullable = false)
+    private Event event;
+
+    @MapsId("artistId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "artist_id", nullable = false)
+    private Artist artist;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PerformsAtId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PerformsAtId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PerformsAtId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class PerformsAtId implements Serializable {
+    private static final long serialVersionUID = 1686751772857702507L;
+    @Column(name = "event_id", nullable = false)
+    private Long eventId;
+
+    @Column(name = "artist_id", nullable = false)
+    private Long artistId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        PerformsAtId entity = (PerformsAtId) o;
+        return Objects.equals(this.eventId, entity.eventId) &&
+                Objects.equals(this.artistId, entity.artistId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(eventId, artistId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Playlist.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Playlist.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Playlist.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,39 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "playlists", schema = "project")
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+public class Playlist {
+    @Id
+    @Column(name = "playlist_id", nullable = false)
+    private Long id;
+
+    @Column(name = "cover", length = Integer.MAX_VALUE)
+    private String cover;
+
+    @Column(name = "name", nullable = false, length = Integer.MAX_VALUE)
+    private String name;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "created_by")
+    private Listener createdBy;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PlaylistSong.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PlaylistSong.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PlaylistSong.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,29 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "playlist_songs", schema = "project")
+public class PlaylistSong {
+    @EmbeddedId
+    private PlaylistSongId id;
+
+    @MapsId("songId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "song_id", nullable = false)
+    private Song song;
+
+    @MapsId("playlistId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "playlist_id", nullable = false)
+    private Playlist playlist;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PlaylistSongId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PlaylistSongId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/PlaylistSongId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class PlaylistSongId implements Serializable {
+    private static final long serialVersionUID = -1096457880126729057L;
+    @Column(name = "song_id", nullable = false)
+    private Long songId;
+
+    @Column(name = "playlist_id", nullable = false)
+    private Long playlistId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        PlaylistSongId entity = (PlaylistSongId) o;
+        return Objects.equals(this.playlistId, entity.playlistId) &&
+                Objects.equals(this.songId, entity.songId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(playlistId, songId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Review.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Review.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Review.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,35 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "reviews", schema = "project")
+public class Review {
+    @EmbeddedId
+    private ReviewId id;
+
+    @MapsId("listenerId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "listener_id", nullable = false)
+    private Listener listener;
+
+    @MapsId("musicalEntityId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "musical_entity_id", nullable = false)
+    private MusicalEntity musicalEntity;
+
+    @Column(name = "grade", nullable = false)
+    private Integer grade;
+
+    @Column(name = "comment", length = Integer.MAX_VALUE)
+    private String comment;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ReviewId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ReviewId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ReviewId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class ReviewId implements Serializable {
+    private static final long serialVersionUID = -747031476754115455L;
+    @Column(name = "listener_id", nullable = false)
+    private Long listenerId;
+
+    @Column(name = "musical_entity_id", nullable = false)
+    private Long musicalEntityId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        ReviewId entity = (ReviewId) o;
+        return Objects.equals(this.listenerId, entity.listenerId) &&
+                Objects.equals(this.musicalEntityId, entity.musicalEntityId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(listenerId, musicalEntityId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/SavedPlaylist.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/SavedPlaylist.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/SavedPlaylist.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,29 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "saved_playlists", schema = "project")
+public class SavedPlaylist {
+    @EmbeddedId
+    private SavedPlaylistId id;
+
+    @MapsId("listenerId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "listener_id", nullable = false)
+    private Listener listener;
+
+    @MapsId("playlistId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "playlist_id", nullable = false)
+    private Playlist playlist;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/SavedPlaylistId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/SavedPlaylistId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/SavedPlaylistId.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class SavedPlaylistId implements Serializable {
+    private static final long serialVersionUID = 678748242066896235L;
+    @Column(name = "listener_id", nullable = false)
+    private Long listenerId;
+
+    @Column(name = "playlist_id", nullable = false)
+    private Long playlistId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        SavedPlaylistId entity = (SavedPlaylistId) o;
+        return Objects.equals(this.playlistId, entity.playlistId) &&
+                Objects.equals(this.listenerId, entity.listenerId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(playlistId, listenerId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Song.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Song.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Song.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,32 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "songs", schema = "project")
+public class Song {
+    @Id
+    @Column(name = "id", nullable = false)
+    private Long id;
+
+    @MapsId
+    @OneToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "id", nullable = false)
+    private MusicalEntity musicalEntities;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "album_id")
+    private Album album;
+
+    @Column(name = "link", nullable = false, length = Integer.MAX_VALUE)
+    private String link;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java	(revision 838441d03f6ee84ef8c1303656d5d97cf5b732ae)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -2,5 +2,11 @@
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import jakarta.persistence.*;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -12,4 +18,5 @@
 @NoArgsConstructor
 @Table(name = "users")
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
 public class User {
     @Id
@@ -20,12 +27,12 @@
     private String fullName;
 
-    @Column(name = "email", nullable = false, length = Integer.MAX_VALUE)
+    @Column(nullable = false, length = Integer.MAX_VALUE)
     private String email;
 
-    @Column(name = "password", nullable = false, length = Integer.MAX_VALUE)
+    @Column(nullable = false, length = Integer.MAX_VALUE)
     @JsonIgnore
     private String password;
 
-    @Column(name = "username", nullable = false, length = Integer.MAX_VALUE)
+    @Column(nullable = false, length = Integer.MAX_VALUE)
     private String username;
 
@@ -33,9 +40,9 @@
     private String profilePhoto;
 
-    @OneToOne(mappedBy = "users")
+    @OneToOne(mappedBy = "user")
     @JsonIgnore
     private Admin admin;
 
-    @OneToOne(mappedBy = "users")
+    @OneToOne(mappedBy = "user")
     @JsonIgnore
     private NonAdminUser nonAdminUser;
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/AdminRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/AdminRepository.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/AdminRepository.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,9 @@
+package com.ukim.finki.develop.finkwave.repository;
+
+import com.ukim.finki.develop.finkwave.model.Admin;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface AdminRepository extends JpaRepository<Admin, Long> {
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/EventRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/EventRepository.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/EventRepository.java	(revision 8952345661b0bed0ede1fe8c3b7ea3bb02560d0d)
@@ -0,0 +1,9 @@
+package com.ukim.finki.develop.finkwave.repository;
+
+import com.ukim.finki.develop.finkwave.model.Event;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface EventRepository extends JpaRepository<Event, Long> {
+}
