Skip to content

Series support #12

@ismael221

Description

@ismael221

I've added the fields below in order to support series:

package com.ismael.movies.model;

import com.ismael.movies.enums.MovieGenre;
import com.ismael.movies.enums.VideoType;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.annotations.UuidGenerator;

import java.io.Serializable;
import java.sql.Types;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.UUID;

@Data
@Entity
@Table(name = "videos", uniqueConstraints = {
        @UniqueConstraint(columnNames = "RID")
})
public class Video implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false, columnDefinition = "MEDIUMTEXT")
    private String synopsis;

    @ElementCollection(targetClass = MovieGenre.class)
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "video_genres", joinColumns = @JoinColumn(name = "video_id"))
    @Column(nullable = false, name = "genre")
    @Fetch(FetchMode.JOIN)
    private Set<MovieGenre> genres;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private VideoType videoType; // FILM ou SERIES

    private Date releaseDate;
    private Date endDate; // Para séries que já foram concluídas

    @UuidGenerator
    @JdbcTypeCode(Types.VARCHAR)
    @Column(name = "rid", nullable = false)
    private UUID rid;

    @OneToMany(mappedBy = "video", cascade = CascadeType.ALL)
    @Fetch(FetchMode.JOIN)
    private List<Rating> review;

    private String backgroundImgUrl;
    private String coverImgUrl;
    private String trailerUrl;

    @OneToMany(mappedBy = "series", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Episode> episodes; // Relação com episódios, se for uma série
}




@Data
@Entity
@Table(name = "episodes")
public class Episode {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "series_id", nullable = false)
    private Video series;

    private String title;
    private int season;
    private int episodeNumber;
    private String videoUrl; // URL do episódio
}

public enum VideoType {
    FILM, SERIES
}


if (video.getVideoType() == VideoType.SERIES) {
    List<Episode> episodes = video.getEpisodes();
    // Exibir lista de episódios
} else {
    // Exibir apenas as informações do filme
} 




Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions