feat: initial NFC Attendance Hub implementation
- Multi-tenant client management with unique API keys - Semaphore SMS integration (per-client key + sender name + credit balance) - DB-based SMS queue with 3-attempt retry and exponential backoff - Failed SMS dashboard with manual retry button - Reports page with date/client filter and CSV export - Admin auth via NextAuth (email/password) - Docker Compose setup (app + PostgreSQL 16) - Prisma 5 schema with SmsQueue, SmsLog, Client, User models Tech: Next.js 14 App Router + TypeScript + Tailwind CSS + Prisma + PostgreSQL
This commit is contained in:
24
prisma/seed.ts
Normal file
24
prisma/seed.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
import bcrypt from 'bcryptjs'
|
||||
|
||||
const prisma = new PrismaClient()
|
||||
|
||||
async function main() {
|
||||
const email = process.env.SEED_EMAIL || 'admin@nfchub.local'
|
||||
const password = process.env.SEED_PASSWORD || 'admin123'
|
||||
|
||||
const existing = await prisma.user.findUnique({ where: { email } })
|
||||
if (!existing) {
|
||||
const hashed = await bcrypt.hash(password, 12)
|
||||
await prisma.user.create({
|
||||
data: { email, password: hashed, name: 'Admin', role: 'ADMIN' },
|
||||
})
|
||||
console.log(`✅ Created admin user: ${email}`)
|
||||
} else {
|
||||
console.log(`ℹ Admin user already exists: ${email}`)
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.catch(e => { console.error(e); process.exit(1) })
|
||||
.finally(() => prisma.$disconnect())
|
||||
Reference in New Issue
Block a user