Sergei e1b32560ff Add Node.js backend with Stripe integration and admin panel
Backend features:
- Express.js API server
- Supabase database integration
- Stripe Checkout for payments ($249 kit + $9.99/mo premium)
- Stripe webhooks for payment events
- Admin panel with order management
- Auth middleware with JWT
- Email service via Brevo

API endpoints:
- /api/stripe/* - Payment processing
- /api/webhook/stripe - Stripe webhooks
- /api/admin/* - Admin operations
- /function/well-api/api - Legacy API proxy

Database migrations:
- orders, subscriptions, push_tokens tables

Schemes updated:
- Removed updatedAt from all schemes
- Updated credentials section with live values
- Added Stripe configuration details

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-19 09:49:24 -08:00

102 lines
2.4 KiB
JavaScript

const { supabase } = require('../config/supabase');
// POST: caretakers_list
exports.list = async (req, res) => {
const { user_name, token, first = 0, last = 100 } = req.body;
try {
const { data, error, count } = await supabase
.from('person_details')
.select('*', { count: 'exact' })
.eq('role', 'caretaker')
.range(parseInt(first), parseInt(last) - 1);
if (error) throw error;
return res.json({
caretakers: data,
total: count
});
} catch (error) {
return res.status(500).json({ error: error.message });
}
};
// POST: get_caretaker
exports.get = async (req, res) => {
const { user_name, token, user_id } = req.body;
try {
const { data, error } = await supabase
.from('person_details')
.select('*')
.eq('person_id', user_id)
.single();
if (error) throw error;
return res.json(data);
} catch (error) {
return res.status(404).json({ error: 'Caretaker not found' });
}
};
// POST: caretaker_form - create/update caretaker
exports.form = async (req, res) => {
const {
user_name, token, new_user_name, user_id, editing_user_id, key,
role_ids, access_to, email, first_name, last_name,
address_street, address_city, address_zip, address_state, address_country,
phone_number, picture
} = req.body;
try {
const personData = {
username: new_user_name,
email,
first_name,
last_name,
address_street,
address_city,
address_zip,
address_state,
address_country,
phone_number,
picture,
role: 'caretaker',
role_ids: role_ids ? JSON.parse(role_ids) : null,
access_to: access_to ? JSON.parse(access_to) : null,
time_edit: Date.now() / 1000
};
let result;
const id = editing_user_id || user_id;
if (id) {
// Update existing
const { data, error } = await supabase
.from('person_details')
.update(personData)
.eq('person_id', id)
.select()
.single();
if (error) throw error;
result = data;
} else {
// Create new
const { data, error } = await supabase
.from('person_details')
.insert(personData)
.select()
.single();
if (error) throw error;
result = data;
}
return res.json({ success: true, caretaker: result });
} catch (error) {
return res.status(500).json({ error: error.message });
}
};