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:
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 suid_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 pluginusers-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 campoid_stripedel 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étodoupdatede 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 campoid_stripecon 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, incluyendoid,username,name_last_name,email,phone, eid_stripe, que son datos básicos del usuario.populate: Esta opción permite incluir relaciones de otras colecciones relacionadas. En este caso,user_addressybilling_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;