feat: habilita modo desarrollo con bypass de auth y seed de demo
Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>webui
parent
7e8b9c3d7a
commit
ca616a786a
@ -0,0 +1,109 @@
|
||||
/**
|
||||
* Seed mínimo de datos de demo para desarrollo.
|
||||
* Inserta usuarios, grupos permitidos, membresías, preferencias y tareas variadas.
|
||||
*/
|
||||
function toIsoYmd(d: Date): string {
|
||||
const yyyy = d.getUTCFullYear();
|
||||
const mm = String(d.getUTCMonth() + 1).padStart(2, '0');
|
||||
const dd = String(d.getUTCDate()).padStart(2, '0');
|
||||
return `${yyyy}-${mm}-${dd}`;
|
||||
}
|
||||
function addDays(base: Date, days: number): Date {
|
||||
return new Date(base.getTime() + days * 24 * 3600 * 1000);
|
||||
}
|
||||
|
||||
export async function seedDev(db: any, defaultUser: string): Promise<void> {
|
||||
try { db.exec(`PRAGMA foreign_keys = ON;`); } catch {}
|
||||
// Si ya hay tareas, asumimos BD poblada
|
||||
try {
|
||||
const row = db.query(`SELECT COUNT(*) AS c FROM tasks`).get() as any;
|
||||
if (row && Number(row.c || 0) > 0) return;
|
||||
} catch {}
|
||||
|
||||
const now = new Date();
|
||||
const today = toIsoYmd(now);
|
||||
const tomorrow = toIsoYmd(addDays(now, 1));
|
||||
const nextWeek = toIsoYmd(addDays(now, 7));
|
||||
const overdue = toIsoYmd(addDays(now, -1));
|
||||
const inTwoDays = toIsoYmd(addDays(now, 2));
|
||||
|
||||
const otherUser = '5550001111';
|
||||
// Usuarios
|
||||
db.prepare(`
|
||||
INSERT OR IGNORE INTO users (id, first_seen, last_seen)
|
||||
VALUES (?, strftime('%Y-%m-%d %H:%M:%f','now'), strftime('%Y-%m-%d %H:%M:%f','now'))
|
||||
`).run(defaultUser);
|
||||
db.prepare(`
|
||||
INSERT OR IGNORE INTO users (id, first_seen, last_seen)
|
||||
VALUES (?, strftime('%Y-%m-%d %H:%M:%f','now'), strftime('%Y-%m-%d %H:%M:%f','now'))
|
||||
`).run(otherUser);
|
||||
|
||||
// Grupos
|
||||
db.prepare(`
|
||||
INSERT OR IGNORE INTO groups (id, community_id, name, active, last_verified)
|
||||
VALUES (?, 'comm-1', ?, 1, strftime('%Y-%m-%d %H:%M:%f','now'))
|
||||
`).run('g-1@g.us', 'Grupo Alpha');
|
||||
db.prepare(`
|
||||
INSERT OR IGNORE INTO groups (id, community_id, name, active, last_verified)
|
||||
VALUES (?, 'comm-1', ?, 1, strftime('%Y-%m-%d %H:%M:%f','now'))
|
||||
`).run('g-2@g.us', 'Grupo Beta');
|
||||
|
||||
// Allowed groups
|
||||
try {
|
||||
db.prepare(`
|
||||
INSERT OR IGNORE INTO allowed_groups (group_id, label, status, discovered_at, updated_at, discovered_by)
|
||||
VALUES (?, 'Alpha', 'allowed', strftime('%Y-%m-%d %H:%M:%f','now'), strftime('%Y-%m-%d %H:%M:%f','now'), NULL)
|
||||
`).run('g-1@g.us');
|
||||
db.prepare(`
|
||||
INSERT OR IGNORE INTO allowed_groups (group_id, label, status, discovered_at, updated_at, discovered_by)
|
||||
VALUES (?, 'Beta', 'allowed', strftime('%Y-%m-%d %H:%M:%f','now'), strftime('%Y-%m-%d %H:%M:%f','now'), NULL)
|
||||
`).run('g-2@g.us');
|
||||
} catch {}
|
||||
|
||||
// Membresías (usuario por defecto activo en ambos grupos)
|
||||
db.prepare(`
|
||||
INSERT OR REPLACE INTO group_members (group_id, user_id, is_admin, is_active, first_seen_at, last_seen_at)
|
||||
VALUES (?, ?, 0, 1, strftime('%Y-%m-%d %H:%M:%f','now'), strftime('%Y-%m-%d %H:%M:%f','now'))
|
||||
`).run('g-1@g.us', defaultUser);
|
||||
db.prepare(`
|
||||
INSERT OR REPLACE INTO group_members (group_id, user_id, is_admin, is_active, first_seen_at, last_seen_at)
|
||||
VALUES (?, ?, 0, 1, strftime('%Y-%m-%d %H:%M:%f','now'), strftime('%Y-%m-%d %H:%M:%f','now'))
|
||||
`).run('g-2@g.us', defaultUser);
|
||||
|
||||
// Preferencias del usuario
|
||||
try {
|
||||
db.prepare(`
|
||||
INSERT OR REPLACE INTO user_preferences (user_id, reminder_freq, reminder_time, last_reminded_on, updated_at)
|
||||
VALUES (?, 'daily', '08:30', NULL, strftime('%Y-%m-%d %H:%M:%f','now'))
|
||||
`).run(defaultUser);
|
||||
} catch {}
|
||||
|
||||
// Crear tareas diversas
|
||||
const insertTask = db.prepare(`
|
||||
INSERT INTO tasks (description, due_date, group_id, created_by, completed, completed_at)
|
||||
VALUES (?, ?, ?, ?, COALESCE(?, 0), ?)
|
||||
`);
|
||||
const assignStmt = db.prepare(`
|
||||
INSERT OR IGNORE INTO task_assignments (task_id, user_id, assigned_by)
|
||||
VALUES (?, ?, ?)
|
||||
`);
|
||||
|
||||
const tasksToCreate = [
|
||||
{ desc: 'Tarea sin responsable (hoy) - Grupo Alpha', due: today, group: 'g-1@g.us', assignTo: null, completed: 0, completedAt: null },
|
||||
{ desc: 'Tarea sin responsable (mañana) - Grupo Alpha', due: tomorrow, group: 'g-1@g.us', assignTo: null, completed: 0, completedAt: null },
|
||||
{ desc: 'Tarea sin responsable (próx. semana) - Grupo Beta', due: nextWeek, group: 'g-2@g.us', assignTo: null, completed: 0, completedAt: null },
|
||||
{ desc: 'Mi tarea personal (en 2 días)', due: inTwoDays, group: null, assignTo: defaultUser, completed: 0, completedAt: null },
|
||||
{ desc: 'Mi tarea (vencida ayer) - Grupo Alpha', due: overdue, group: 'g-1@g.us', assignTo: defaultUser, completed: 0, completedAt: null },
|
||||
{ desc: 'Tarea completada reciente', due: today, group: null, assignTo: defaultUser, completed: 1, completedAt: new Date().toISOString().replace('T',' ').replace('Z','') }
|
||||
];
|
||||
|
||||
db.transaction(() => {
|
||||
for (const t of tasksToCreate) {
|
||||
const res = insertTask.run(t.desc, t.due, t.group, defaultUser, t.completed, t.completedAt);
|
||||
const id = Number((res as any)?.lastInsertRowid ?? 0);
|
||||
if (t.assignTo && id > 0) {
|
||||
assignStmt.run(id, t.assignTo, defaultUser);
|
||||
}
|
||||
}
|
||||
})();
|
||||
}
|
||||
Loading…
Reference in New Issue