Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] Resolver de Eventos: Retorno Incorrecto de Comunidades Asociadas #101

Open
TextC0de opened this issue Nov 26, 2023 · 3 comments
Open

Comments

@TextC0de
Copy link
Collaborator

En el proyecto, se maneja una relación many-to-many entre eventos y comunidades.
Esta relación se evidencia en la siguiente imagen, específicamente en la tabla events_communities:

Sin embargo, el código actual devuelve solo la primera comunidad asociada a cada evento, lo cual parece incoherente con la naturaleza de la relación many-to-many. El fragmento de código que está causando este comportamiento es el siguiente:

community: t.field({
type: CommunityRef,
nullable: true,
resolve: async (root, args, ctx) => {
const community = await ctx.DB.query.communitySchema.findFirst({
with: {
eventsToCommunities: {
where: (etc, { eq }) => eq(etc.eventId, root.id),
},
},
});
if (!community) {
return null;
}
return selectCommunitySchema.parse(community);
},
}),

Además, en algunas consultas, la comunidad devuelta no corresponde a la asociada al evento, similar al problema reportado en el issue #81.

Un ejemplo concreto de este problema se observa en la siguiente query y sus resultados, donde el evento con id 9d38e167-e376-476d-829d-10953675921e está vinculado incorrectamente a la comunidad con id c012d08f-e8e5-40ea-997a-d78bc1de4952:

query events {
  events {
    id
    name
    community {
      id
      name
    }
  }
}

Resultado Incorrecto de Query
Validación de Datos

@TextC0de TextC0de changed the title Corrección en Resolver de Eventos: Retorno Incorrecto de Comunidades Asociadas [BUG] Resolver de Eventos: Retorno Incorrecto de Comunidades Asociadas Nov 26, 2023
@TextC0de
Copy link
Collaborator Author

Analizado el código relacionado con el problema descrito en este issue:

community: t.field({
type: CommunityRef,
nullable: true,
resolve: async (root, args, ctx) => {
const community = await ctx.DB.query.communitySchema.findFirst({
with: {
eventsToCommunities: {
where: (etc, { eq }) => eq(etc.eventId, root.id),
},
},
});
if (!community) {
return null;
}
return selectCommunitySchema.parse(community);
},
}),

Propongo el siguiente cambio para mejorar el manejo de la relación many-to-many entre eventos y comunidades:

    communities: t.field({
      type: [CommunityRef],
      resolve: async (root, args, ctx) => {
        const communities = await ctx.DB.query.communitySchema.findMany({
          where: inArray(
            eventsSchema.id,
            ctx.DB.select({ id: eventsToCommunitiesSchema.communityId })
              .from(eventsToCommunitiesSchema)
              .where(eq(eventsToCommunitiesSchema.eventId, root.id)),
          ),
          orderBy(fields, operators) {
            return operators.desc(fields.createdAt);
          },
        });

        return communities.map((community) =>
          selectCommunitySchema.parse(community),
        );
      },
    }),

Este cambio, que utiliza findMany en lugar de findFirst, permitirá recuperar todas las comunidades asociadas a un evento, reflejando así correctamente la estructura de datos many-to-many del modelo.

Si no hay problema, puedo implementar esta solución en un Pull Request actualizando los tests correspondientes.

@fforres
Copy link
Member

fforres commented Apr 5, 2024

Me parece genial! :D

@fforres
Copy link
Member

fforres commented Apr 5, 2024

LMK si lo quieres hacer tu/tienes tiempo, o yo subo un PR 🙏🏼

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants