async getOrCreateFavoriteForCurrentUser(): Promise<APIResponse<Favorites>> {
const user = await tryAwaitWithRetry(async () => await this.account.get());
return this.getOrCreateFavorite(user.$id);
}
async getOrCreateFavorite(userId: string): Promise<APIResponse<Favorites>> {
try {
const favorite = await tryAwaitWithRetry(
async () => await this.getFavorite(userId)
);
if (favorite.data) {
return {
status: 200,
data: favorite.data,
message: "Favorite retrieved successfully",
};
} else {
const createdFavorite = await this.databases.createDocument(
databaseId,
APPWRITE_COLL_FAVORITES,
userId,
{
nftIds: [],
userId: userId,
}
);
return {
status: 201,
data: FavoritesSchema.parse(createdFavorite),
message: "Favorite created successfully",
};
}
} catch (error: any) {
try {
const newFavorite = {
nftIds: [],
userId: userId,
};
const createdFavorite = await tryAwaitWithRetry(
async () =>
await this.databases.createDocument(
databaseId,
APPWRITE_COLL_FAVORITES,
userId,
newFavorite,
getDefaultPermissions(userId)
)
);
return {
status: 201,
data: FavoritesSchema.parse(createdFavorite),
message: "Favorite created successfully",
};
} catch (createError) {
if (import.meta.env.DEV) {
console.error(createError);
}
return {
status: 500,
message: "Error creating favorite",
};
}
}
}