Skip to content

Servicio de usuario

El archivo de servicios de usario proporciona métodos para interactuar con los datos de los usuarios en Strapi. Permite consultar y actualizar información de usuarios, incluyendo la asociación con Stripe.Estos metodos se usan en el controlador. El codigo en cuestion es el siguente:

extensions/users-permissions/services/user-service.ts
export interface UserService {
getUserIdStripe_Strapi(email: string): Promise<any>;
updateStrapiUser(email: string, id_stripe: string): Promise<void>;
getUserById(decodedId: any): Promise<any>;
}
const userService: UserService = {
async getUserIdStripe_Strapi(email: string) {
const id_stripe_strapi = await strapi.db
.query("plugin::users-permissions.user")
.findOne({
select: ["id_stripe"],
where: { email },
});
return id_stripe_strapi;
},
async updateStrapiUser(email: string, id_stripe: string): Promise<void> {
await strapi.db.query("plugin::users-permissions.user").update({
where: { email },
data: {
id_stripe,
},
});
},
async getUserById(decodedId: any): Promise<any> {
const user = await strapi.db
.query("plugin::users-permissions.user")
.findOne({
select: [
"id",
"username",
"name_last_name",
"email",
"phone",
"id_stripe",
],
populate: {
user_address: true,
billing_address: true,
},
where: { id: decodedId.id },
});
return user;
},
};
export default userService;

Primero se crea una interfaz donde se declaran los metodos que esta tendra.

  • getUserIdStripe_Strapi: Busca el ID de Stripe de un usuario en Strapi a partir de su correo electrónico.
  • updateStrapiUser: Actualiza el registro de un usuario en Strapi agregando o modificando su id_stripe.
  • getUserById: Obtiene un usuario por su ID y devuelve varios detalles del mismo, incluyendo direcciones asociadas
export interface UserService {
getUserIdStripe_Strapi(email: string): Promise<any>;
updateStrapiUser(email: string, id_stripe: string): Promise<void>;
getUserById(decodedId: any): Promise<any>;
}

Implementación del userService

getUserIdStripe_Strapi

Este método toma el correo electrónico del usuario como parámetro, y su propósito es obtener el id_stripe almacenado en la base de datos de Strapi.

  • strapi.db.query: Esto utiliza el API interna de Strapi para interactuar con la base de datos. En este caso, consulta la colección de usuarios proporcionada por el plugin users-permissions.
  • findOne: Este método busca un solo usuario en la base de datos que coincida con el correo electrónico proporcionado.
  • select: ['id_stripe']: Especifica que solo queremos obtener el campo id_stripe del usuario, que contiene el identificador de Stripe asociado con este usuario.
async getUserIdStripe_Strapi(email: string) {
const id_stripe_strapi = await strapi.db.query('plugin::users-permissions.user').findOne({
select: ['id_stripe'],
where: { email },
});
return id_stripe_strapi;
}

updateStrapiUser

Este método actualiza el registro de un usuario en Strapi agregando o modificando su id_stripe.

  • update: El método update de Strapi permite modificar los datos de un usuario existente.
  • where: email: Busca al usuario por su correo electrónico.
  • data: id_stripe: Actualiza o añade el campo id_stripe con el valor proporcionado.
async updateStrapiUser(email: string, id_stripe: string): Promise<void> {
await strapi.db.query('plugin::users-permissions.user').update({
where: { email },
data: {
id_stripe,
},
});
}

getUserById

Este método recupera un usuario por su ID, devolviendo no solo información básica como nombre y correo electrónico, sino también sus direcciones asociadas.

  • select: Aquí seleccionamos varios campos, incluyendo id, username, name_last_name, email, phone, e id_stripe, que son datos básicos del usuario.
  • populate: Esta opción permite incluir relaciones de otras colecciones relacionadas. En este caso, user_address y billing_address, que probablemente sean colecciones en la base de datos de Strapi relacionadas con el usuario.
  • where: id: Busca al usuario en la base de datos utilizando su ID.
async getUserById(decodedId: any): Promise<any> {
const user = await strapi.db.query('plugin::users-permissions.user').findOne({
select: ['id', 'username', 'name_last_name', 'email', 'phone', 'id_stripe'],
populate: {
user_address: true,
billing_address: true,
},
where: { id: decodedId.id },
});
return user;
}

Por ultimo solo exporta

export default userService;