import { Express } from 'express' import { prismaClient as prisma } from '../prismaClient' import Stripe from 'stripe' const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { apiVersion: '2020-08-27', }) export default (server: Express) => { server.get('/api/stripe/connect/redirect', async (req, res) => { const { code, state } = req.query if (!state) { throw new Error('Invalid state') } const managingCompanyId = state as string const [project, managingCompany, service] = await Promise.all([ prisma.project.findOne({ where: { id: managingCompanyId }, include: { logo: true } }), prisma.managingCompany.findOne({ where: { id: managingCompanyId } }), prisma.service.findOne({ where: { id: managingCompanyId } }), ]) if (!project && !managingCompany && !service) { throw new Error( 'Something went wrong. Please contact our support at support@usewalter.com for any help. Thank you' ) } const response = await stripe.oauth.token({ grant_type: 'authorization_code', code: code as string, }) if (project) { await prisma.project.update({ where: { id: project.id, }, data: { stripeAccountAccessToken: response.access_token, stripeAccountId: response.stripe_user_id, }, }) return res .status(200) .redirect(`https://manager.usewalter.com/${project.id}/settings/advanced?connected=true`) } if (managingCompany) { await prisma.managingCompany.update({ where: { id: managingCompany.id, }, data: { stripeAccountAccessToken: response.access_token, stripeAccountId: response.stripe_user_id, }, }) return res .status(200) .redirect( 'https://manager.usewalter.com/all/settings/managingCompanyPayment?connected=true' ) } if (service) { await prisma.service.update({ where: { id: service.id, }, data: { stripeAccountAccessToken: response.access_token, stripeAccountId: response.stripe_user_id, }, }) // For now return res .status(200) .send( 'Sucess! You can now close this page and tell the administrator that everything went well. Please email info@usewilson.com if you have any question' ) // return res // .status(200) // .redirect(`https://services.usewalter.com/all/settings/payment?connected=true`) } }) }