Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/NonAdminUserController.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/NonAdminUserController.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/NonAdminUserController.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,5 +1,4 @@
 package com.ukim.finki.develop.finkwave.controller;
 
-import com.ukim.finki.develop.finkwave.model.NonAdminUser;
 import com.ukim.finki.develop.finkwave.model.dto.NonAdminUserDTO;
 import com.ukim.finki.develop.finkwave.service.NonAdminUserService;
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistContributionDTO.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistContributionDTO.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistContributionDTO.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -9,7 +9,7 @@
 @AllArgsConstructor
 public class ArtistContributionDTO {
-    private String role;
     private Long musicalEntityId;
     private String title;
+    private String role;
     private String entityType;
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistMusicalEntitiesDTO.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistMusicalEntitiesDTO.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistMusicalEntitiesDTO.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -5,4 +5,5 @@
 import lombok.AllArgsConstructor;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
@@ -12,6 +13,6 @@
 @Setter
 @AllArgsConstructor
+@NoArgsConstructor
 public class ArtistMusicalEntitiesDTO {
-    private List<Song> songs;
-    private List<Album> albums;
+    private List<ArtistContributionDTO> contributions;
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ListenerLikesDTO.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ListenerLikesDTO.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ListenerLikesDTO.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,6 +1,7 @@
 package com.ukim.finki.develop.finkwave.model.dto;
-
+import java.util.*;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
@@ -8,8 +9,8 @@
 @Getter
 @AllArgsConstructor
+@NoArgsConstructor
 public class ListenerLikesDTO {
-    private Long entityId;
-    private String entityTitle;
-    private String entityGenre;
-    private String entityType;
+    private List<MusicalEntityDTO> likedEntities;
+    
+
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/MusicalEntityDTO.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/MusicalEntityDTO.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/MusicalEntityDTO.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -0,0 +1,15 @@
+package com.ukim.finki.develop.finkwave.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@AllArgsConstructor
+@Getter
+@Setter
+public class MusicalEntityDTO {
+    private Long id;
+    private String title;
+    private String genre;
+    private String type;
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/NonAdminUserDTO.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/NonAdminUserDTO.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/NonAdminUserDTO.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,25 +1,27 @@
 package com.ukim.finki.develop.finkwave.model.dto;
 
-import lombok.AllArgsConstructor;
+import com.ukim.finki.develop.finkwave.model.Playlist;
 import lombok.Getter;
-import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import java.util.List;
 
+
 @Getter
 @Setter
-@AllArgsConstructor
-@NoArgsConstructor
+
 public class NonAdminUserDTO {
-    private Long Id;
+    private Long id;
     private String username;
     private String fullName;
-    private String profilePhoto;
-    private Long followerCount;
-    private Long followingCount;
     private String userType;
-    // is it best practice to have this empty in listeners?
-    private List<ArtistContributionDTO> contributions;
-    private List<ListenerLikesDTO> likedEntities;
+    private Long followers;
+    private Long following;
+
+
+    
+    private ArtistMusicalEntitiesDTO musicalEntities;
+    
+    private ListenerLikesDTO likes;
+    private List<PlaylistDTO>createdPlaylists;
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/PlaylistDTO.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/PlaylistDTO.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/PlaylistDTO.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -0,0 +1,16 @@
+package com.ukim.finki.develop.finkwave.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@AllArgsConstructor
+@Getter
+@Setter
+public class PlaylistDTO {
+    private Long id;
+    private String name;
+    private String cover;
+    private String creatorName;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -2,6 +2,7 @@
 
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
-
+import org.springframework.data.repository.query.Param;
 import com.ukim.finki.develop.finkwave.model.ArtistContribution;
 import com.ukim.finki.develop.finkwave.model.ArtistContributionId;
@@ -12,4 +13,12 @@
 public interface ArtistContributionRepository extends JpaRepository<ArtistContribution, ArtistContributionId> {
 
-    List<ArtistContribution>findAllByArtist_Id(Long id);
+    @Query("SELECT ac.musicalEntity.id,ac.musicalEntity.title,ac.role, "+
+        "CASE WHEN s.id IS NOT NULL THEN 'Song' "+
+        "WHEN a.id IS NOT NULL THEN 'Album' "+
+        "ELSE 'Unknown' END "+
+        "FROM ArtistContribution ac "+
+        "LEFT JOIN Song s  ON s.musicalEntities.id=ac.musicalEntity.id "+
+        "LEFT JOIN Album a ON a.musicalEntities.id=ac.musicalEntity.id "+
+        "WHERE ac.artist.id=:artistId")
+    List<Object[]>findContributionsByArtistId(@Param("artistId")Long artistId);
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistRepository.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistRepository.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,5 +1,9 @@
 package com.ukim.finki.develop.finkwave.repository;
 
+import java.util.Optional;
+
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -8,3 +12,10 @@
 @Repository
 public interface ArtistRepository extends JpaRepository<Artist, Long> {
+
+    @Query("SELECT DISTINCT a FROM Artist a "+
+        "JOIN FETCH a.nonAdminUser nu "+
+        "JOIN FETCH nu.user "+
+        "WHERE a.id=:artistId")
+    Optional<Artist>findByIdWithUser(@Param("artistId")Long artistId);
+
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/LikeRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/LikeRepository.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/LikeRepository.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -2,4 +2,6 @@
 
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -11,4 +13,12 @@
 @Repository
 public interface LikeRepository extends JpaRepository<Like, LikeId> {
-    List<Like>getLikesByListener_Id(Long id);
+    @Query("SELECT l.musicalEntity.id, l.musicalEntity.title,l.musicalEntity.genre, " +
+           "CASE WHEN s.id IS NOT NULL THEN 'SONG' " +
+           "WHEN a.id IS NOT NULL THEN 'ALBUM' " +
+           "ELSE 'UNKNOWN' END " +
+           "FROM Like l " +
+           "LEFT JOIN Song s ON s.musicalEntities.id = l.musicalEntity.id " +
+           "LEFT JOIN Album a ON a.musicalEntities.id = l.musicalEntity.id " +
+           "WHERE l.listener.id = :listenerId")
+    List<Object[]> findLikedEntitiesWithTypeByListenerId(@Param("listenerId") Long listenerId);
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ListenerRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ListenerRepository.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ListenerRepository.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,5 +1,9 @@
 package com.ukim.finki.develop.finkwave.repository;
 
+import java.util.Optional;
+
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -8,3 +12,8 @@
 @Repository
 public interface ListenerRepository extends JpaRepository<Listener, Long> {
+    @Query("SELECT DISTINCT l FROM Listener l " +
+           "JOIN FETCH l.nonAdminUser nu " +
+           "JOIN FETCH nu.user " +
+           "WHERE l.id = :listenerId")
+    Optional<Listener> findByIdWithUser(@Param("listenerId") Long listenerId);
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -2,9 +2,26 @@
 
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import com.ukim.finki.develop.finkwave.model.Playlist;
 
+import java.util.List;
+
 @Repository
 public interface PlaylistRepository extends JpaRepository<Playlist, Long> {
+
+
+    @Query("SELECT DISTINCT p FROM Playlist p " +
+            "JOIN FETCH p.createdBy l " +
+            "JOIN FETCH l.nonAdminUser nu " +
+            "JOIN FETCH nu.user u " +
+            "WHERE l.id = :creatorId")
+    List<Playlist> findByCreatorId(@Param("creatorId") Long creatorId);
+
+
+
+
+
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ArtistService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ArtistService.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ArtistService.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,13 +1,11 @@
 package com.ukim.finki.develop.finkwave.service;
 
-import com.ukim.finki.develop.finkwave.model.ArtistContribution;
-import com.ukim.finki.develop.finkwave.model.Song;
 import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDTO;
-import com.ukim.finki.develop.finkwave.model.dto.ArtistMusicalEntitiesDTO;
 import com.ukim.finki.develop.finkwave.repository.ArtistContributionRepository;
+
+import org.springframework.transaction.annotation.Transactional;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -17,23 +15,14 @@
 public class ArtistService {
 
-    private final MusicalEntityService musicalEntityService;
-    private final ArtistContributionRepository contributionRepository;
+    private final ArtistContributionRepository artistContributionRepository;
 
 
-    public List<ArtistContributionDTO> getArtistContributions(Long id){
+    @Transactional(readOnly=true)
+    public List<ArtistContributionDTO> getArtistContributions(Long artistId){
+        List<Object[]>results=artistContributionRepository.findContributionsByArtistId(artistId);
 
-        ArtistMusicalEntitiesDTO artistMusicalEntities=musicalEntityService.getArtistMusicalEntities(id);
-        List<ArtistContribution>contributions=contributionRepository.findAllByArtist_Id(id);
-        return contributions.stream().map(c -> {
-            boolean isSong = artistMusicalEntities.getSongs().stream()
-                    .anyMatch(s -> s.getId().equals(c.getMusicalEntity().getId()));
-
-            return new ArtistContributionDTO(
-                    c.getRole(),
-                    c.getMusicalEntity().getId(),
-                    c.getMusicalEntity().getTitle(),
-                    isSong ? "Song" : "Album"
-            );
-        }).collect(Collectors.toList());
+        return results.stream()
+        .map(row->new ArtistContributionDTO((Long)row[0], (String)row[1], (String)row[2], (String)row[3]))
+        .collect(Collectors.toList());
     }
 
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ListenerService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ListenerService.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ListenerService.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,19 +1,14 @@
 package com.ukim.finki.develop.finkwave.service;
 
-import com.ukim.finki.develop.finkwave.model.Album;
-import com.ukim.finki.develop.finkwave.model.Like;
-import com.ukim.finki.develop.finkwave.model.MusicalEntity;
-import com.ukim.finki.develop.finkwave.model.Song;
-import com.ukim.finki.develop.finkwave.model.dto.ArtistMusicalEntitiesDTO;
+import com.ukim.finki.develop.finkwave.model.Playlist;
 import com.ukim.finki.develop.finkwave.model.dto.ListenerLikesDTO;
-import com.ukim.finki.develop.finkwave.repository.AlbumRepository;
+import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDTO;
+import com.ukim.finki.develop.finkwave.model.dto.PlaylistDTO;
 import com.ukim.finki.develop.finkwave.repository.LikeRepository;
-import com.ukim.finki.develop.finkwave.repository.SongRepository;
+import com.ukim.finki.develop.finkwave.repository.PlaylistRepository;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
+import org.springframework.transaction.annotation.Transactional;
 import java.util.List;
-import java.util.stream.Collectors;
 
 @Service
@@ -21,18 +16,23 @@
 public class ListenerService {
     private final LikeRepository likeRepository;
-    private final MusicalEntityService musicalEntityService;
+    private final PlaylistRepository playlistRepository;
+    @Transactional(readOnly = true)
+    public ListenerLikesDTO getLikedEntities(Long listenerId) {
+        List<Object[]> results = likeRepository.findLikedEntitiesWithTypeByListenerId(listenerId);
 
-    public List<ListenerLikesDTO>getLikedEntities(Long listenerId){
-        List<Like>likes=likeRepository.getLikesByListener_Id(listenerId);
+        List<MusicalEntityDTO>likedEntities=results.stream()
+        .map(row->new MusicalEntityDTO((Long)row[0], (String)row[1], (String)row[2],(String)row[3]))
+        .toList();
+        
+        ListenerLikesDTO dto=new ListenerLikesDTO();
+        dto.setLikedEntities(likedEntities);
+        return dto;
+    }
+
+    @Transactional(readOnly = true)
+    public List<Playlist>getPlaylistsCreatedByUser(Long listenerId){
+        return playlistRepository.findByCreatorId(listenerId);
+    }
+}
 
 
-        return likes.stream().map(l -> new ListenerLikesDTO(
-                l.getMusicalEntity().getId(),
-                l.getMusicalEntity().getTitle(),
-                l.getMusicalEntity().getGenre(),
-                musicalEntityService.getEntityType(l.getMusicalEntity().getId())
-        )).toList();
-    }
-
-
-}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/MusicalEntityService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/MusicalEntityService.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/MusicalEntityService.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,49 +1,49 @@
-package com.ukim.finki.develop.finkwave.service;
+// package com.ukim.finki.develop.finkwave.service;
 
-import com.ukim.finki.develop.finkwave.model.Album;
-import com.ukim.finki.develop.finkwave.model.MusicalEntity;
-import com.ukim.finki.develop.finkwave.model.Song;
-import com.ukim.finki.develop.finkwave.model.dto.ArtistMusicalEntitiesDTO;
-import com.ukim.finki.develop.finkwave.repository.AlbumRepository;
-import com.ukim.finki.develop.finkwave.repository.MusicalEntityRepository;
-import com.ukim.finki.develop.finkwave.repository.SongRepository;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
+// import com.ukim.finki.develop.finkwave.model.Album;
+// import com.ukim.finki.develop.finkwave.model.MusicalEntity;
+// import com.ukim.finki.develop.finkwave.model.Song;
+// import com.ukim.finki.develop.finkwave.model.dto.ArtistMusicalEntitiesDTO;
+// import com.ukim.finki.develop.finkwave.repository.AlbumRepository;
+// import com.ukim.finki.develop.finkwave.repository.MusicalEntityRepository;
+// import com.ukim.finki.develop.finkwave.repository.SongRepository;
+// import lombok.AllArgsConstructor;
+// import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
+// import java.util.ArrayList;
+// import java.util.Collections;
+// import java.util.List;
+// import java.util.stream.Collectors;
 
-@Service
-@AllArgsConstructor
-public class MusicalEntityService {
+// @Service
+// @AllArgsConstructor
+// public class MusicalEntityService {
 
-    private final MusicalEntityRepository musicalEntityRepository;
-    private final SongRepository songRepository;
-    private final AlbumRepository albumRepository;
+//     private final MusicalEntityRepository musicalEntityRepository;
+//     private final SongRepository songRepository;
+//     private final AlbumRepository albumRepository;
 
-    public ArtistMusicalEntitiesDTO getArtistMusicalEntities(Long artistId){
-        List<Long>entitiesIDs=musicalEntityRepository.findAllByReleasedBy_Id(artistId).stream()
-                .map(MusicalEntity::getId)
-                .toList();
+//     public ArtistMusicalEntitiesDTO getArtistMusicalEntities(Long artistId){
+//         List<Long>entitiesIDs=musicalEntityRepository.findAllByReleasedBy_Id(artistId).stream()
+//                 .map(MusicalEntity::getId)
+//                 .toList();
 
-        if (entitiesIDs.isEmpty()) {
-            return new ArtistMusicalEntitiesDTO(Collections.emptyList(), Collections.emptyList());
-        }
+//         if (entitiesIDs.isEmpty()) {
+//             return new ArtistMusicalEntitiesDTO(Collections.emptyList(), Collections.emptyList());
+//         }
 
-        // bulk fetching
-        List<Song> songs = songRepository.findAllByIdIn(entitiesIDs);
+//         // bulk fetching
+//         List<Song> songs = songRepository.findAllByIdIn(entitiesIDs);
 
-        List<Album> albums = albumRepository.findAllByIdIn(entitiesIDs);
+//         List<Album> albums = albumRepository.findAllByIdIn(entitiesIDs);
 
-        return new ArtistMusicalEntitiesDTO(songs, albums);
-    }
+//         return new ArtistMusicalEntitiesDTO(songs, albums);
+//     }
 
-    public String getEntityType(Long id) {
-        if (songRepository.existsById(id)) return "Song";
-        if (albumRepository.existsById(id)) return "Album";
-        return "Unknown";
-    }
+//     public String getEntityType(Long id) {
+//         if (songRepository.existsById(id)) return "Song";
+//         if (albumRepository.existsById(id)) return "Album";
+//         return "Unknown";
+//     }
 
-}
+// }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -4,6 +4,6 @@
 import com.ukim.finki.develop.finkwave.model.Listener;
 import com.ukim.finki.develop.finkwave.model.NonAdminUser;
-import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDTO;
-import com.ukim.finki.develop.finkwave.model.dto.NonAdminUserDTO;
+import com.ukim.finki.develop.finkwave.model.Playlist;
+import com.ukim.finki.develop.finkwave.model.dto.*;
 import com.ukim.finki.develop.finkwave.repository.ArtistRepository;
 import com.ukim.finki.develop.finkwave.repository.FollowRepository;
@@ -13,7 +13,6 @@
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
-
+import org.springframework.transaction.annotation.Transactional;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -27,30 +26,61 @@
     private final ArtistService artistService;
     private final ListenerService listenerService;
+    private final FollowRepository followRepository;
 
+    @Transactional(readOnly = true)
     public List<NonAdminUserDTO> getAllUsers() {
         return nonAdminUserRepository.findAllWithUser().stream()
                 .map(user -> {
                     String type = determineType(user.getId());
-                    return mapper.toDTO(user, type);
+                    Long followers = followRepository.countByFolloweeId(user.getId());
+                    Long following = followRepository.countByFollowerId(user.getId());
+                    return mapper.toDTO(user, type, followers, following);
                 })
                 .collect(Collectors.toList());
     }
 
+    @Transactional(readOnly = true)
     public NonAdminUserDTO getById(Long id) {
-        NonAdminUser userEntity = nonAdminUserRepository.findById(id)
-                .orElseThrow(() -> new RuntimeException("User not found with id: " + id));
-
-        String type = determineType(id);
-        NonAdminUserDTO dto = mapper.toDTO(userEntity, type);
-        if (type.equals("Artist")){
-            List<ArtistContributionDTO> workHistory = artistService.getArtistContributions(id);
-            dto.setContributions(workHistory);
-        }else if(type.equals("Listener")){
-            dto.setLikedEntities(listenerService.getLikedEntities(id));
+        Long followers=followRepository.countByFolloweeId(id);
+        Long following=followRepository.countByFollowerId(id);
+    
+        if (artistRepository.existsById(id)) {
+            return getArtistProfile(id,followers,following);
         }
-
-       return dto;
+      
+        if (listenerRepository.existsById(id)) {
+            return getListenerProfile(id,followers,following);
+        }
+        
+        throw new RuntimeException("User not found with id: " + id);
     }
 
+    private NonAdminUserDTO getArtistProfile(Long artistId, Long followers,Long following) {
+        Artist artist = artistRepository.findByIdWithUser(artistId)
+            .orElseThrow(() -> new RuntimeException("Artist not found with id: " + artistId));
+        
+      
+        ArtistMusicalEntitiesDTO entitiesDTO = new ArtistMusicalEntitiesDTO();
+        entitiesDTO.setContributions(artistService.getArtistContributions(artistId));
+        
+        return mapper.toArtistDTO(artist, entitiesDTO,followers,following);
+    }
+
+    private NonAdminUserDTO getListenerProfile(Long listenerId, Long followers,Long following) {
+        Listener listener = listenerRepository.findByIdWithUser(listenerId)
+            .orElseThrow(() -> new RuntimeException("Listener not found with id: " + listenerId));
+        
+        
+        ListenerLikesDTO likesDTO = listenerService.getLikedEntities(listenerId);
+        List<PlaylistDTO>playlists=listenerService.getPlaylistsCreatedByUser(listenerId).stream()
+                .map(p->new PlaylistDTO(
+                        p.getId(),
+                        p.getName(),
+                        p.getCover(),
+                        p.getCreatedBy().getNonAdminUser().getUser().getFullName()
+                )).toList();
+        
+        return mapper.toListenerDTO(listener, likesDTO,followers,following,playlists);
+    }
 
     private String determineType(Long id) {
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/mappers/NonAdminUserMapper.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/mappers/NonAdminUserMapper.java	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/mappers/NonAdminUserMapper.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,39 +1,58 @@
 package com.ukim.finki.develop.finkwave.service.mappers;
 
-import com.ukim.finki.develop.finkwave.model.ArtistContribution;
-import com.ukim.finki.develop.finkwave.model.MusicalEntity;
+import com.ukim.finki.develop.finkwave.model.Artist;
+
+import com.ukim.finki.develop.finkwave.model.Listener;
+
+import com.ukim.finki.develop.finkwave.model.Playlist;
+import com.ukim.finki.develop.finkwave.model.dto.ArtistMusicalEntitiesDTO;
+import com.ukim.finki.develop.finkwave.model.dto.ListenerLikesDTO;
+import com.ukim.finki.develop.finkwave.model.dto.NonAdminUserDTO;
 import com.ukim.finki.develop.finkwave.model.NonAdminUser;
-import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDTO;
-import com.ukim.finki.develop.finkwave.model.dto.NonAdminUserDTO;
-import com.ukim.finki.develop.finkwave.repository.ArtistContributionRepository;
-import com.ukim.finki.develop.finkwave.repository.FollowRepository;
-import com.ukim.finki.develop.finkwave.repository.MusicalEntityRepository;
-import lombok.AllArgsConstructor;
+import com.ukim.finki.develop.finkwave.model.dto.PlaylistDTO;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
 import java.util.List;
 
+
 @Component
-@AllArgsConstructor
 public class NonAdminUserMapper {
-    private final FollowRepository followRepository;
 
+    public NonAdminUserDTO toArtistDTO(Artist artist, ArtistMusicalEntitiesDTO entitiesDTO, Long followers, Long following) {
+        NonAdminUserDTO dto = createBaseDTO(
+            artist.getNonAdminUser(), 
+            "ARTIST", 
+            followers, 
+            following
+        );
+        dto.setMusicalEntities(entitiesDTO);
+        return dto;
+    }
 
+    public NonAdminUserDTO toListenerDTO(Listener listener, ListenerLikesDTO likesDTO, Long followers, Long following, List<PlaylistDTO>playlists) {
+        NonAdminUserDTO dto = createBaseDTO(
+            listener.getNonAdminUser(), 
+            "LISTENER", 
+            followers, 
+            following
+        );
+        dto.setLikes(likesDTO);
+        dto.setCreatedPlaylists(playlists);
+        return dto;
+    }
 
-    public NonAdminUserDTO toDTO(NonAdminUser entity, String type) {
-        if (entity == null) return null;
+    public NonAdminUserDTO toDTO(NonAdminUser user, String type,Long followers,Long following) {
+        return createBaseDTO(user, type, followers, following);
+    }
 
-        return new NonAdminUserDTO(
-                entity.getId(),
-                entity.getUser().getUsername(),
-                entity.getUser().getFullName(),
-                entity.getUser().getProfilePhoto(),
-                followRepository.countByFolloweeId(entity.getId()),
-                followRepository.countByFollowerId(entity.getId()),
-                type,
-                new ArrayList<>(),
-                new ArrayList<>()
-        );
+    private NonAdminUserDTO createBaseDTO(NonAdminUser user, String userType, Long followers, Long following) {
+        NonAdminUserDTO dto = new NonAdminUserDTO();
+        dto.setId(user.getId());
+        dto.setUsername(user.getUser().getUsername());
+        dto.setFullName(user.getUser().getFullName());
+        dto.setUserType(userType);
+        dto.setFollowers(followers);
+        dto.setFollowing(following);
+        return dto;
     }
 }
Index: frontend/src/components/userProfile/ArtistView.tsx
===================================================================
--- frontend/src/components/userProfile/ArtistView.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ frontend/src/components/userProfile/ArtistView.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -0,0 +1,55 @@
+import { useNavigate } from "react-router-dom";
+
+interface ArtistContributionDTO {
+  musicalEntityId: number;
+  title: string;
+  role: string;
+  entityType: string;
+}
+
+interface ArtistViewProps {
+  contributions: ArtistContributionDTO[];
+}
+
+const ArtistView = ({ contributions }: ArtistViewProps) => {
+  const navigate = useNavigate();
+
+  return (
+    <div className="mt-8 border-t pt-6">
+      <h2 className="text-2xl font-bold mb-4">Contributions</h2>
+      <div className="grid gap-3">
+        {contributions.map((contribution, index) => (
+          <div
+            key={index}
+            className="p-4 border rounded hover:shadow-md transition-shadow cursor-pointer"
+            onClick={() =>
+              navigate(`/musical-entity/${contribution.musicalEntityId}`)
+            }
+          >
+            <div className="flex justify-between items-center">
+              <div className="flex-1">
+                <p className="font-semibold text-lg">{contribution.title}</p>
+                <p className="text-sm text-gray-500 mt-1">
+                  ID: {contribution.musicalEntityId}
+                </p>
+              </div>
+              <div className="flex gap-2">
+                <span className="bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm font-medium">
+                  {contribution.role}
+                </span>
+                <span className="bg-gray-100 text-gray-800 px-3 py-1 rounded-full text-sm font-medium">
+                  {contribution.entityType}
+                </span>
+              </div>
+            </div>
+          </div>
+        ))}
+      </div>
+      {contributions.length === 0 && (
+        <p className="text-gray-500 text-center py-4">No contributions yet</p>
+      )}
+    </div>
+  );
+};
+
+export default ArtistView;
Index: frontend/src/components/userProfile/ListenerView.tsx
===================================================================
--- frontend/src/components/userProfile/ListenerView.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ frontend/src/components/userProfile/ListenerView.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -0,0 +1,147 @@
+import { useNavigate } from "react-router-dom";
+
+interface MusicalEntityDTO {
+  id: number;
+  title: string;
+  genre: string;
+  type: string;
+}
+
+interface Playlist {
+  id: number;
+  name: string;
+  cover: string;
+  creatorName: string;
+}
+
+interface ListenerViewProps {
+  likedEntities: MusicalEntityDTO[];
+  playlists?: Playlist[];
+}
+
+const ListenerView = ({ likedEntities, playlists }: ListenerViewProps) => {
+  const navigate = useNavigate();
+
+  return (
+    <div className="mt-8 border-t pt-6 space-y-10">
+      {/* --- PLAYLISTS SECTION --- */}
+      <section>
+        <h3 className="text-2xl font-bold mb-6 flex items-center gap-2">
+          <span>My Playlists</span>
+          <span className="text-sm font-normal text-gray-400">
+            ({playlists?.length})
+          </span>
+        </h3>
+
+        <div className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-6">
+          {playlists?.map((playlist) => (
+            <div
+              key={playlist.id}
+              className="group cursor-pointer"
+              onClick={() => navigate(`/playlist/${playlist.id}`)}
+            >
+              {/* Playlist Cover Container */}
+              <div className="aspect-square relative overflow-hidden rounded-xl shadow-md bg-gray-200 mb-3">
+                {playlist.cover ? (
+                  <img
+                    src={playlist.cover}
+                    alt={playlist.name}
+                    className="w-full h-full object-cover transition-transform duration-300 group-hover:scale-110"
+                  />
+                ) : (
+                  <div className="w-full h-full flex items-center justify-center bg-linear-to-br from-gray-300 to-gray-400 text-white">
+                    <svg
+                      xmlns="http://www.w3.org/2000/svg"
+                      className="h-12 w-12"
+                      fill="none"
+                      viewBox="0 0 24 24"
+                      stroke="currentColor"
+                    >
+                      <path
+                        strokeLinecap="round"
+                        strokeLinejoin="round"
+                        strokeWidth={2}
+                        d="M9 19V6l12-3v13M9 19c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zm12-3c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zM9 10l12-3"
+                      />
+                    </svg>
+                  </div>
+                )}
+                {/* Hover Overlay */}
+                <div className="absolute inset-0 bg-black/20 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center">
+                  <div className="bg-blue-500 p-3 rounded-full text-white shadow-xl transform translate-y-4 group-hover:translate-y-0 transition-transform">
+                    <svg
+                      xmlns="http://www.w3.org/2000/svg"
+                      className="h-6 w-6"
+                      fill="none"
+                      viewBox="0 0 24 24"
+                      stroke="currentColor"
+                    >
+                      <path
+                        strokeLinecap="round"
+                        strokeLinejoin="round"
+                        strokeWidth={2}
+                        d="M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"
+                      />
+                    </svg>
+                  </div>
+                </div>
+              </div>
+
+              <h4 className="font-bold text-gray-900 truncate group-hover:text-blue-600 transition-colors">
+                {playlist.name}
+              </h4>
+              <p className="text-xs text-gray-500 uppercase tracking-wider">
+                Playlist
+              </p>
+            </div>
+          ))}
+
+          {playlists?.length === 0 && (
+            <div className="col-span-full py-8 border-2 border-dashed border-gray-200 rounded-xl text-center">
+              <p className="text-gray-400">No playlists created yet</p>
+            </div>
+          )}
+        </div>
+      </section>
+
+      {/* --- LIKED MUSIC SECTION --- */}
+      <section>
+        <h3 className="text-2xl font-bold mb-4">Liked Music</h3>
+        <div className="grid gap-2">
+          {likedEntities.map((entity) => (
+            <div
+              key={entity.id}
+              className="p-4 bg-gray-50 rounded-lg border border-transparent hover:border-gray-200 hover:bg-white transition-all cursor-pointer group shadow-xs"
+              onClick={() => navigate(`/musical-entity/${entity.id}`)}
+            >
+              <div className="flex justify-between items-center">
+                <div className="flex-1">
+                  <span className="font-semibold text-gray-800 group-hover:text-blue-600">
+                    {entity.title}
+                  </span>
+                  <p className="text-sm text-gray-500 mt-1">{entity.genre}</p>
+                </div>
+                <span
+                  className={`px-3 py-1 rounded-full text-xs font-bold tracking-wider ${
+                    entity.type === "SONG"
+                      ? "bg-green-100 text-green-700"
+                      : "bg-blue-100 text-blue-700"
+                  }`}
+                >
+                  {entity.type}
+                </span>
+              </div>
+            </div>
+          ))}
+        </div>
+        {likedEntities.length === 0 && (
+          <p className="text-gray-500 text-center py-4 italic">
+            No liked music yet
+          </p>
+        )}
+      </section>
+    </div>
+  );
+};
+
+export default ListenerView;
Index: frontend/src/components/userProfile/UserDetail.tsx
===================================================================
--- frontend/src/components/userProfile/UserDetail.tsx	(revision efe76febc84767c79b12dc47ef59644804ce6f97)
+++ frontend/src/components/userProfile/UserDetail.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
@@ -1,4 +1,27 @@
 import { useEffect, useState } from "react";
 import { useParams, useNavigate } from "react-router-dom";
+import ArtistView from "./ArtistView";
+import ListenerView from "./ListenerView";
+
+interface MusicalEntityDTO {
+  id: number;
+  title: string;
+  genre: string;
+  type: string;
+}
+
+interface ArtistContributionDTO {
+  musicalEntityId: number;
+  title: string;
+  role: string;
+  entityType: string;
+}
+
+interface Playlist {
+  id: number;
+  name: string;
+  cover: string;
+  creatorName: string;
+}
 
 interface User {
@@ -6,20 +29,17 @@
   username: string;
   fullName: string;
-  followerCount: number;
-  followingCount: number;
   userType: string;
-  contributions?: {
-    role: string;
-    title: string;
-    musicalEntityId: number;
-    entityType: string;
-  }[];
+  followers: number;
+  following: number;
 
-  likedEntities?: {
-    entityId: number;
-    entityTitle: string;
-    entityGenre: string;
-    entityType: string;
-  }[];
+  musicalEntities?: {
+    contributions: ArtistContributionDTO[];
+  };
+
+  likes?: {
+    likedEntities: MusicalEntityDTO[];
+  };
+
+  createdPlaylists?: Playlist[];
 }
 
@@ -34,4 +54,5 @@
       const response = await fetch(`http://localhost:8080/users/${userId}`);
       const data = await response.json();
+      console.log("Fetched user data:", data);
       setUser(data);
     };
@@ -43,65 +64,55 @@
   return (
     <div className="container mx-auto p-6">
-      {/* <button
-        onClick={() => navigate("/allUsers")}
+      <button
+        onClick={() => navigate(-1)}
         className="mb-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
       >
-        ← Back to All Users
-      </button> */}
+        ← Back
+      </button>
+
       <div className="bg-white shadow-lg rounded-lg p-8">
-        <h1 className="text-4xl font-bold mb-4">{user.fullName}</h1>
-        <p className="text-gray-600 text-lg mb-2">Username: @{user.username}</p>
-        <p className="text-gray-600 text-lg mb-2">
-          Followers: {user.followerCount}
-        </p>
-        <p className="text-gray-600 text-lg mb-2">
-          Following: {user.followingCount}
-        </p>
-        <p>Type: {user.userType}</p>
-        {user.userType === "Artist" && user.contributions && (
-          <div className="mt-8 border-t pt-6">
-            <h2 className="text-2xl font-bold mb-4">Discography</h2>
-            <div className="grid gap-3">
-              {user.contributions.map((item, index) => (
-                <div
-                  key={index}
-                  className="p-4 border rounded flex justify-between items-center"
-                >
-                  <div>
-                    <p className="font-semibold">{item.title}</p>
-                    <p className="text-sm text-gray-500">{item.entityType}</p>
-                  </div>
-                  <span className="bg-gray-100 px-3 py-1 rounded-full text-sm font-medium">
-                    {item.role}
-                  </span>
-                  <span className="bg-gray-100 px-3 py-1 rounded-full text-sm font-medium">
-                    {item.musicalEntityId}
-                  </span>
-                </div>
-              ))}
+        {/* Profile Header */}
+        <div className="flex items-start gap-6 mb-8">
+          {/* Profile Photo */}
+          <div className="shrink-0">
+            <div className="w-32 h-32 rounded-full bg-linear-to-br from-blue-400 to-purple-500 flex items-center justify-center text-white text-4xl font-bold shadow-lg">
+              {user.fullName.charAt(0).toUpperCase()}
             </div>
           </div>
+
+          {/* User Info */}
+          <div className="flex-1">
+            <h1 className="text-4xl font-bold mb-2">{user.fullName}</h1>
+            <span className="inline-block px-3 py-1 bg-blue-100 text-blue-800 rounded-full text-sm font-medium mb-4">
+              {user.userType}
+            </span>
+
+            {/* Followers/Following Stats */}
+            <div className="flex gap-6 mb-4 text-gray-700">
+              <div className="flex flex-col">
+                <span className="text-2xl font-bold">{user.followers}</span>
+                <span className="text-sm text-gray-500">Followers</span>
+              </div>
+              <div className="flex flex-col">
+                <span className="text-2xl font-bold">{user.following}</span>
+                <span className="text-sm text-gray-500">Following</span>
+              </div>
+            </div>
+
+            <button className="px-6 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors font-medium">
+              Follow
+            </button>
+          </div>
+        </div>
+
+        {user.userType === "ARTIST" && user.musicalEntities?.contributions && (
+          <ArtistView contributions={user.musicalEntities.contributions} />
         )}
 
-        {user.userType === "Listener" && user.likedEntities && (
-          <div>
-            <h3 className="text-2xl font-bold mb-4">Liked Songs & Albums</h3>
-            <div className="grid gap-2">
-              {user.likedEntities.map((like) => (
-                <div
-                  key={like.entityId}
-                  className="p-3 bg-gray-50 rounded flex justify-between"
-                >
-                  <span>{like.entityTitle}</span>
-                  <span className="text-sm text-gray-400">
-                    {like.entityType}
-                  </span>
-                  <span className="text-sm text-gray-400">
-                    {like.entityGenre}
-                  </span>
-                </div>
-              ))}
-            </div>
-          </div>
+        {user.userType === "LISTENER" && user.likes?.likedEntities && (
+          <ListenerView
+            likedEntities={user.likes.likedEntities}
+            playlists={user.createdPlaylists}
+          />
         )}
       </div>
