2024-07-01 14:43:21 +00:00
|
|
|
import { MediumAccount } from './medium.classes.account.js';
|
|
|
|
import { type IPostData, MediumPost } from './medium.classes.post.js';
|
|
|
|
import * as plugins from './medium.plugins.js';
|
2020-11-16 03:15:49 +00:00
|
|
|
|
2020-11-16 23:04:54 +00:00
|
|
|
export interface IMediumPublication {
|
|
|
|
id: string;
|
|
|
|
name: string;
|
|
|
|
description: string;
|
|
|
|
url: string;
|
|
|
|
imageUrl: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export class MediumPublication implements IMediumPublication {
|
|
|
|
// STATIC
|
2024-07-01 21:55:47 +00:00
|
|
|
public static async getAllPublications(mediumAccount: MediumAccount): Promise<MediumPublication[]> {
|
2020-11-16 23:04:54 +00:00
|
|
|
await mediumAccount.readyDeferred.promise;
|
|
|
|
const response = await mediumAccount.request(`/users/${mediumAccount.id}/publications`, 'GET');
|
2024-07-01 21:55:47 +00:00
|
|
|
const publicationsDataArray: IMediumPublication[] = response.data;
|
|
|
|
return publicationsDataArray.map(publicationData => new MediumPublication(mediumAccount, publicationData));
|
2020-11-16 03:15:49 +00:00
|
|
|
}
|
2020-11-16 23:04:54 +00:00
|
|
|
|
2024-07-01 21:55:47 +00:00
|
|
|
public static async getOwnPublications(mediumAccount: MediumAccount): Promise<MediumPublication[]> {
|
2020-11-16 23:04:54 +00:00
|
|
|
await mediumAccount.readyDeferred.promise;
|
|
|
|
const allPublications = await this.getAllPublications(mediumAccount);
|
|
|
|
const ownPublications: MediumPublication[] = [];
|
2024-07-01 21:55:47 +00:00
|
|
|
|
|
|
|
for (const publication of allPublications) {
|
|
|
|
const response = await mediumAccount.request(`/publications/${publication.id}/contributors`, 'GET');
|
|
|
|
const contributors: { publicationId: string; userId: string; role: string; }[] = response.data;
|
|
|
|
|
|
|
|
if (contributors.some(contributor => contributor.userId === mediumAccount.id)) {
|
|
|
|
ownPublications.push(publication);
|
2020-11-16 23:04:54 +00:00
|
|
|
}
|
|
|
|
}
|
2024-07-01 21:55:47 +00:00
|
|
|
|
2020-11-16 23:04:54 +00:00
|
|
|
return ownPublications;
|
|
|
|
}
|
|
|
|
|
2024-07-01 21:55:47 +00:00
|
|
|
public static async getPublicationByName(mediumAccount: MediumAccount, publicationName: string): Promise<MediumPublication | undefined> {
|
|
|
|
const publications = await this.getAllPublications(mediumAccount);
|
|
|
|
return publications.find(publication => publication.name === publicationName);
|
2024-07-01 14:43:21 +00:00
|
|
|
}
|
|
|
|
|
2020-11-16 23:04:54 +00:00
|
|
|
// INSTANCE
|
|
|
|
public mediumAccountRef: MediumAccount;
|
|
|
|
|
|
|
|
id: string;
|
|
|
|
name: string;
|
|
|
|
description: string;
|
|
|
|
url: string;
|
|
|
|
imageUrl: string;
|
|
|
|
|
2024-07-01 21:55:47 +00:00
|
|
|
constructor(mediumAccount: MediumAccount, data: IMediumPublication) {
|
2024-07-01 14:43:21 +00:00
|
|
|
this.mediumAccountRef = mediumAccount;
|
2024-07-01 21:55:47 +00:00
|
|
|
Object.assign(this, data);
|
2020-11-16 23:04:54 +00:00
|
|
|
}
|
2024-07-01 14:43:21 +00:00
|
|
|
|
2024-07-01 21:55:47 +00:00
|
|
|
public async createPost(data: IPostData): Promise<MediumPost> {
|
|
|
|
const result = await MediumPost.createPost(this, data);
|
2024-07-01 14:43:21 +00:00
|
|
|
return result;
|
|
|
|
}
|
2020-11-16 23:04:54 +00:00
|
|
|
}
|