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>
102 lines
2.4 KiB
JavaScript
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 });
|
|
}
|
|
};
|