Skip to content
This guide is a work in progress and will be updated as the project evolves

Features

As stated in the Overview page, this project consists of a multi-user platform wherein anyone can register an account. This product features a unique library for each individual user, where they can list, rate, review, the books they’ve read, music they listen to as well as movies or series they watch. Users can write reviews for their library items. In essence, it is a personal media library manager wherein the user keeps track of their specific items. They can use this product as a reference point to remember what they’ve read, listened to, or watched, whilst making use of the review and rating system to remember what they thought about their items.

The following sections contain information and explanations on how these features work.

Books

The books feature consists of three main components: Book, Author, Genre Book.

Genre Book

This contains the details of what genre a book belongs to. The following data structure is associated with a book genre.

public record GenreBook(
UUID bookGenreID,
String genre,
String subGenre
) { }
  • bookGenreID
    • This serves as the primary unique identifier for each genre book item.
  • genre
    • This is considered the top level genre value for a book.
    • An example of this would be: Nonfiction.
  • subGenre
    • This is the level 2 genre value for a book, and is a further breakdown of the level 1 genre item.
    • An example of this would be: Philosophy.

Author

This contains basic details to identify a person as an author. Authors are exclusively used for the books feature. An author can have multiple books or zero books associated with it.

The following data structure is associated with an author:

public record Author(
UUID authorID,
String firstName,
String lastName,
String additionalName
) { }
  • authorID
    • This serves as the primary unique identifier for each author item.
  • firstName
    • The first name of an author.
    • An example of this would be: Walther.
  • lastName
    • The last name of an author.
    • An example of this would be: Smulders.
  • additionalName
    • This is an optional value for an author.
    • An example of this would be: John.

Book

A book must have at least one author. It must have a bookGenre assigned to it at all times. Various core items are required.

The following data structure is associated with a book:

public record BookWithLinks(
UUID bookID,
String title,
String isbn,
Integer pages,
String plot,
String cover,
LocalDate datePublished,
LocalDateTime dateAdded,
LocalDateTime dateUpdated,
List<Author> authors,
GenreBook genreBook
) { }
  • bookID
    • This serves as the primary unique identifier for each book item.
  • title
    • This is the book’s title and must be unique.
  • isbn
    • This is the ISBN reference number of the book and must be unique.
  • pages
    • Amount of pages the book consists of.
  • plot
    • A short description of the book’s storyline.
  • cover
    • The cover image reference of a book.
  • datePublished
    • The date that the book was first published on.
  • dateAdded
    • A local timestamp when the book was created in the database.
  • dateUpdated
    • A local timestamp when the book item was last updated in the database.
  • authors
    • All the authors associated with a specific book item.
  • genreBook
    • The specific genre associated with a book item.

Movies

The movies feature consists of two main components: Movie, Genre Movie.

Genre Movie

This contains the details of what genre a movie belongs to. The following data structure is associated with a movie genre.

public record GenreMovie(
UUID genreMovieID,
String genre
) { }
  • genreMovieID
    • This serves as the primary unique identifier for each movie genre item.
  • genre
    • This is the name of a specific genre item.
    • An example of this would be: Drama.

Movie

A movie can have multiple genres associated with it. It must have at least one genre associated with it at any given time.

The following data structure is associated with a move item.

public record MovieWithLinks(
UUID movieID,
String title,
String plot,
String poster,
LocalDate dateReleased,
LocalDateTime dateAdded,
LocalDateTime dateUpdated,
List<GenreMovie> genres
) {
}
  • movieID
    • This serves as the primary unique identifier for each movie item.
  • title
    • This is the title of the movie and must be unique.
  • plot
    • This is a summary of what the movie is about.
  • poster
    • The cover image reference of the movie.
  • dateReleased
    • The date that the movie was first released on.
  • dateAdded
    • A local timestamp when the movie was created in the database.
  • dateUpdated
    • A local timestamp when the movie item was last updated in the database.
  • genres
    • This is the genres the movie is associated with. As stated earlier, a movie can have multiple associated genres.
    • An example of this would be: [ "Drama", "Action" ], which means that the movie item falls into the category of being both a Drama and Action movie.

Series

The series feature consists of three main components: Series, Seasons, Genre Series.

A series must contain some core information as well as at least one season and genre associated with it.

Genre Series

This contains the details of what genre a series belongs to. The following data structure is associated with a series genre.

