New Series Relation - Edition (#1583)
* Moved UpdateRelatedSeries from controller to SeriesService.cs * Added 2 tests. - UpdateRelatedSeries_ShouldDeletePrequelRelation - UpdateRelatedSeries_ShouldNotAllowDuplicates * Some docs and codestyle nitpicks * Simplified tests and made easier to read * Added 'Editions' series relation * Missing code to properly show the relations in the UI * Create Service for GetRelatedServices * Added unit test. Assert Edition, Prequel and Sequel do not return parent while others do * fixed missing userRating * Add requested changes: - Rename one test - Split one test into two tests
This commit is contained in:
parent
8e79c3b839
commit
7d65dc0530
13 changed files with 364 additions and 72 deletions
|
@ -14,4 +14,5 @@ export interface RelatedSeries {
|
|||
alternativeVersions: Array<Series>;
|
||||
doujinshis: Array<Series>;
|
||||
parent: Array<Series>;
|
||||
}
|
||||
editions: Array<Series>;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,8 @@ export enum RelationKind {
|
|||
/**
|
||||
* This is UI only. Backend will generate Parent series for everything but Prequel/Sequel
|
||||
*/
|
||||
Parent = 12
|
||||
Parent = 12,
|
||||
Edition = 13
|
||||
}
|
||||
|
||||
export const RelationKinds = [
|
||||
|
@ -26,6 +27,7 @@ export const RelationKinds = [
|
|||
{text: 'Side Story', value: RelationKind.SideStory},
|
||||
{text: 'Character', value: RelationKind.Character},
|
||||
{text: 'Contains', value: RelationKind.Contains},
|
||||
{text: 'Edition', value: RelationKind.Edition},
|
||||
{text: 'Doujinshi', value: RelationKind.Doujinshi},
|
||||
{text: 'Other', value: RelationKind.Other},
|
||||
];
|
||||
];
|
||||
|
|
|
@ -186,13 +186,13 @@ export class SeriesService {
|
|||
return this.httpClient.get<RelatedSeries>(this.baseUrl + 'series/all-related?seriesId=' + seriesId);
|
||||
}
|
||||
|
||||
updateRelationships(seriesId: number, adaptations: Array<number>, characters: Array<number>,
|
||||
contains: Array<number>, others: Array<number>, prequels: Array<number>,
|
||||
updateRelationships(seriesId: number, adaptations: Array<number>, characters: Array<number>,
|
||||
contains: Array<number>, others: Array<number>, prequels: Array<number>,
|
||||
sequels: Array<number>, sideStories: Array<number>, spinOffs: Array<number>,
|
||||
alternativeSettings: Array<number>, alternativeVersions: Array<number>, doujinshis: Array<number>) {
|
||||
return this.httpClient.post(this.baseUrl + 'series/update-related?seriesId=' + seriesId,
|
||||
alternativeSettings: Array<number>, alternativeVersions: Array<number>, doujinshis: Array<number>, editions: Array<number>) {
|
||||
return this.httpClient.post(this.baseUrl + 'series/update-related?seriesId=' + seriesId,
|
||||
{seriesId, adaptations, characters, sequels, prequels, contains, others, sideStories, spinOffs,
|
||||
alternativeSettings, alternativeVersions, doujinshis});
|
||||
alternativeSettings, alternativeVersions, doujinshis, editions});
|
||||
}
|
||||
|
||||
getSeriesDetail(seriesId: number) {
|
||||
|
|
|
@ -65,6 +65,7 @@ export class EditSeriesRelationComponent implements OnInit, OnDestroy {
|
|||
this.setupRelationRows(relations.doujinshis, RelationKind.Doujinshi);
|
||||
this.setupRelationRows(relations.contains, RelationKind.Contains);
|
||||
this.setupRelationRows(relations.parent, RelationKind.Parent);
|
||||
this.setupRelationRows(relations.editions, RelationKind.Edition);
|
||||
this.cdRef.detectChanges();
|
||||
});
|
||||
|
||||
|
@ -110,7 +111,7 @@ export class EditSeriesRelationComponent implements OnInit, OnDestroy {
|
|||
this.cdRef.markForCheck();
|
||||
}
|
||||
|
||||
|
||||
|
||||
updateSeries(event: Array<SearchResult | undefined>, relation: RelationControl) {
|
||||
if (event[0] === undefined) {
|
||||
relation.series = undefined;
|
||||
|
@ -131,8 +132,8 @@ export class EditSeriesRelationComponent implements OnInit, OnDestroy {
|
|||
seriesSettings.fetchFn = (searchFilter: string) => this.searchService.search(searchFilter).pipe(
|
||||
map(group => group.series),
|
||||
map(items => seriesSettings.compareFn(items, searchFilter)),
|
||||
map(series => series.filter(s => s.seriesId !== this.series.id)),
|
||||
);
|
||||
map(series => series.filter(s => s.seriesId !== this.series.id)),
|
||||
);
|
||||
|
||||
seriesSettings.compareFn = (options: SearchResult[], filter: string) => {
|
||||
return options.filter(m => this.utilityService.filter(m.name, filter));
|
||||
|
@ -165,10 +166,11 @@ export class EditSeriesRelationComponent implements OnInit, OnDestroy {
|
|||
const alternativeSettings = this.relations.filter(item => (parseInt(item.formControl.value, 10) as RelationKind) === RelationKind.AlternativeSetting && item.series !== undefined).map(item => item.series!.id);
|
||||
const alternativeVersions = this.relations.filter(item => (parseInt(item.formControl.value, 10) as RelationKind) === RelationKind.AlternativeVersion && item.series !== undefined).map(item => item.series!.id);
|
||||
const doujinshis = this.relations.filter(item => (parseInt(item.formControl.value, 10) as RelationKind) === RelationKind.Doujinshi && item.series !== undefined).map(item => item.series!.id);
|
||||
|
||||
const editions = this.relations.filter(item => (parseInt(item.formControl.value, 10) as RelationKind) === RelationKind.Edition && item.series !== undefined).map(item => item.series!.id);
|
||||
|
||||
// NOTE: We can actually emit this onto an observable and in main parent, use mergeMap into the forkJoin
|
||||
this.seriesService.updateRelationships(this.series.id, adaptations, characters, contains, others, prequels, sequels, sideStories, spinOffs, alternativeSettings, alternativeVersions, doujinshis).subscribe(() => {});
|
||||
|
||||
this.seriesService.updateRelationships(this.series.id, adaptations, characters, contains, others, prequels, sequels, sideStories, spinOffs, alternativeSettings, alternativeVersions, doujinshis, editions).subscribe(() => {});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,6 +33,8 @@ export class RelationshipPipe implements PipeTransform {
|
|||
return 'Spin Off';
|
||||
case RelationKind.Parent:
|
||||
return 'Parent';
|
||||
case RelationKind.Edition:
|
||||
return 'Edition'
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
|
|
|
@ -243,7 +243,7 @@ export class SeriesDetailComponent implements OnInit, OnDestroy, AfterContentChe
|
|||
private downloadService: DownloadService, private actionService: ActionService,
|
||||
public imageSerivce: ImageService, private messageHub: MessageHubService,
|
||||
private readingListService: ReadingListService, public navService: NavService,
|
||||
private offcanvasService: NgbOffcanvas, @Inject(DOCUMENT) private document: Document,
|
||||
private offcanvasService: NgbOffcanvas, @Inject(DOCUMENT) private document: Document,
|
||||
private changeDetectionRef: ChangeDetectorRef, private scrollService: ScrollService,
|
||||
private deviceSerivce: DeviceService
|
||||
) {
|
||||
|
@ -453,7 +453,7 @@ export class SeriesDetailComponent implements OnInit, OnDestroy, AfterContentChe
|
|||
this.seriesMetadata = metadata;
|
||||
this.changeDetectionRef.markForCheck();
|
||||
});
|
||||
|
||||
|
||||
this.readingListService.getReadingListsForSeries(seriesId).subscribe(lists => {
|
||||
this.readingLists = lists;
|
||||
this.changeDetectionRef.markForCheck();
|
||||
|
@ -482,16 +482,17 @@ export class SeriesDetailComponent implements OnInit, OnDestroy, AfterContentChe
|
|||
this.relations = [
|
||||
...relations.prequels.map(item => this.createRelatedSeries(item, RelationKind.Prequel)),
|
||||
...relations.sequels.map(item => this.createRelatedSeries(item, RelationKind.Sequel)),
|
||||
...relations.sideStories.map(item => this.createRelatedSeries(item, RelationKind.SideStory)),
|
||||
...relations.sideStories.map(item => this.createRelatedSeries(item, RelationKind.SideStory)),
|
||||
...relations.spinOffs.map(item => this.createRelatedSeries(item, RelationKind.SpinOff)),
|
||||
...relations.adaptations.map(item => this.createRelatedSeries(item, RelationKind.Adaptation)),
|
||||
...relations.contains.map(item => this.createRelatedSeries(item, RelationKind.Contains)),
|
||||
...relations.characters.map(item => this.createRelatedSeries(item, RelationKind.Character)),
|
||||
...relations.characters.map(item => this.createRelatedSeries(item, RelationKind.Character)),
|
||||
...relations.others.map(item => this.createRelatedSeries(item, RelationKind.Other)),
|
||||
...relations.alternativeSettings.map(item => this.createRelatedSeries(item, RelationKind.AlternativeSetting)),
|
||||
...relations.alternativeVersions.map(item => this.createRelatedSeries(item, RelationKind.AlternativeVersion)),
|
||||
...relations.doujinshis.map(item => this.createRelatedSeries(item, RelationKind.Doujinshi)),
|
||||
...relations.parent.map(item => this.createRelatedSeries(item, RelationKind.Parent)),
|
||||
...relations.editions.map(item => this.createRelatedSeries(item, RelationKind.Edition)),
|
||||
];
|
||||
if (this.relations.length > 0) {
|
||||
this.hasRelations = true;
|
||||
|
@ -690,7 +691,7 @@ export class SeriesDetailComponent implements OnInit, OnDestroy, AfterContentChe
|
|||
this.series = s;
|
||||
this.changeDetectionRef.detectChanges();
|
||||
});
|
||||
|
||||
|
||||
this.loadSeries(this.seriesId);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue