Overview
The User model represents individuals registered in the BD Scan Face system. Each user has biometric face data, access logs, and is associated with a user type that defines their role and permissions.
Model Fields
Primary key. Auto-incremented unique identifier for the user.
Cedula de Identidad (ID document number). Must be unique across all users. Maximum 20 characters.
User’s first name. Maximum 100 characters.
User’s last name. Maximum 100 characters.
User’s email address. Must be unique across all users. Maximum 100 characters.
Optional phone number. Maximum 20 characters.
Foreign key reference to the UserType model. Defines the user’s role in the system.
Unique numeric code for the user. Can be used for manual identification or entry.
Indicates whether the user account is active. Defaults to true.
Timestamp when the user was registered in the system. Automatically set to current time.
Relationships
The UserType associated with this user. Defines role and permissions.
Array of Face records containing biometric encoding data for this user.
Array of AccessLog records tracking this user’s access events across devices.
Query Examples
Find All Users
const users = await prisma.user.findMany({
include: {
user_type: true,
faces: true,
_count: {
select: { access_logs: true }
}
},
orderBy: {
registration_date: 'desc'
}
});
Find User by ID
const user = await prisma.user.findUnique({
where: {
user_id: 1
},
include: {
user_type: true,
faces: {
orderBy: {
upload_date: 'desc'
}
},
access_logs: {
take: 10,
orderBy: {
access_date: 'desc'
},
include: {
device: true
}
}
}
});
Find User by CI or Email
const userByCi = await prisma.user.findUnique({
where: {
ci: '12345678'
},
include: {
user_type: true
}
});
const userByEmail = await prisma.user.findUnique({
where: {
email: '[email protected]'
}
});
Find User by Code
const userByCode = await prisma.user.findUnique({
where: {
code: 1001
},
include: {
user_type: true,
faces: true
}
});
Create New User
const newUser = await prisma.user.create({
data: {
ci: '12345678',
first_name: 'John',
last_name: 'Doe',
email: '[email protected]',
phone: '+1234567890',
user_type_id: 1,
code: 1001,
status: true
},
include: {
user_type: true
}
});
Update User
const updatedUser = await prisma.user.update({
where: {
user_id: 1
},
data: {
phone: '+9876543210',
email: '[email protected]',
status: false
},
include: {
user_type: true
}
});
Delete User
// Note: Consider cascading deletes for related faces and access_logs
const deletedUser = await prisma.user.delete({
where: {
user_id: 1
}
});
Filter Active Users by Type
const activeEmployees = await prisma.user.findMany({
where: {
status: true,
user_type: {
type_name: 'Employee'
}
},
include: {
user_type: true,
faces: true
},
orderBy: {
last_name: 'asc'
}
});
Search Users by Name
const searchResults = await prisma.user.findMany({
where: {
OR: [
{
first_name: {
contains: 'John',
mode: 'insensitive'
}
},
{
last_name: {
contains: 'John',
mode: 'insensitive'
}
}
],
status: true
},
include: {
user_type: true
}
});
Get Users with Recent Access
const recentlyActiveUsers = await prisma.user.findMany({
where: {
access_logs: {
some: {
access_date: {
gte: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) // Last 7 days
}
}
}
},
include: {
user_type: true,
_count: {
select: { access_logs: true }
}
}
});
Unique Constraints
ci: Must be unique across all users
email: Must be unique across all users
code: Must be unique across all users
Database Mapping
This model maps to the users table in the database.