Linked Series (#1230)

* Implemented the ability to link different series together through Edit Series. CSS pending.

* Fixed up the css for related cards to show the relation

* Working on making all tabs in edit seris modal save in one go. Taking a break.

* Some fixes for Robbie to help with styling on

* Linked series pill, center library

* Centering library detail and related pill spacing

- Library detail cards are now centered if total number of items is > 6 or if mobile.
- Added ability to determine if mobile (viewport width <= 480px
- Fixed related card spacing
- Fixed related card pill spacing

* Updating relation form spacing

* Fixed a bug in card detail layout when there is no pagination, we create one in a way that all items render at once.

* Only auto-close side nav on phones, not tablets

* Fixed a bug where we had flipped state on sideNavCollapsed$

* Cleaned up some misleading comments

* Implemented RBS back in and now  if you have a relationship besides prequel/sequel, the target series will show a link back to it's parent.

* Added Parentto pipe

* Missed a relationship type

Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
This commit is contained in:
Joseph Milazzo 2022-04-24 11:59:09 -05:00 committed by GitHub
parent 7253765f1d
commit 4206ae3e22
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 2571 additions and 195 deletions

View file

@ -0,0 +1,66 @@
using System.ComponentModel;
namespace API.Entities.Enums;
/// <summary>
/// Represents a relationship between Series
/// </summary>
public enum RelationKind
{
/// <summary>
/// Story that occurred before the original.
/// </summary>
[Description("Prequel")]
Prequel = 1,
/// <summary>
/// Direct continuation of the story.
/// </summary>
[Description("Sequel")]
Sequel = 2,
/// <summary>
/// Uses characters of a different series, but is not an alternate setting or story.
/// </summary>
[Description("Spin Off")]
SpinOff = 3,
/// <summary>
/// Manga/Anime/Light Novel adaptation
/// </summary>
[Description("Adaptation")]
Adaptation = 4,
/// <summary>
/// Takes place sometime during the parent storyline.
/// </summary>
[Description("Side Story")]
SideStory = 5,
/// <summary>
/// When characters appear in both series, but is not a spin-off
/// </summary>
[Description("Character")]
Character = 6,
/// <summary>
/// When the story contains another story, useful for One-Shots
/// </summary>
[Description("Contains")]
Contains = 7,
/// <summary>
/// When nothing else fits
/// </summary>
[Description("Other")]
Other = 8,
/// <summary>
/// Same universe/world/reality/timeline, completely different characters
/// </summary>
[Description("Alternative Setting")]
AlternativeSetting = 9,
/// <summary>
/// Same setting, same characters, story is told differently
/// </summary>
[Description("Alternative Version")]
AlternativeVersion = 10,
/// <summary>
/// Doujinshi or Fan work
/// </summary>
[Description("Doujinshi")]
Doujinshi = 11
}

View file

@ -0,0 +1,25 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using API.Entities.Enums;
namespace API.Entities.Metadata;
/// <summary>
/// A relation flows between one series and another.
/// Series ---kind---> target
/// </summary>
public class SeriesRelation
{
public int Id { get; set; }
public RelationKind RelationKind { get; set; }
public virtual Series TargetSeries { get; set; }
/// <summary>
/// A is Sequel to B. In this example, TargetSeries is A. B will hold the foreign key.
/// </summary>
public int TargetSeriesId { get; set; }
// Relationships
public virtual Series Series { get; set; }
public int SeriesId { get; set; }
}

View file

@ -66,9 +66,18 @@ public class Series : IEntityDate
public DateTime LastChapterAdded { get; set; }
public SeriesMetadata Metadata { get; set; }
public ICollection<AppUserRating> Ratings { get; set; } = new List<AppUserRating>();
public ICollection<AppUserProgress> Progress { get; set; } = new List<AppUserProgress>();
/// <summary>
/// Relations to other Series, like Sequels, Prequels, etc
/// </summary>
/// <remarks>1 to Many relationship</remarks>
public virtual ICollection<SeriesRelation> Relations { get; set; } = new List<SeriesRelation>();
public virtual ICollection<SeriesRelation> RelationOf { get; set; } = new List<SeriesRelation>();
// Relationships
public List<Volume> Volumes { get; set; }
public Library Library { get; set; }