Estou trabalhando em uma aplicação que interage com um PostgreSQL usando drizzle-orm e estou com problemas para atualizar a contagem de mensagens de um usuário no perfil dele. A updateProfile
função deveria incrementar o messageCount
campo, mas não parece estar atualizando como esperado.
export async function getProfile(userId: string): Promise<Array<Profile>> {
try {
return await db.select().from(profile).where(eq(profile.userId, userId));
} catch (error) {
console.error("Failed to get the profile from database");
throw error;
}
}
export async function updateProfile(userId: string, updates: Partial<Profile>) {
try {
return await db.update(profile).set(updates).where(eq(profile.userId, userId));
} catch (error) {
console.error("Failed to update the profile");
throw error;
}
}
export const profile = pgTable("Profile", {
id: uuid('id').primaryKey().notNull().defaultRandom(),
userId: uuid('userId')
.unique()
.references(() => user.id, { onDelete: "cascade" }),
trialDuration: integer("trialDuration").default(1 * 60), // seconds
trialEndTime: timestamp("trialEndTime"),
messageCount: integer("messageCount").notNull().default(0),
createdAt: timestamp('createdAt').defaultNow(),
});
export type Profile = InferSelectModel<typeof profile>;
const [profile] = await getProfile(session.user.id)
let messageCount = profile.messageCount;
if (messageCount < MAX_MESSAGES) {
console.log("Old profile: ", profile);
console.log("Test", session.user.id)
const newProfile = await updateProfile(session.user.id, { messageCount: messageCount++})
console.log("New profile: ", profile);
}
O que eu fiz:
- Registrei as atualizações dos argumentos do
updateProfile
, a saída foi{ messageCount: 0}
, sempre, então não houve incremento. - Registrei o valor de
prevCount
antes da atualização para garantir que está correto. - Tentei usar
prevCount + 1
diretamente naupdateProfile
chamada, mas também não funcionou.
Saída:
Old profile: {
id: '60862459-56b3-4279-a872-c406e870b873',
userId: 'a6b9ca00-2935-4b06-bd80-35e81b89ef3c',
trialDuration: 60,
trialEndTime: null,
messageCount: 0,
createdAt: 2025-04-06T05:52:54.838Z
}
Test a6b9ca00-2935-4b06-bd80-35e81b89ef3c
New profile: {
id: '60862459-56b3-4279-a872-c406e870b873',
userId: 'a6b9ca00-2935-4b06-bd80-35e81b89ef3c',
trialDuration: 60,
trialEndTime: null,
messageCount: 0,
createdAt: 2025-04-06T05:52:54.838Z
}
ATUALIZAR
Funciona se eu passar o perfil como argumento
const [profile] = await getProfile(session.user.id);
console.log(profile);
if (profile.messageCount < MAX_MESSAGES) {
profile.messageCount++;
await updateProfile(session.user.id, profile);
}
Mas não é isso que eu quero, eu quero atualizar os valores que eu especifico.