Changeset 8a47b30
- Timestamp:
- 02/07/26 18:36:59 (5 months ago)
- Branches:
- main
- Children:
- 9c1dcc7
- Parents:
- dc30259
- Files:
-
- 8 added
- 9 edited
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/SongController.java (modified) (2 diffs)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistContributionSummaryDto.java (added)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistDto.java (modified) (1 diff)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/MusicalEntityDto.java (modified) (2 diffs)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ReviewDto.java (added)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/SongDetailsDto.java (added)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/SongDto.java (added)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java (modified) (2 diffs)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ReviewRepository.java (modified) (2 diffs)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java (modified) (2 diffs)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ArtistContributionService.java (added)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ReviewService.java (added)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/SongService.java (modified) (3 diffs)
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/mappers/SongDetailsMapper.java (added)
-
frontend/src/App.tsx (modified) (2 diffs)
-
frontend/src/pages/SongDetail.tsx (added)
-
frontend/src/utils/types.ts (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/SongController.java
rdc30259 r8a47b30 3 3 import com.ukim.finki.develop.finkwave.model.dto.BasicSongDto; 4 4 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto; 5 import com.ukim.finki.develop.finkwave.model.dto.SongDetailsDto; 5 6 import com.ukim.finki.develop.finkwave.repository.SongRepository; 6 7 import com.ukim.finki.develop.finkwave.service.AuthService; 7 8 import com.ukim.finki.develop.finkwave.service.SongService; 8 9 import lombok.AllArgsConstructor; 10 import org.springframework.data.repository.query.Param; 9 11 import org.springframework.http.HttpEntity; 10 12 import org.springframework.http.ResponseEntity; 11 import org.springframework.web.bind.annotation.GetMapping; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RequestParam; 14 import org.springframework.web.bind.annotation.RestController; 13 import org.springframework.web.bind.annotation.*; 15 14 16 15 import java.util.List; … … 37 36 return ResponseEntity.ok(songService.getRecentlyListened()); 38 37 } 38 39 @GetMapping("/{songId}/details") 40 public HttpEntity<SongDetailsDto> getSongById(@PathVariable Long songId){ 41 return ResponseEntity.ok(songService.getSongDetails(songId)); 42 } 39 43 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistDto.java
rdc30259 r8a47b30 9 9 @Setter 10 10 public class ArtistDto extends NonAdminUserDto { 11 12 13 11 private List<ArtistContributionDto> contributions; 14 15 12 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/MusicalEntityDto.java
rdc30259 r8a47b30 4 4 import lombok.AllArgsConstructor; 5 5 import lombok.Getter; 6 import lombok.NoArgsConstructor; 6 7 import lombok.Setter; 7 8 … … 9 10 @Getter 10 11 @Setter 12 @NoArgsConstructor 11 13 public class MusicalEntityDto { 12 14 private Long id; -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java
rdc30259 r8a47b30 2 2 3 3 import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDto; 4 import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionSummaryDto; 4 5 import org.springframework.data.jpa.repository.JpaRepository; 5 6 import org.springframework.data.jpa.repository.Query; … … 28 29 """) 29 30 List<ArtistContributionDto>findContributionsByArtistId(@Param("currentUserId")Long currentUserId,@Param("artistId")Long artistId); 31 32 33 @Query(""" 34 SELECT NEW com.ukim.finki.develop.finkwave.model.dto.ArtistContributionSummaryDto( 35 ac.artist.nonAdminUser.user.fullName, ac.role 36 ) 37 FROM ArtistContribution ac 38 WHERE ac.id.musicalEntityId = :songId 39 """) 40 List<ArtistContributionSummaryDto> findContributionsBySongId(@Param("songId")Long songId); 30 41 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ReviewRepository.java
rdc30259 r8a47b30 1 1 package com.ukim.finki.develop.finkwave.repository; 2 2 3 import com.ukim.finki.develop.finkwave.model.dto.ReviewDto; 3 4 import org.springframework.data.jpa.repository.JpaRepository; 5 import org.springframework.data.jpa.repository.Query; 6 import org.springframework.data.repository.query.Param; 4 7 import org.springframework.stereotype.Repository; 5 8 … … 7 10 import com.ukim.finki.develop.finkwave.model.ReviewId; 8 11 12 import java.util.List; 13 9 14 @Repository 10 15 public interface ReviewRepository extends JpaRepository<Review, ReviewId> { 16 @Query(""" 17 SELECT NEW com.ukim.finki.develop.finkwave.model.dto.ReviewDto( 18 r.id, 19 r.listener.nonAdminUser.user.fullName, 20 r.grade, 21 r.comment 22 ) 23 FROM Review r 24 WHERE r.id.musicalEntityId = :songId 25 """) 26 List<ReviewDto> getReviewsForSongId(@Param("songId") Long songId); 11 27 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java
rdc30259 r8a47b30 3 3 import com.ukim.finki.develop.finkwave.model.dto.BasicSongDto; 4 4 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto; 5 import com.ukim.finki.develop.finkwave.model.dto.SongDto; 5 6 import org.springframework.data.jpa.repository.JpaRepository; 6 7 import org.springframework.data.jpa.repository.Query; 7 8 import org.springframework.data.repository.query.Param; 9 import org.springframework.security.core.parameters.P; 8 10 import org.springframework.stereotype.Repository; 9 11 … … 96 98 """, nativeQuery = true) 97 99 List<BasicSongDto> getRecentlyListened(@Param("userId")Long userId); 100 101 @Query(value = """ 102 SELECT NEW com.ukim.finki.develop.finkwave.model.dto.SongDto( 103 s.id, 104 me.title, 105 me.genre, 106 'SONG', 107 u.fullName, 108 me.cover, 109 (EXISTS ( 110 SELECT 1 FROM Like l 111 WHERE l.musicalEntity.id = s.id 112 AND l.listener.id = :userId 113 )), 114 albumMe.title, 115 s.link 116 ) 117 FROM Song s 118 JOIN s.musicalEntities me 119 JOIN me.releasedBy a 120 JOIN a.nonAdminUser nau 121 JOIN nau.user u 122 LEFT JOIN s.album album 123 LEFT JOIN album.musicalEntities albumMe 124 WHERE s.id = :songId 125 """) 126 SongDto getSongById(@Param("songId") Long songId, @Param("userId") Long userId); 98 127 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/SongService.java
rdc30259 r8a47b30 1 1 package com.ukim.finki.develop.finkwave.service; 2 2 3 import com.ukim.finki.develop.finkwave.model.dto.BasicSongDto; 4 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto; 3 import com.ukim.finki.develop.finkwave.model.dto.*; 5 4 import com.ukim.finki.develop.finkwave.repository.SongRepository; 5 import com.ukim.finki.develop.finkwave.service.mappers.SongDetailsMapper; 6 6 import lombok.AllArgsConstructor; 7 7 import org.springframework.stereotype.Service; … … 14 14 private final SongRepository songRepository; 15 15 private final AuthService authService; 16 private final ArtistContributionService artistContributionService; 17 private final ReviewService reviewService; 18 private final SongDetailsMapper songDetailsMapper; 16 19 17 20 public List<MusicalEntityDto> getTopSongs(){ … … 32 35 return songRepository.getRecentlyListened(userId); 33 36 } 37 38 public MusicalEntityDto getSongById(Long songId){ 39 Long userId = null; 40 try { 41 userId = authService.getCurrentUserID(); 42 } catch (Exception ignored) {} 43 return songRepository.getSongById(songId, userId); 44 } 45 46 public SongDetailsDto getSongDetails(Long songId){ 47 Long userId = null; 48 try { 49 userId = authService.getCurrentUserID(); 50 } catch (Exception ignored){} 51 SongDto songDto = songRepository.getSongById(songId, userId); 52 List<ArtistContributionSummaryDto> contributionsBySongId = artistContributionService.getContributionsBySongId(songId); 53 List<ReviewDto> reviewsForSongId = reviewService.getReviewsForSongId(songId); 54 return songDetailsMapper.toSongDetailsDto(songDto, contributionsBySongId, reviewsForSongId); 55 } 34 56 } -
frontend/src/App.tsx
rdc30259 r8a47b30 17 17 import Nav from "./pages/Nav"; 18 18 import Register from "./pages/Register"; 19 import SongDetail from "./pages/SongDetail"; 19 20 import UserDetail from "./pages/UserDetail"; 20 21 … … 99 100 }, 100 101 { 102 path: "/songs/:id", 103 element: <SongDetail />, 104 }, 105 { 101 106 path: "/collection/:type/:id", 102 107 element: <MusicalCollection />, -
frontend/src/utils/types.ts
rdc30259 r8a47b30 64 64 } 65 65 66 export interface SongContribution { 67 artistName: string; 68 role: string; 69 } 70 71 export interface SongReview { 72 id: { 73 listenerId: number; 74 musicalEntityId: number; 75 }; 76 author: string; 77 grade: number; 78 comment: string; 79 } 80 81 export interface SongDetail extends MusicalEntity { 82 type: "SONG"; 83 album?: string | null; 84 link?: string | null; 85 contributions: SongContribution[]; 86 reviews: SongReview[]; 87 } 88 66 89 export interface BasicSong { 67 90 id: number;
Note:
See TracChangeset
for help on using the changeset viewer.
