Olhando pelo código por cima, aparentemente não há nenhum estado persistente na api em si, mas no banco de dados, no entando, percebi que você está usando o SQLite, que é um banco de dados que fica em um arquivo.
Como a vercel utiliza a arquitetura serverless, isso faz com que a sua aplicação seja recomeçada para o estado inicial toda vez que nenhuma request é enviada durante um tempo, a fim de preservar recursos computacionais.
isso faz com que qualquer estado salvo no código, ou em um arquivo (como no caso do SQLite) seja perdido quando em 30/40 minutos nenhuma request é feita à API (recomendo pesquisar sobre a arquitetura serverless).
para resolver isso, recomendo alterar o banco de dados para um MySQL ou Postgres e usar serviços de hospedagem de banco de dados como o PlanetScale (que possuí um free-tier que dá um banco MySQL gratuitamente), é possível fazer isso simplesmente mudando as configurações do prisma.
// antes
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
// depois
datasource db {
provider = "mysql"
url = env("DATABASE_URL") // mudar a URL do banco de dados para o endereço do MySQL
}
uma vez isso feito, é possível fazer deploy da sua aplicação na Vercel sem problemas, o próprio fastify tem um tópico na documentação falando sobre isso.
Caso queria continuar utilizando o SQLite, recomendo outras plataformas de deploy que não utilizam a arquitetura serverless, como o fly.io ou o render