diff --git a/src/main/java/me/kavin/piped/utils/DatabaseSessionFactory.java b/src/main/java/me/kavin/piped/utils/DatabaseSessionFactory.java index a1bd10f..63fefd4 100644 --- a/src/main/java/me/kavin/piped/utils/DatabaseSessionFactory.java +++ b/src/main/java/me/kavin/piped/utils/DatabaseSessionFactory.java @@ -2,6 +2,8 @@ package me.kavin.piped.utils; import me.kavin.piped.consts.Constants; import me.kavin.piped.utils.obj.db.Channel; +import me.kavin.piped.utils.obj.db.Playlist; +import me.kavin.piped.utils.obj.db.PlaylistVideo; import me.kavin.piped.utils.obj.db.PubSub; import me.kavin.piped.utils.obj.db.User; import me.kavin.piped.utils.obj.db.Video; @@ -21,8 +23,9 @@ public class DatabaseSessionFactory { configuration.setProperty("hibernate.temp.use_jdbc_metadata_defaults", "false"); configuration.configure(); - sessionFactory = configuration.addAnnotatedClass(User.class).addAnnotatedClass(Video.class) - .addAnnotatedClass(Channel.class).addAnnotatedClass(PubSub.class).buildSessionFactory(); + sessionFactory = configuration.addAnnotatedClass(User.class).addAnnotatedClass(Channel.class) + .addAnnotatedClass(Video.class).addAnnotatedClass(PubSub.class).addAnnotatedClass(Playlist.class) + .addAnnotatedClass(PlaylistVideo.class).buildSessionFactory(); } public static final Session createSession() { diff --git a/src/main/java/me/kavin/piped/utils/obj/db/Playlist.java b/src/main/java/me/kavin/piped/utils/obj/db/Playlist.java new file mode 100644 index 0000000..ba65b68 --- /dev/null +++ b/src/main/java/me/kavin/piped/utils/obj/db/Playlist.java @@ -0,0 +1,95 @@ +package me.kavin.piped.utils.obj.db; + +import java.util.List; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +@Entity +@Table(name = "playlists", indexes = { @Index(columnList = "playlist_id", name = "playlists_playlist_id_idx") }) +public class Playlist { + + public Playlist() { + } + + public Playlist(String name, List videos, String thumbnail) { + this.name = name; + this.videos = videos; + this.thumbnail = thumbnail; + } + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "playlist_id") + private UUID playlist_id; + + @Column(name = "name", length = 100) + private String name; + + @Column(name = "thumbnail", length = 255) + private String thumbnail; + + @Column(name = "owner") + private long owner; + + @ElementCollection(fetch = FetchType.LAZY) + @OneToMany(targetEntity = PlaylistVideo.class) + @Column(name = "videos") + private List videos; + + public long getId() { + return id; + } + + public UUID getPlaylistId() { + return playlist_id; + } + + public void setPlaylistId(UUID playlist_id) { + this.playlist_id = playlist_id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getVideos() { + return videos; + } + + public void setVideos(List videos) { + this.videos = videos; + } + + public String getThumbnail() { + return thumbnail; + } + + public void setThumbnail(String thumbnail) { + this.thumbnail = thumbnail; + } + + public long getOwner() { + return owner; + } + + public void setOwner(long owner) { + this.owner = owner; + } +} diff --git a/src/main/java/me/kavin/piped/utils/obj/db/PlaylistVideo.java b/src/main/java/me/kavin/piped/utils/obj/db/PlaylistVideo.java new file mode 100644 index 0000000..5f170e6 --- /dev/null +++ b/src/main/java/me/kavin/piped/utils/obj/db/PlaylistVideo.java @@ -0,0 +1,84 @@ +package me.kavin.piped.utils.obj.db; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name = "playlist_videos", indexes = { @Index(columnList = "id", name = "playlist_videos_id_idx"), + @Index(columnList = "uploader_id", name = "playlist_videos_uploader_id_idx") }) +public class PlaylistVideo { + + public PlaylistVideo() { + } + + public PlaylistVideo(String id, String title, long duration, String thumbnail, Channel channel) { + this.id = id; + this.title = title; + this.duration = duration; + this.thumbnail = thumbnail; + this.channel = channel; + } + + @Id + @Column(name = "id", unique = true, length = 16) + private String id; + + @Column(name = "title", length = 120) + private String title; + + @Column(name = "duration") + private long duration; + + @Column(name = "thumbnail", length = 150) + private String thumbnail; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "uploader_id") + private Channel channel; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public String getThumbnail() { + return thumbnail; + } + + public void setThumbnail(String thumbnail) { + this.thumbnail = thumbnail; + } + + public Channel getChannel() { + return channel; + } + + public void setChannel(Channel channel) { + this.channel = channel; + } +}