{ "version": 3, "sources": ["src/app/_services/statistics.service.ts"], "sourcesContent": ["import { HttpClient } from '@angular/common/http';\nimport {Inject, inject, Injectable} from '@angular/core';\nimport { environment } from 'src/environments/environment';\nimport { UserReadStatistics } from '../statistics/_models/user-read-statistics';\nimport { PublicationStatusPipe } from '../_pipes/publication-status.pipe';\nimport {asyncScheduler, finalize, map, tap} from 'rxjs';\nimport { MangaFormatPipe } from '../_pipes/manga-format.pipe';\nimport { FileExtensionBreakdown } from '../statistics/_models/file-breakdown';\nimport { TopUserRead } from '../statistics/_models/top-reads';\nimport { ReadHistoryEvent } from '../statistics/_models/read-history-event';\nimport { ServerStatistics } from '../statistics/_models/server-statistics';\nimport { StatCount } from '../statistics/_models/stat-count';\nimport { PublicationStatus } from '../_models/metadata/publication-status';\nimport { MangaFormat } from '../_models/manga-format';\nimport { TextResonse } from '../_types/text-response';\nimport {TranslocoService} from \"@jsverse/transloco\";\nimport {KavitaPlusMetadataBreakdown} from \"../statistics/_models/kavitaplus-metadata-breakdown\";\nimport {throttleTime} from \"rxjs/operators\";\nimport {DEBOUNCE_TIME} from \"../shared/_services/download.service\";\nimport {download} from \"../shared/_models/download\";\nimport {Saver, SAVER} from \"../_providers/saver.provider\";\n\nexport enum DayOfWeek\n{\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StatisticsService {\n\n baseUrl = environment.apiUrl;\n translocoService = inject(TranslocoService);\n publicationStatusPipe = new PublicationStatusPipe(this.translocoService);\n mangaFormatPipe = new MangaFormatPipe(this.translocoService);\n\n constructor(private httpClient: HttpClient, @Inject(SAVER) private save: Saver) { }\n\n getUserStatistics(userId: number, libraryIds: Array = []) {\n // TODO: Convert to httpParams object\n let url = 'stats/user/' + userId + '/read';\n if (libraryIds.length > 0) url += '?libraryIds=' + libraryIds.join(',');\n\n return this.httpClient.get(this.baseUrl + url);\n }\n\n getServerStatistics() {\n return this.httpClient.get(this.baseUrl + 'stats/server/stats');\n }\n\n getYearRange() {\n return this.httpClient.get[]>(this.baseUrl + 'stats/server/count/year').pipe(\n map(spreads => spreads.map(spread => {\n return {name: spread.value + '', value: spread.count};\n })));\n }\n\n getTopYears() {\n return this.httpClient.get[]>(this.baseUrl + 'stats/server/top/years').pipe(\n map(spreads => spreads.map(spread => {\n return {name: spread.value + '', value: spread.count};\n })));\n }\n\n getPagesPerYear(userId = 0) {\n return this.httpClient.get[]>(this.baseUrl + 'stats/pages-per-year?userId=' + userId).pipe(\n map(spreads => spreads.map(spread => {\n return {name: spread.value + '', value: spread.count};\n })));\n }\n\n getWordsPerYear(userId = 0) {\n return this.httpClient.get[]>(this.baseUrl + 'stats/words-per-year?userId=' + userId).pipe(\n map(spreads => spreads.map(spread => {\n return {name: spread.value + '', value: spread.count};\n })));\n }\n\n getTopUsers(days: number = 0) {\n return this.httpClient.get(this.baseUrl + 'stats/server/top/users?days=' + days);\n }\n\n getReadingHistory(userId: number) {\n return this.httpClient.get(this.baseUrl + 'stats/user/reading-history?userId=' + userId);\n }\n\n getPublicationStatus() {\n return this.httpClient.get[]>(this.baseUrl + 'stats/server/count/publication-status').pipe(\n map(spreads => spreads.map(spread => {\n return {name: this.publicationStatusPipe.transform(spread.value), value: spread.count};\n })));\n }\n\n getMangaFormat() {\n return this.httpClient.get[]>(this.baseUrl + 'stats/server/count/manga-format').pipe(\n map(spreads => spreads.map(spread => {\n return {name: this.mangaFormatPipe.transform(spread.value), value: spread.count};\n })));\n }\n\n getTotalSize() {\n return this.httpClient.get(this.baseUrl + 'stats/server/file-size', TextResonse);\n }\n\n getFileBreakdown() {\n return this.httpClient.get(this.baseUrl + 'stats/server/file-breakdown');\n }\n\n downloadFileBreakdown(extension: string) {\n return this.httpClient.get(this.baseUrl + 'stats/server/file-extension?fileExtension=' + encodeURIComponent(extension),\n {observe: 'events', responseType: 'blob', reportProgress: true}\n ).pipe(\n throttleTime(DEBOUNCE_TIME, asyncScheduler, { leading: true, trailing: true }),\n download((blob, filename) => {\n this.save(blob, decodeURIComponent(filename));\n }),\n // tap((d) => this.updateDownloadState(d, downloadType, subtitle, 0)),\n // finalize(() => this.finalizeDownloadState(downloadType, subtitle))\n );\n\n }\n\n getReadCountByDay(userId: number = 0, days: number = 0) {\n return this.httpClient.get>(this.baseUrl + 'stats/reading-count-by-day?userId=' + userId + '&days=' + days);\n }\n\n getDayBreakdown( userId = 0) {\n return this.httpClient.get>>(this.baseUrl + 'stats/day-breakdown?userId=' + userId);\n }\n\n getKavitaPlusMetadataBreakdown() {\n return this.httpClient.get(this.baseUrl + 'stats/kavitaplus-metadata-breakdown');\n }\n}\n"], "mappings": "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", "names": ["DayOfWeek", "StatisticsService", "constructor", "httpClient", "save", "baseUrl", "environment", "apiUrl", "translocoService", "inject", "TranslocoService", "publicationStatusPipe", "PublicationStatusPipe", "mangaFormatPipe", "MangaFormatPipe", "getUserStatistics", "userId", "libraryIds", "url", "length", "join", "get", "getServerStatistics", "getYearRange", "pipe", "map", "spreads", "spread", "name", "value", "count", "getTopYears", "getPagesPerYear", "getWordsPerYear", "getTopUsers", "days", "getReadingHistory", "getPublicationStatus", "transform", "getMangaFormat", "getTotalSize", "TextResonse", "getFileBreakdown", "downloadFileBreakdown", "extension", "encodeURIComponent", "observe", "responseType", "reportProgress", "throttleTime", "DEBOUNCE_TIME", "asyncScheduler", "leading", "trailing", "download", "blob", "filename", "decodeURIComponent", "getReadCountByDay", "getDayBreakdown", "getKavitaPlusMetadataBreakdown", "\u0275\u0275inject", "HttpClient", "SAVER", "factory", "\u0275fac", "providedIn"] }