/
market-album.ts
90 lines (73 loc) · 2.17 KB
/
market-album.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import { Attachment, AttachmentFactoryOptions } from './attachment';
import { AttachmentType } from '../../utils/constants';
import { PhotoAttachment, IPhotoAttachmentPayload } from './photo';
export interface IMarketAlbumAttachmentPayload {
id: number;
owner_id: number;
access_key?: string;
title?: string;
photo?: IPhotoAttachmentPayload;
count?: number;
updated_time?: number;
}
export type MarketAlbumAttachmentOptions =
AttachmentFactoryOptions<IMarketAlbumAttachmentPayload>;
export class MarketAlbumAttachment
extends Attachment<IMarketAlbumAttachmentPayload, AttachmentType.MARKET_ALBUM | 'market_album'> {
public photo?: PhotoAttachment;
/**
* Constructor
*/
public constructor(options: MarketAlbumAttachmentOptions) {
super({
...options,
type: AttachmentType.MARKET_ALBUM,
});
this.$filled = this.payload.title !== undefined && this.payload.updated_time !== undefined;
this.applyPayload(options.payload);
}
/**
* Load attachment payload
*/
public async loadAttachmentPayload(): Promise<void> {
if (this.$filled) {
return;
}
const { items } = await this.api.market.getAlbumById({
owner_id: this.ownerId,
album_ids: this.id,
});
this.$filled = true;
this.applyPayload(items[0] as IMarketAlbumAttachmentPayload);
}
/**
* Returns album title
*/
get title(): string | undefined {
return this.payload.title;
}
/**
* Returns count of products on the album
*/
get count(): number | undefined {
return this.payload.count;
}
/**
* Returns the date when this album was updated
*/
get updatedAt(): number | undefined {
return this.payload.updated_time;
}
/**
* Applies the payload
*/
private applyPayload(payload: IMarketAlbumAttachmentPayload): void {
this.payload = payload;
if (this.payload.photo) {
this.photo = new PhotoAttachment({
api: this.api,
payload: this.payload.photo,
});
}
}
}