Changeset efe76fe
- Timestamp:
- 01/26/26 09:48:20 (6 months ago)
- Branches:
- main
- Children:
- fd81a18
- Parents:
- 0d9725c
- Location:
- finkwave/src/main/java/com/ukim/finki/develop/finkwave
- Files:
-
- 18 edited
-
controller/NonAdminUserController.java (modified) (1 diff)
-
controller/UserController.java (modified) (1 diff)
-
model/dto/ArtistContributionDTO.java (modified) (1 diff)
-
model/dto/ArtistMusicalEntitiesDTO.java (modified) (1 diff)
-
model/dto/ListenerLikesDTO.java (modified) (1 diff)
-
model/dto/NonAdminUserDTO.java (modified) (1 diff)
-
repository/AlbumRepository.java (modified) (1 diff)
-
repository/ArtistContributionRepository.java (modified) (1 diff)
-
repository/FollowRepository.java (modified) (1 diff)
-
repository/LikeRepository.java (modified) (1 diff)
-
repository/MusicalEntityRepository.java (modified) (1 diff)
-
repository/NonAdminUserRepository.java (modified) (1 diff)
-
repository/SongRepository.java (modified) (1 diff)
-
service/ArtistService.java (modified) (1 diff)
-
service/ListenerService.java (modified) (1 diff)
-
service/MusicalEntityService.java (modified) (1 diff)
-
service/NonAdminUserService.java (modified) (1 diff)
-
service/mappers/NonAdminUserMapper.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/NonAdminUserController.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.controller; 2 2 3 import com.ukim.finki.develop.finkwave.model.NonAdminUser; 4 import com.ukim.finki.develop.finkwave.model.dto.NonAdminUserDTO; 5 import com.ukim.finki.develop.finkwave.service.NonAdminUserService; 6 import lombok.RequiredArgsConstructor; 7 import org.springframework.http.HttpEntity; 8 import org.springframework.http.ResponseEntity; 9 import org.springframework.web.bind.annotation.*; 10 11 import java.util.List; 12 13 @RestController 14 @CrossOrigin("*") 15 @RequiredArgsConstructor 16 @RequestMapping("/users") 3 17 public class NonAdminUserController { 18 19 private final NonAdminUserService nonAdminUserService; 20 21 @GetMapping("/all") 22 public HttpEntity<List<NonAdminUserDTO>>getAllNonAdminUsers(){ 23 return ResponseEntity.ok(nonAdminUserService.getAllUsers()); 24 } 25 26 @GetMapping("/{id}") 27 public HttpEntity<NonAdminUserDTO>getById(@PathVariable Long id){ 28 return ResponseEntity.ok(nonAdminUserService.getById(id)); 29 } 4 30 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/UserController.java
r0d9725c refe76fe 22 22 return ResponseEntity.ok(usersService.getAll()); 23 23 } 24 25 24 26 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistContributionDTO.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.model.dto; 2 2 3 import lombok.AllArgsConstructor; 4 import lombok.Getter; 5 import lombok.Setter; 6 7 @Getter 8 @Setter 9 @AllArgsConstructor 3 10 public class ArtistContributionDTO { 11 private String role; 12 private Long musicalEntityId; 13 private String title; 14 private String entityType; 4 15 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistMusicalEntitiesDTO.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.model.dto; 2 2 3 import com.ukim.finki.develop.finkwave.model.Album; 4 import com.ukim.finki.develop.finkwave.model.Song; 5 import lombok.AllArgsConstructor; 6 import lombok.Getter; 7 import lombok.Setter; 8 9 import java.util.List; 10 11 @Getter 12 @Setter 13 @AllArgsConstructor 3 14 public class ArtistMusicalEntitiesDTO { 15 private List<Song> songs; 16 private List<Album> albums; 4 17 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ListenerLikesDTO.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.model.dto; 2 2 3 import lombok.AllArgsConstructor; 4 import lombok.Getter; 5 import lombok.Setter; 6 7 @Setter 8 @Getter 9 @AllArgsConstructor 3 10 public class ListenerLikesDTO { 11 private Long entityId; 12 private String entityTitle; 13 private String entityGenre; 14 private String entityType; 4 15 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/NonAdminUserDTO.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.model.dto; 2 2 3 import lombok.AllArgsConstructor; 4 import lombok.Getter; 5 import lombok.NoArgsConstructor; 6 import lombok.Setter; 7 8 import java.util.List; 9 10 @Getter 11 @Setter 12 @AllArgsConstructor 13 @NoArgsConstructor 3 14 public class NonAdminUserDTO { 15 private Long Id; 16 private String username; 17 private String fullName; 18 private String profilePhoto; 19 private Long followerCount; 20 private Long followingCount; 21 private String userType; 22 // is it best practice to have this empty in listeners? 23 private List<ArtistContributionDTO> contributions; 24 private List<ListenerLikesDTO> likedEntities; 4 25 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/AlbumRepository.java
r0d9725c refe76fe 6 6 import com.ukim.finki.develop.finkwave.model.Album; 7 7 8 import java.util.List; 9 8 10 @Repository 9 11 public interface AlbumRepository extends JpaRepository<Album, Long> { 12 13 List<Album>findAllByIdIn(List<Long>ids); 10 14 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java
r0d9725c refe76fe 7 7 import com.ukim.finki.develop.finkwave.model.ArtistContributionId; 8 8 9 import java.util.List; 10 9 11 @Repository 10 12 public interface ArtistContributionRepository extends JpaRepository<ArtistContribution, ArtistContributionId> { 13 14 List<ArtistContribution>findAllByArtist_Id(Long id); 11 15 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/FollowRepository.java
r0d9725c refe76fe 9 9 @Repository 10 10 public interface FollowRepository extends JpaRepository<Follow, FollowId> { 11 12 // count how many followers the user has 13 long countByFolloweeId(Long userId); 14 15 //count how many users does this user follow 16 long countByFollowerId(Long userId); 17 11 18 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/LikeRepository.java
r0d9725c refe76fe 7 7 import com.ukim.finki.develop.finkwave.model.LikeId; 8 8 9 import java.util.List; 10 9 11 @Repository 10 12 public interface LikeRepository extends JpaRepository<Like, LikeId> { 13 List<Like>getLikesByListener_Id(Long id); 11 14 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/MusicalEntityRepository.java
r0d9725c refe76fe 6 6 import com.ukim.finki.develop.finkwave.model.MusicalEntity; 7 7 8 import java.util.List; 9 8 10 @Repository 9 11 public interface MusicalEntityRepository extends JpaRepository<MusicalEntity, Long> { 12 13 List<MusicalEntity>findAllByReleasedBy_Id(Long id); 10 14 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/NonAdminUserRepository.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.repository; 2 2 3 import com.ukim.finki.develop.finkwave.model.dto.NonAdminUserDTO; 3 4 import org.springframework.data.jpa.repository.JpaRepository; 5 import org.springframework.data.jpa.repository.Query; 4 6 import org.springframework.stereotype.Repository; 5 7 6 8 import com.ukim.finki.develop.finkwave.model.NonAdminUser; 7 9 10 import java.util.List; 11 8 12 @Repository 9 13 public interface NonAdminUserRepository extends JpaRepository<NonAdminUser, Long> { 14 15 @Query("SELECT n FROM NonAdminUser n JOIN FETCH n.user") 16 List<NonAdminUser> findAllWithUser(); 17 18 19 10 20 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java
r0d9725c refe76fe 6 6 import com.ukim.finki.develop.finkwave.model.Song; 7 7 8 import java.util.List; 9 8 10 @Repository 9 11 public interface SongRepository extends JpaRepository<Song, Long> { 12 13 List<Song>findAllByIdIn(List<Long>ids); 10 14 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ArtistService.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.service; 2 2 3 import com.ukim.finki.develop.finkwave.model.ArtistContribution; 4 import com.ukim.finki.develop.finkwave.model.Song; 5 import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDTO; 6 import com.ukim.finki.develop.finkwave.model.dto.ArtistMusicalEntitiesDTO; 7 import com.ukim.finki.develop.finkwave.repository.ArtistContributionRepository; 8 import lombok.AllArgsConstructor; 9 import org.springframework.stereotype.Service; 10 11 import java.util.ArrayList; 12 import java.util.List; 13 import java.util.stream.Collectors; 14 15 @Service 16 @AllArgsConstructor 3 17 public class ArtistService { 18 19 private final MusicalEntityService musicalEntityService; 20 private final ArtistContributionRepository contributionRepository; 21 22 23 public List<ArtistContributionDTO> getArtistContributions(Long id){ 24 25 ArtistMusicalEntitiesDTO artistMusicalEntities=musicalEntityService.getArtistMusicalEntities(id); 26 List<ArtistContribution>contributions=contributionRepository.findAllByArtist_Id(id); 27 return contributions.stream().map(c -> { 28 boolean isSong = artistMusicalEntities.getSongs().stream() 29 .anyMatch(s -> s.getId().equals(c.getMusicalEntity().getId())); 30 31 return new ArtistContributionDTO( 32 c.getRole(), 33 c.getMusicalEntity().getId(), 34 c.getMusicalEntity().getTitle(), 35 isSong ? "Song" : "Album" 36 ); 37 }).collect(Collectors.toList()); 38 } 39 4 40 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ListenerService.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.service; 2 2 3 import com.ukim.finki.develop.finkwave.model.Album; 4 import com.ukim.finki.develop.finkwave.model.Like; 5 import com.ukim.finki.develop.finkwave.model.MusicalEntity; 6 import com.ukim.finki.develop.finkwave.model.Song; 7 import com.ukim.finki.develop.finkwave.model.dto.ArtistMusicalEntitiesDTO; 8 import com.ukim.finki.develop.finkwave.model.dto.ListenerLikesDTO; 9 import com.ukim.finki.develop.finkwave.repository.AlbumRepository; 10 import com.ukim.finki.develop.finkwave.repository.LikeRepository; 11 import com.ukim.finki.develop.finkwave.repository.SongRepository; 12 import lombok.AllArgsConstructor; 13 import org.springframework.stereotype.Service; 14 15 import java.util.ArrayList; 16 import java.util.List; 17 import java.util.stream.Collectors; 18 19 @Service 20 @AllArgsConstructor 3 21 public class ListenerService { 22 private final LikeRepository likeRepository; 23 private final MusicalEntityService musicalEntityService; 24 25 public List<ListenerLikesDTO>getLikedEntities(Long listenerId){ 26 List<Like>likes=likeRepository.getLikesByListener_Id(listenerId); 27 28 29 return likes.stream().map(l -> new ListenerLikesDTO( 30 l.getMusicalEntity().getId(), 31 l.getMusicalEntity().getTitle(), 32 l.getMusicalEntity().getGenre(), 33 musicalEntityService.getEntityType(l.getMusicalEntity().getId()) 34 )).toList(); 35 } 36 37 4 38 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/MusicalEntityService.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.service; 2 2 3 import com.ukim.finki.develop.finkwave.model.Album; 4 import com.ukim.finki.develop.finkwave.model.MusicalEntity; 5 import com.ukim.finki.develop.finkwave.model.Song; 6 import com.ukim.finki.develop.finkwave.model.dto.ArtistMusicalEntitiesDTO; 7 import com.ukim.finki.develop.finkwave.repository.AlbumRepository; 8 import com.ukim.finki.develop.finkwave.repository.MusicalEntityRepository; 9 import com.ukim.finki.develop.finkwave.repository.SongRepository; 10 import lombok.AllArgsConstructor; 11 import org.springframework.stereotype.Service; 12 13 import java.util.ArrayList; 14 import java.util.Collections; 15 import java.util.List; 16 import java.util.stream.Collectors; 17 18 @Service 19 @AllArgsConstructor 3 20 public class MusicalEntityService { 21 22 private final MusicalEntityRepository musicalEntityRepository; 23 private final SongRepository songRepository; 24 private final AlbumRepository albumRepository; 25 26 public ArtistMusicalEntitiesDTO getArtistMusicalEntities(Long artistId){ 27 List<Long>entitiesIDs=musicalEntityRepository.findAllByReleasedBy_Id(artistId).stream() 28 .map(MusicalEntity::getId) 29 .toList(); 30 31 if (entitiesIDs.isEmpty()) { 32 return new ArtistMusicalEntitiesDTO(Collections.emptyList(), Collections.emptyList()); 33 } 34 35 // bulk fetching 36 List<Song> songs = songRepository.findAllByIdIn(entitiesIDs); 37 38 List<Album> albums = albumRepository.findAllByIdIn(entitiesIDs); 39 40 return new ArtistMusicalEntitiesDTO(songs, albums); 41 } 42 43 public String getEntityType(Long id) { 44 if (songRepository.existsById(id)) return "Song"; 45 if (albumRepository.existsById(id)) return "Album"; 46 return "Unknown"; 47 } 48 4 49 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.service; 2 2 3 import com.ukim.finki.develop.finkwave.model.Artist; 4 import com.ukim.finki.develop.finkwave.model.Listener; 5 import com.ukim.finki.develop.finkwave.model.NonAdminUser; 6 import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDTO; 7 import com.ukim.finki.develop.finkwave.model.dto.NonAdminUserDTO; 8 import com.ukim.finki.develop.finkwave.repository.ArtistRepository; 9 import com.ukim.finki.develop.finkwave.repository.FollowRepository; 10 import com.ukim.finki.develop.finkwave.repository.ListenerRepository; 11 import com.ukim.finki.develop.finkwave.repository.NonAdminUserRepository; 12 import com.ukim.finki.develop.finkwave.service.mappers.NonAdminUserMapper; 13 import lombok.AllArgsConstructor; 14 import org.springframework.stereotype.Service; 15 16 import java.util.List; 17 import java.util.Optional; 18 import java.util.stream.Collectors; 19 20 @Service 21 @AllArgsConstructor 3 22 public class NonAdminUserService { 23 private final NonAdminUserRepository nonAdminUserRepository; 24 private final ListenerRepository listenerRepository; 25 private final ArtistRepository artistRepository; 26 private final NonAdminUserMapper mapper; 27 private final ArtistService artistService; 28 private final ListenerService listenerService; 29 30 public List<NonAdminUserDTO> getAllUsers() { 31 return nonAdminUserRepository.findAllWithUser().stream() 32 .map(user -> { 33 String type = determineType(user.getId()); 34 return mapper.toDTO(user, type); 35 }) 36 .collect(Collectors.toList()); 37 } 38 39 public NonAdminUserDTO getById(Long id) { 40 NonAdminUser userEntity = nonAdminUserRepository.findById(id) 41 .orElseThrow(() -> new RuntimeException("User not found with id: " + id)); 42 43 String type = determineType(id); 44 NonAdminUserDTO dto = mapper.toDTO(userEntity, type); 45 if (type.equals("Artist")){ 46 List<ArtistContributionDTO> workHistory = artistService.getArtistContributions(id); 47 dto.setContributions(workHistory); 48 }else if(type.equals("Listener")){ 49 dto.setLikedEntities(listenerService.getLikedEntities(id)); 50 } 51 52 return dto; 53 } 54 55 56 private String determineType(Long id) { 57 if (artistRepository.existsById(id)) { 58 return "Artist"; 59 } else if (listenerRepository.existsById(id)) { 60 return "Listener"; 61 } 62 return "Admin"; 63 } 4 64 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/mappers/NonAdminUserMapper.java
r0d9725c refe76fe 1 1 package com.ukim.finki.develop.finkwave.service.mappers; 2 2 3 import com.ukim.finki.develop.finkwave.model.ArtistContribution; 4 import com.ukim.finki.develop.finkwave.model.MusicalEntity; 5 import com.ukim.finki.develop.finkwave.model.NonAdminUser; 6 import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDTO; 7 import com.ukim.finki.develop.finkwave.model.dto.NonAdminUserDTO; 8 import com.ukim.finki.develop.finkwave.repository.ArtistContributionRepository; 9 import com.ukim.finki.develop.finkwave.repository.FollowRepository; 10 import com.ukim.finki.develop.finkwave.repository.MusicalEntityRepository; 11 import lombok.AllArgsConstructor; 12 import org.springframework.stereotype.Component; 13 14 import java.util.ArrayList; 15 import java.util.List; 16 17 @Component 18 @AllArgsConstructor 3 19 public class NonAdminUserMapper { 20 private final FollowRepository followRepository; 21 22 23 24 public NonAdminUserDTO toDTO(NonAdminUser entity, String type) { 25 if (entity == null) return null; 26 27 return new NonAdminUserDTO( 28 entity.getId(), 29 entity.getUser().getUsername(), 30 entity.getUser().getFullName(), 31 entity.getUser().getProfilePhoto(), 32 followRepository.countByFolloweeId(entity.getId()), 33 followRepository.countByFollowerId(entity.getId()), 34 type, 35 new ArrayList<>(), 36 new ArrayList<>() 37 ); 38 } 4 39 }
Note:
See TracChangeset
for help on using the changeset viewer.
