Backend: - CRUD completo para countries, regions y cities - GET /settings/policy/:key — página HTML pública para políticas - GET/PATCH /settings/policies/:key — admin endpoints protegidos Admin: - /locations: árbol interactivo País → Región → Ciudad con add/edit/delete - /settings: editor de Política de Privacidad y Términos con enlace público copiable - Sidebar: Ciudades → Ubicaciones Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
30 lines
628 B
TypeScript
30 lines
628 B
TypeScript
import { PrismaClient } from '@prisma/client';
|
|
import * as bcrypt from 'bcryptjs';
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
const email = 'admin@prosapp.co';
|
|
const password = process.argv[2] || 'Admin2024!';
|
|
|
|
const password_hash = await bcrypt.hash(password, 10);
|
|
|
|
const user = await prisma.users.upsert({
|
|
where: { email },
|
|
create: {
|
|
email,
|
|
password_hash,
|
|
name: 'Admin',
|
|
},
|
|
update: {
|
|
password_hash,
|
|
},
|
|
});
|
|
|
|
console.log(`✓ Admin listo: ${user.email} | password: ${password}`);
|
|
}
|
|
|
|
main()
|
|
.catch(console.error)
|
|
.finally(() => prisma.$disconnect());
|