Create Album endpoint

This commit is contained in:
Jorge Vargas 2025-03-08 22:24:22 -06:00
parent c3fca425cb
commit 967a6d1587
15 changed files with 388 additions and 85 deletions

View file

@ -0,0 +1,58 @@
import { Prisma } from '@prisma/client'
import axios from 'axios'
import prismaClient from 'utils/prisma-client'
import { getImage } from 'astro:assets'
import { WEBHOOK_URL } from 'astro:env/server'
const albumArtistNames = Prisma.validator<Prisma.albumsDefaultArgs>()({
include: { artists: { include: { artist: { select: { name: true } } } } }
})
type AlbumArtistNames = Prisma.albumsGetPayload<typeof albumArtistNames>
async function postWebhook(album: AlbumArtistNames, userText = '') {
const url = `https://www.sittingonclouds.net/album/${album.id}`
const content = `${url}${userText}`
const artistNames = album.artists.map((a) => a.artist.name)
const coverImage = await getImage({
src: `https://cdn.sittingonclouds.net/album/${album.id}.png`,
height: 150,
width: 150
})
const embeds = [
{
title: album.title,
type: 'rich',
description: album.subTitle || artistNames.join(' - '),
url,
color: parseInt(album.headerColor.substring(1), 16),
thumbnail: { url: `https://www.sittingonclouds.net${coverImage.src}` }
}
]
const payload = { content, embeds }
await axios.post(WEBHOOK_URL, payload)
}
export const requestPOST = (operation: string, body: any) => axios.post(`http://localhost:7001/${operation}`, body)
export async function handleComplete(album: AlbumArtistNames, requestId?: number) {
if (requestId) {
const request = await prismaClient.requests.findUnique({
where: { id: requestId },
select: { state: true, id: true, userID: true, user: true }
})
if (!request || request.state === 'complete') return
await requestPOST('complete', { requestId: request.id })
const userText =
request.userID || request.user
? ` ${request.userID ? `<@${request.userID}>` : `@${request.user}`} :arrow_down:`
: ''
await postWebhook(album, userText)
} else {
await postWebhook(album)
}
}