feat: started details page

This commit is contained in:
2024-07-05 20:07:13 +03:00
parent 7eff09765b
commit 2660aef473
13 changed files with 159 additions and 46 deletions

View File

@@ -2,7 +2,8 @@ import { HttpClient } from "@angular/common/http";
import { Injectable } from "@angular/core";
import { Observable, catchError, map, throwError } from "rxjs";
import { ESiteUrls } from "../urls";
import { IRulibSearchResult } from "./rulib.dto";
import { IRulibDetailResult } from "./rulib.detail.dto";
import { IRulibSearchResult } from "./rulib.search.dto";
//TODO: Make abstract classes
@Injectable({
@@ -25,14 +26,14 @@ export class LibSocialParserService {
);
}
getDetails(slug_url: string) {
getDetails(slug_url: string): Observable<IRulibDetailResult> {
return this.http
.get(
`${this.url}/api/manga/${slug_url}?fields[]=summary&fields[]=genres&fields[]=tags&fields[]=authors`,
)
.pipe(
map((data: object) => {
return data;
return data as IRulibDetailResult;
}),
catchError((error) => {
return throwError(() => `Now found ${error}`);

View File

@@ -0,0 +1,69 @@
export interface IRulibDetailResult {
data: Data;
meta: Meta;
}
export interface Data {
id: number;
name: string;
rus_name: string;
eng_name: string;
slug: string;
slug_url: string;
cover: Cover;
ageRestriction: AgeRestriction;
site: number;
type: AgeRestriction;
summary: string;
is_licensed: boolean;
genres: Genre[];
tags: Genre[];
authors: Author[];
model: string;
status: AgeRestriction;
releaseDateString: string;
}
export interface AgeRestriction {
id: number;
label: string;
}
export interface Author {
id: number;
slug: string;
slug_url: string;
model: string;
name: string;
rus_name: null;
alt_name: null;
cover: Cover;
subscription: Subscription;
confirmed: null;
user_id: number;
}
export interface Cover {
filename: null | string;
thumbnail: string;
default: string;
md: string;
}
export interface Subscription {
is_subscribed: boolean;
source_type: string;
source_id: number;
relation: null;
}
export interface Genre {
id: number;
name: string;
adult: boolean;
alert: boolean;
}
export interface Meta {
country: string;
}

View File

@@ -1,7 +1,8 @@
import { Injectable } from "@angular/core";
import { BehaviorSubject, Observable, map } from "rxjs";
import { LibSocialParserService } from "./parsers/rulib/lib.social.parser.service";
import { Datum } from "./parsers/rulib/rulib.dto";
import { IRulibDetailResult } from "./parsers/rulib/rulib.detail.dto";
import { Datum } from "./parsers/rulib/rulib.search.dto";
@Injectable({ providedIn: "root" })
export class SearchService {
@@ -15,7 +16,7 @@ export class SearchService {
});
}
getDetails(slug_url: string): Observable<object> {
getDetails(slug_url: string): Observable<IRulibDetailResult> {
return this.parser.getDetails(slug_url).pipe(
map((data) => {
return data;