Skip to content

Commit

Permalink
Add route to change playlist description and add PlaylistsHelper
Browse files Browse the repository at this point in the history
  • Loading branch information
Bnyro committed May 29, 2023
1 parent 914afee commit 86152a4
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 16 deletions.
13 changes: 12 additions & 1 deletion src/main/java/me/kavin/piped/server/ServerLauncher.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ public class ServerLauncher extends MultithreadedHttpServerLauncher {
private static final HttpHeader FILE_NAME = HttpHeaders.of("x-file-name");
private static final HttpHeader LAST_ETAG = HttpHeaders.of("x-last-etag");


@Provides
Executor executor() {
return Multithreading.getCachedExecutor();
Expand Down Expand Up @@ -403,6 +402,18 @@ AsyncServlet mainServlet(Executor executor) {
} catch (Exception e) {
return getErrorResponse(e, request.getPath());
}
})).map(POST, "/user/playlists/description/change", AsyncServlet.ofBlocking(executor, request -> {
try {
var json = mapper.readTree(request.loadBody().getResult().asArray());
var playlistId = json.get("playlistId").textValue();
var description = json.get("description").textValue();
return getJsonResponse(
AuthPlaylistHandlers.editPlaylistDescriptionResponse(request.getHeader(AUTHORIZATION),
playlistId, description),
"private");
} catch (Exception e) {
return getErrorResponse(e, request.getPath());
}
})).map(GET, "/user/playlists", AsyncServlet.ofBlocking(executor, request -> {
try {
return getJsonResponse(AuthPlaylistHandlers.playlistsResponse(request.getHeader(AUTHORIZATION)), "private");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,17 +148,46 @@ public static byte[] renamePlaylistResponse(String session, String playlistId, S
ExceptionHandler.throwErrorResponse(new AuthenticationFailureResponse());

try (Session s = DatabaseSessionFactory.createSession()) {
var playlist = DatabaseHelper.getPlaylistFromId(s, playlistId);

if (playlist == null)
var playlistResult = PlaylistHelpers.getUserPlaylist(s, user, playlistId);
if (playlistResult.getError() != null) {
return mapper.writeValueAsBytes(mapper.createObjectNode()
.put("error", "Playlist not found"));
.put("error", playlistResult.getError()));
}
var playlist = playlistResult.getPlaylist();

if (playlist.getOwner().getId() != user.getId())
playlist.setName(newName);

var tr = s.beginTransaction();
s.merge(playlist);
tr.commit();

}

return mapper.writeValueAsBytes(new AcceptedResponse());
}

public static byte[] editPlaylistDescriptionResponse(String session, String playlistId, String newDescription)
throws IOException {

if (StringUtils.isBlank(session) || StringUtils.isBlank(playlistId) || StringUtils.isBlank(newDescription))
ExceptionHandler
.throwErrorResponse(
new InvalidRequestResponse("session, playlistId and description are required parameters"));

User user = DatabaseHelper.getUserFromSession(session);

if (user == null)
ExceptionHandler.throwErrorResponse(new AuthenticationFailureResponse());

try (Session s = DatabaseSessionFactory.createSession()) {
var playlistResult = PlaylistHelpers.getUserPlaylist(s, user, playlistId);
if (playlistResult.getError() != null) {
return mapper.writeValueAsBytes(mapper.createObjectNode()
.put("error", "You do not own this playlist"));
.put("error", playlistResult.getError()));
}
var playlist = playlistResult.getPlaylist();

playlist.setName(newName);
playlist.setShortDescription(newDescription);

var tr = s.beginTransaction();
s.merge(playlist);
Expand All @@ -180,15 +209,12 @@ public static byte[] deletePlaylistResponse(String session, String playlistId) t
ExceptionHandler.throwErrorResponse(new AuthenticationFailureResponse());

try (Session s = DatabaseSessionFactory.createSession()) {
var playlist = DatabaseHelper.getPlaylistFromId(s, playlistId);

if (playlist == null)
return mapper.writeValueAsBytes(mapper.createObjectNode()
.put("error", "Playlist not found"));

if (playlist.getOwner().getId() != user.getId())
var playlistResult = PlaylistHelpers.getUserPlaylist(s, user, playlistId);
if (playlistResult.getError() != null) {
return mapper.writeValueAsBytes(mapper.createObjectNode()
.put("error", "You do not own this playlist"));
.put("error", playlistResult.getError()));
}
var playlist = playlistResult.getPlaylist();

var tr = s.beginTransaction();
s.remove(playlist);
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/me/kavin/piped/utils/PlaylistHelpers.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package me.kavin.piped.utils;

import org.hibernate.Session;

import me.kavin.piped.utils.obj.db.User;

public class PlaylistHelpers {
public static PlaylistResult getUserPlaylist(Session s, User user, String playlistId) {
var playlist = DatabaseHelper.getPlaylistFromId(s, playlistId);

if (playlist == null)
return new PlaylistResult(null, "Playlist not found");

if (playlist.getOwner().getId() != user.getId())
return new PlaylistResult(null, "You do not own this playlist");

return new PlaylistResult(playlist, null);
}
}
21 changes: 21 additions & 0 deletions src/main/java/me/kavin/piped/utils/PlaylistResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package me.kavin.piped.utils;

import me.kavin.piped.utils.obj.db.Playlist;

public final class PlaylistResult {
private final Playlist playlist;
private final String error;

public PlaylistResult(Playlist playlist, String error) {
this.playlist = playlist;
this.error = error;
}

public Playlist getPlaylist() {
return playlist;
}

public String getError() {
return error;
}
}

0 comments on commit 86152a4

Please sign in to comment.