fix(medium): Fix various bugs and improve async handling.
This commit is contained in:
@@ -12,45 +12,33 @@ export interface IMediumPublication {
|
||||
|
||||
export class MediumPublication implements IMediumPublication {
|
||||
// STATIC
|
||||
public static async getAllPublications(mediumAccount: MediumAccount) {
|
||||
public static async getAllPublications(mediumAccount: MediumAccount): Promise<MediumPublication[]> {
|
||||
await mediumAccount.readyDeferred.promise;
|
||||
const returnArray: MediumPublication[] = [];
|
||||
const response = await mediumAccount.request(`/users/${mediumAccount.id}/publications`, 'GET');
|
||||
const publicationsDataArray: IMediumPublication[] = response.body.data;
|
||||
for (const publicationData of publicationsDataArray) {
|
||||
const publication = new MediumPublication(mediumAccount, publicationData);
|
||||
returnArray.push(publication);
|
||||
}
|
||||
return returnArray;
|
||||
const publicationsDataArray: IMediumPublication[] = response.data;
|
||||
return publicationsDataArray.map(publicationData => new MediumPublication(mediumAccount, publicationData));
|
||||
}
|
||||
|
||||
public static async getOwnPublications(mediumAccount: MediumAccount) {
|
||||
public static async getOwnPublications(mediumAccount: MediumAccount): Promise<MediumPublication[]> {
|
||||
await mediumAccount.readyDeferred.promise;
|
||||
const allPublications = await this.getAllPublications(mediumAccount);
|
||||
const ownPublications: MediumPublication[] = [];
|
||||
for (const publicationArg of allPublications) {
|
||||
const response = await mediumAccount.request(
|
||||
`/publications/${publicationArg.id}/contributors`,
|
||||
'GET'
|
||||
);
|
||||
const contributors: {
|
||||
publicationId: string;
|
||||
userId: string;
|
||||
role: string;
|
||||
}[] = response.body.data;
|
||||
for (const contributor of contributors) {
|
||||
if (contributor.userId === mediumAccount.id) {
|
||||
ownPublications.push(publicationArg);
|
||||
break;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
return ownPublications;
|
||||
}
|
||||
|
||||
public static async getPublicationByName(mediumAccountArg: MediumAccount, publicationNameArg: string) {
|
||||
const publications = await this.getAllPublications(mediumAccountArg);
|
||||
return publications.find(publicationArg => publicationArg.name === publicationNameArg);
|
||||
public static async getPublicationByName(mediumAccount: MediumAccount, publicationName: string): Promise<MediumPublication | undefined> {
|
||||
const publications = await this.getAllPublications(mediumAccount);
|
||||
return publications.find(publication => publication.name === publicationName);
|
||||
}
|
||||
|
||||
// INSTANCE
|
||||
@@ -62,13 +50,13 @@ export class MediumPublication implements IMediumPublication {
|
||||
url: string;
|
||||
imageUrl: string;
|
||||
|
||||
constructor(mediumAccount: MediumAccount, dataArg: IMediumPublication) {
|
||||
constructor(mediumAccount: MediumAccount, data: IMediumPublication) {
|
||||
this.mediumAccountRef = mediumAccount;
|
||||
Object.assign(this, dataArg);
|
||||
Object.assign(this, data);
|
||||
}
|
||||
|
||||
public async createPost(dataArg: IPostData): Promise<MediumPost> {
|
||||
const result = await MediumPost.createPost(this, dataArg);
|
||||
public async createPost(data: IPostData): Promise<MediumPost> {
|
||||
const result = await MediumPost.createPost(this, data);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user