Skip to content

Commit dd8f26d

Browse files
committed
refactor(server): movie/show discovery cleanup
1 parent f370f2e commit dd8f26d

File tree

13 files changed

+92
-53
lines changed

13 files changed

+92
-53
lines changed

server/src/api/routes/movie.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ const getMovieDiscovery = async (ctx: Context) => {
4343
const service = getFromContainer(MovieService);
4444
const mapper = getFromContainer(MovieMapper);
4545

46-
const { page } = (ctx.request.body as any) || 1;
47-
const { with_companies } = ctx.query;
46+
const { page, params } = (ctx.request.body as any) || 1;
47+
const { with_companies } = params;
4848

4949
const results = await service.getDiscover({
5050
page,
5151
limit: 30,
52-
withCompanies: with_companies
52+
filterByCompanyId: with_companies
5353
? parseInt(with_companies as string)
5454
: undefined,
5555
});
@@ -70,7 +70,7 @@ export default (app: Router) => {
7070
route.get('/lookup/:id', lookupById);
7171
route.get('/lookup/:id/minified', lookupByIdMinified);
7272
route.post('/discover', getMovieDiscovery);
73-
route.get('/company/:id', getCompanyById);
73+
route.get('/studio/:id', getCompanyById);
7474

7575
app.use(route.routes());
7676
};

server/src/api/routes/show.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ const discoverSeriesData = async (ctx: Context) => {
4343
const service = getFromContainer(ShowService);
4444
const mapper = getFromContainer(ShowMapper);
4545

46-
const { page } = (ctx.request.body as any) || 1;
47-
const { with_networks } = ctx.query;
46+
const { page, params } = (ctx.request.body as any) || 1;
47+
const { with_networks } = params;
4848

4949
const results = await service.getDiscover({
5050
page,

server/src/resources/movie/mapper.ts

+5
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,11 @@ export class MovieMapper
235235
name: copy.collections.name,
236236
}
237237
: undefined,
238+
studio: {
239+
id: copy.studios[0]?.providers?.tmdb?.id?.toString() || '0',
240+
name: copy.studios[0].name,
241+
logo_path: copy.studios[0].logoPath,
242+
},
238243
collection: copy.collections?.movies.map((movie) => ({
239244
id: `${movie.providers?.plex?.id || movie.providers?.tmdb?.id || 0}`,
240245
name: movie.name,

server/src/resources/movie/response.ts

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ export type MovieResponseProps = {
2323
belongs_to_collection?: {
2424
name: string;
2525
};
26+
studio?: {
27+
id: string;
28+
name: string;
29+
logo_path: string;
30+
};
2631
collection?: Array<{
2732
id: string;
2833
name: string;

server/src/resources/network/entity.ts

+16
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,22 @@ export class NetworkEntity extends BaseEntity<NetworkProps> {
2121
return new NetworkEntity({ id, props });
2222
}
2323

24+
get artwork(): { logo?: { url: string; source: string } } {
25+
return this.props.artwork;
26+
}
27+
28+
get name(): string {
29+
return this.props.name;
30+
}
31+
32+
get providers(): { tmdbId: number } {
33+
return this.props.providers;
34+
}
35+
36+
get source(): string {
37+
return this.props.source;
38+
}
39+
2440
/**
2541
* Validates the Network entity.
2642
*/

server/src/resources/network/mapper.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export class NetworkMapper
4242
source: 'tmdb',
4343
},
4444
},
45-
provider: {
45+
providers: {
4646
tmdbId: record.id,
4747
},
4848
source: 'tmdb',
@@ -60,7 +60,7 @@ export class NetworkMapper
6060
toResponse(entity: NetworkEntity): NetworkResponseProps {
6161
const copy = entity.getProps();
6262
return {
63-
id: copy.provider.tmdbId,
63+
id: copy.providers.tmdbId,
6464
name: copy.name,
6565
logo_path: copy.artwork.logo?.url || '',
6666
};

server/src/resources/network/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export type NetworkProps = {
1111
source: string;
1212
};
1313
};
14-
provider: {
14+
providers: {
1515
tmdbId: number;
1616
};
1717
source: string;

server/src/services/cache/cache-service.ts

+30-24
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import Bluebird from 'bluebird';
12
import { Service } from 'diod';
23
import pino from 'pino';
34

45
import { Logger } from '@/infrastructure/logger/logger';
6+
import is from '@/infrastructure/utils/is';
57
import { CompanyEntity } from '@/resources/company/entity';
68
import { MovieEntity } from '@/resources/movie/entity';
79
import { NetworkEntity } from '@/resources/network/entity';
@@ -18,6 +20,8 @@ import { NetworkService } from '@/services/network/network-service';
1820
import { PersonService } from '@/services/person/person-service';
1921
import { ShowService } from '@/services/show/show-service';
2022

23+
import { providers } from '../notifications/providers/index';
24+
2125
@Service()
2226
export class CacheService {
2327
/**
@@ -67,37 +71,39 @@ export class CacheService {
6771
await this.cacheProvider.wrap<CommonResourcesCacheResponse>(
6872
'resources.common',
6973
async () => {
70-
const [
71-
movies,
72-
shows,
73-
people,
74-
networks,
75-
companies,
76-
showDiscovery,
77-
movieDiscovery,
78-
] = await Promise.all([
79-
this.movieService.getTrending(30),
80-
this.showService.getTrending(30),
81-
this.personService.getTrending(30),
82-
this.networkService.getNetworks(),
83-
this.companyService.getCompanies(),
84-
this.showService.getDiscover({
85-
page: 1,
86-
limit: 30,
87-
}),
88-
this.movieService.getDiscover({
89-
page: 1,
90-
limit: 30,
91-
}),
74+
const [movies, shows, people, networks, companies] =
75+
await Promise.all([
76+
this.movieService.getTrending(30),
77+
this.showService.getTrending(30),
78+
this.personService.getTrending(30),
79+
this.networkService.getNetworks(),
80+
this.companyService.getCompanies(),
81+
]);
82+
const [showDiscovery, movieDiscovery] = await Bluebird.all([
83+
Bluebird.map(networks, async (network) =>
84+
this.showService.getDiscover({
85+
filterByNetworkId: network.providers.tmdbId,
86+
}),
87+
),
88+
Bluebird.map(companies, async (company) =>
89+
this.movieService.getDiscover({
90+
filterByCompanyId: parseInt(company.id, 10),
91+
}),
92+
),
9293
]);
94+
9395
return {
9496
movies: movies.map((movie) => movie.getProps()),
9597
shows: shows.map((show) => show.getProps()),
9698
people: people.map((person) => person.getProps()),
9799
networks: networks.map((network) => network.getProps()),
98100
companies: companies.map((company) => company.getProps()),
99-
showDiscovery: showDiscovery.map((show) => show.getProps()),
100-
movieDiscovery: movieDiscovery.map((movie) => movie.getProps()),
101+
showDiscovery: showDiscovery
102+
.flat()
103+
.map((show) => show.getProps()),
104+
movieDiscovery: movieDiscovery
105+
.flat()
106+
.map((movie) => movie.getProps()),
101107
};
102108
},
103109
this.defaultCacheTTL,

server/src/services/movie/movie-service.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,15 @@ export class MovieService {
188188
*/
189189
async getDiscover(options?: MovieDiscoverOptions): Promise<MovieEntity[]> {
190190
try {
191+
const optionsAsString =
192+
options && Object.keys(options).length ? toQueryString(options) : '';
193+
console.log(optionsAsString);
191194
const results = await this.cacheProvider.wrap(
192-
`movie.discover`,
195+
`movie.discover${optionsAsString}`,
193196
async () => {
194197
const discovery = await this.discoverProvider.getDiscover({
195198
page: options?.page || 1,
196-
withCompanyId: options?.withCompanies,
199+
withCompanyId: options?.filterByCompanyId,
197200
});
198201
if (discovery.isErr()) {
199202
return [];

server/src/services/movie/provider/tmdb/tmdb.ts

+1
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@ export class TmdbMovieProvider
395395
try {
396396
const optionsAsString =
397397
options && Object.keys(options).length ? toQueryString(options) : '';
398+
console.log(optionsAsString);
398399
const results = await this.cache.wrap(
399400
`tmdb.movie.discover${optionsAsString}`,
400401
async () => {

server/src/services/movie/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ export type MovieLookupOptions = {
1818
export type MovieDiscoverOptions = {
1919
page?: number;
2020
limit?: number;
21-
withCompanies?: number;
21+
filterByCompanyId?: number;
2222
};

server/src/services/network/network-service.ts

+19-16
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Service } from 'diod';
2+
import { None, Ok, Option, Some } from 'oxide.ts';
23
import pino from 'pino';
34

45
import { Logger } from '@/infrastructure/logger/logger';
@@ -7,7 +8,6 @@ import { NetworkProps } from '@/resources/network/types';
78
import { CacheProvider } from '@/services/cache/cache-provider';
89
import { NetworkDetailsProvider } from '@/services/network/provider/provider';
910
import { FixedNetworkIdsList } from '@/services/network/types';
10-
import { None, Ok, Option, Some } from 'oxide.ts';
1111

1212
@Service()
1313
export class NetworkService {
@@ -29,20 +29,23 @@ export class NetworkService {
2929
async getNetworkDetails(id: number): Promise<Option<NetworkEntity>> {
3030
try {
3131
const start = Date.now();
32-
const details = await this.cacheProvider.wrap<NetworkProps | undefined>(`network.${id}`, async () => {
33-
const results = await this.networkDetailsProvider.getDetails(id);
34-
if (!results.isOk()) {
35-
return undefined;
36-
}
37-
const network = results.unwrap();
38-
return {
39-
...network,
40-
provider: {
41-
...network.provider,
42-
tmdbId: id,
43-
},
44-
};
45-
});
32+
const details = await this.cacheProvider.wrap<NetworkProps | undefined>(
33+
`network.${id}`,
34+
async () => {
35+
const results = await this.networkDetailsProvider.getDetails(id);
36+
if (!results.isOk()) {
37+
return undefined;
38+
}
39+
const network = results.unwrap();
40+
return {
41+
...network,
42+
provider: {
43+
...network.providers,
44+
tmdbId: id,
45+
},
46+
};
47+
},
48+
);
4649
if (!details) {
4750
return None;
4851
}
@@ -79,7 +82,7 @@ export class NetworkService {
7982
);
8083
return networks.map((network) => {
8184
this.logger.debug(
82-
{ networkId: network.provider.tmdbId, name: network.name },
85+
{ networkId: network.providers.tmdbId, name: network.name },
8386
`got network details`,
8487
);
8588
return NetworkEntity.create(network);

server/src/services/network/provider/tmdb/tmdb.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export class NetworkTmdbProvider implements NetworkDetailsProvider {
5353
}
5454
: undefined,
5555
},
56-
provider: {
56+
providers: {
5757
tmdbId: response.id!,
5858
},
5959
source: 'tmdb',

0 commit comments

Comments
 (0)