Changeset 8dd3e22
- Timestamp:
- 02/09/26 20:44:24 (5 months ago)
- Branches:
- main
- Children:
- 27660af
- Parents:
- c684a6d
- Files:
-
- 3 added
- 7 edited
-
finkwave/.gitignore (modified) (1 diff)
-
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/MusicalEntitesByArtistDto.java (added)
-
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/SongService.java (modified) (1 diff)
-
frontend/src/App.tsx (modified) (3 diffs)
-
frontend/src/pages/MySongs.tsx (added)
-
frontend/src/pages/Nav.tsx (modified) (2 diffs)
-
frontend/src/pages/PublishSong.tsx (added)
-
frontend/src/utils/types.ts (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
finkwave/.gitignore
rc684a6d r8dd3e22 32 32 ### VS Code ### 33 33 .vscode/ 34 application .properties34 application*.properties 35 35 36 36 uploads/profile-pictures/* -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/SongController.java
rc684a6d r8dd3e22 1 1 package com.ukim.finki.develop.finkwave.controller; 2 2 3 import com.ukim.finki.develop.finkwave.model.dto.BasicSongDto; 4 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto; 5 import com.ukim.finki.develop.finkwave.model.dto.SongDetailsDto; 6 import com.ukim.finki.develop.finkwave.model.dto.SongDto; 3 import com.ukim.finki.develop.finkwave.model.dto.*; 7 4 import com.ukim.finki.develop.finkwave.repository.SongRepository; 8 5 import com.ukim.finki.develop.finkwave.service.AuthService; … … 42 39 return ResponseEntity.ok(songService.getSongDetails(songId)); 43 40 } 41 42 @GetMapping("/catalog") 43 public HttpEntity<List<MusicalEntitesByArtistDto>> getArtistCatalog(){ 44 List<MusicalEntitesByArtistDto> artistCatalog = songService.getArtistCatalog(); 45 return ResponseEntity.ok(artistCatalog); 46 } 44 47 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java
rc684a6d r8dd3e22 3 3 import java.util.List; 4 4 5 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntitesByArtistDto; 5 6 import org.springframework.data.jpa.repository.JpaRepository; 6 7 import org.springframework.data.jpa.repository.Query; … … 155 156 """) 156 157 SongDto getSongById(@Param("songId") Long songId, @Param("userId") Long userId); 158 159 @Query(""" 160 SELECT new com.ukim.finki.develop.finkwave.model.dto.MusicalEntitesByArtistDto( 161 me.id, 162 me.title, 163 me.genre, 164 (CASE WHEN EXISTS (SELECT 1 from Song s where me.id = s.id and s.album is null) THEN 'SONG' ELSE 'ALBUM' END), 165 me.cover, 166 me.releaseDate 167 ) 168 FROM MusicalEntity me 169 WHERE me.releasedBy.id = :artistId 170 ORDER BY me.releaseDate DESC 171 """) 172 List<MusicalEntitesByArtistDto> getMusicalEntitiesReleasedByArtist(@Param("artistId")Long artistId); 157 173 } -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/SongService.java
rc684a6d r8dd3e22 54 54 return songDetailsMapper.toSongDetailsDto(songDto, contributionsBySongId, reviewsForSongId); 55 55 } 56 57 public List<MusicalEntitesByArtistDto> getArtistCatalog(){ 58 Long userId = authService.getCurrentUserID(); 59 return songRepository.getMusicalEntitiesReleasedByArtist(userId); 60 } 56 61 } -
frontend/src/App.tsx
rc684a6d r8dd3e22 17 17 import Login from "./pages/Login"; 18 18 import MusicalCollection from "./pages/MusicalCollection"; 19 import MySongs from "./pages/MySongs"; 19 20 import Nav from "./pages/Nav"; 21 import PublishSong from "./pages/PublishSong"; 20 22 import Register from "./pages/Register"; 21 23 import SongDetail from "./pages/SongDetail"; … … 28 30 // show sidebar only if user is logged in and is on the landing page 29 31 const isLandingPage = location.pathname === "/"; 30 const [isSidebarOpen, setIsSidebarOpen] = useState(!!user && isLandingPage); 32 const [isSidebarOpen, setIsSidebarOpen] = useState( 33 !!user && isLandingPage && !user?.isArtist && !user?.isAdmin, 34 ); 31 35 32 36 // Open sidebar when user logs in and navigates to landing page 33 37 useEffect(() => { 34 if (user && isLandingPage ) {38 if (user && isLandingPage && !user.isArtist && !user.isAdmin) { 35 39 setIsSidebarOpen(true); 36 40 } … … 104 108 }, 105 109 { 110 path: "/my-songs", 111 element: <MySongs />, 112 }, 113 { 114 path: "/publish", 115 element: <PublishSong />, 116 }, 117 { 106 118 path: "/songs/:id", 107 119 element: <SongDetail />, -
frontend/src/pages/Nav.tsx
rc684a6d r8dd3e22 22 22 setUser(undefined); 23 23 setIsDropdownOpen(false); 24 toast.success("Logout successful!"); 24 window.location.href = "/"; 25 // toast.success("Logout successful!"); 25 26 } catch (error) { 26 27 console.error("Logout failed:", error); … … 81 82 {!isAuthLoading && ( 82 83 <div className="flex items-center space-x-3"> 84 {user?.isArtist && ( 85 <Link 86 to="/my-songs" 87 className="text-white hover:text-[#1db954] px-4 py-2 text-sm font-medium transition-colors" 88 > 89 My Songs 90 </Link> 91 )} 83 92 {user ? ( 84 93 <div className="relative" ref={dropdownRef}> -
frontend/src/utils/types.ts
rc684a6d r8dd3e22 108 108 songCount: number; 109 109 } 110 111 export interface CatalogItem { 112 id: number; 113 title: string; 114 genre: string; 115 cover: string | null; 116 type: "SONG" | "ALBUM"; 117 releaseDate: string; 118 }
Note:
See TracChangeset
for help on using the changeset viewer.