public record GenreSeries(
UUID genreSeriesID,
String genre
) { }
  • genreSeriesID
    • This serves as the primary unique identifier for each series genre item.
  • genre
    • This is the name of a specific genre item.
    • An example of this would be: Adventure.

Seasons

Seasons belong to a series. It is the second level structure of a series, and a container for all the episodes associated with that specific season of the series. This application is not concerned with the individual episodes of each season.

The proposed data structure for a season is as follows:

public record Season(
UUID seasonID,
String plot,
String poster,
Integer number,
LocalDate dateReleased,
LocalDateTime dateAdded,
LocalDateTime dateUpdated
) { }
  • seasonID
    • This serves as the primary unique identifier for each season item.
  • plot
    • This is a summary of what the season is about.
  • poster
    • The cover image reference for the season item.
  • number
    • This is the number of the season, for example 1 denotes the first season of the series and 3 would mean that it’s the third season of the series.
  • dateReleased
    • The date that the season was first released on.
  • dateAdded
    • A local timestamp when the season was created in the database.
  • dateUpdated
    • A local timestamp when the season item was last updated in the database.

Series

A series can have multiple genres associated with it. It must have at least one genre associated with it at any given time.

The following data structure is associated with a series item.

public record Series(
UUID seriesID,
String title,
String plot,
String poster,
LocalDate dateReleased,
LocalDateTime dateAdded,
LocalDateTime dateUpdated,
List<GenreSeries> genres,
List<Season> seasons
) { }
  • seriesID
    • This serves as the primary unique identifier for each series.
  • title
    • The title of the series and it must be unique.
  • plot
    • The summary of what the series is about.
  • poster
    • The cover image reference for the series item.
  • dateReleased
    • The date that the series was first released on.
  • dateAdded
    • A local timestamp when the series was created in the database.
  • dateUpdated
    • A local timestamp when the series item was last updated in the database.
  • genres
    • A list of genres associated with a specific series item.
  • seasons
    • A list of seasons associated with a specific series item.

Music

The music feature consists of three main components: Artist, Album, Genre Music.

Genre Music

This contains the details of what genre an album belongs to. The following data structure is associated with a music genre.

public record GenreMusic(
UUID genreMusicID,
String genre
) { }
  • genreMusicID
    • This serves as the primary unique identifier for each music genre item.
  • genre
    • This is the name of a specific genre item.
    • An example of this would be: Classical.

Artist

Each music album must have an artist. This is the simple representation of a person, similar as the author to a book. An artist can have multiple music albums associated with it.

The following data structure is associated with an artist.

public record Artist(
UUID artistID,
String firstName,
String lastName,
String additionalName
) { }
  • artistID
    • This serves as the primary unique identifier for each artist item.
  • firstName
    • The first name of an artist.
    • An example of this would be: Walther.
  • lastName
    • The last name of an artist.
    • An example of this would be: Smulders.
  • additionalName
    • This is an optional value for an artist.
    • An example of this would be: John.

Album

An album must have at least one artist. It must have a musicGenre assigned to it at all times. Various core items are required.

The following data structure is associated with an album:

public record Album(
UUID albumID,
UUID genreMusicID,
String cover,
LocalDate datePublished,
LocalDateTime dateAdded,
LocalDateTime dateUpdated
) { }
  • albumID
    • This serves as the primary unique identifier for each album item.
  • genreMusicID
    • This is the reference to a genre music item, which is associated for this specific album.
  • cover
    • The cover image reference for the album item.
  • datePublished
    • The date that the album was first released on.
  • dateAdded
    • A local timestamp when the album was created in the database.
  • dateUpdated
    • A local timestamp when the album item was last updated in the database.

Libraries

There are two main concepts for this project when it comes to libraries. The user library and the system library.

System Library

The system library is regarded as the pure informational aspects of the supported media features (books, movies, series, music).

Users with administrative privileges will be able to maintain the details of the books, movies, series and music elements. The details associated with these media items are propegated to every user who makes use of the application.

This is synonymous with a community library (containing books, movies, series, and music) in real life.

User Library

The user library is regarded as the user’s personal version of the community library. The items that they’ve added still contain the core details obtained from the system library, but they can add their own review and rating on each item, enabling them to keep track of what they’ve watched, read or listened to and what they thought about the item in question.

This means that a user will be able to browse the system library and add items to their personal library. The system library data does not change. The user’s personal library is unique to them and no other user will be able to interact with it.