59 lines
1.1 KiB
TypeScript
59 lines
1.1 KiB
TypeScript
// src/models/session.ts
|
|
// Copyright (C) 2026 DTP Technologies, LLC
|
|
// All Rights Reserved
|
|
|
|
import { Types, Schema, Document, model } from "mongoose";
|
|
|
|
export interface ISession extends Document {
|
|
_id: Types.ObjectId;
|
|
userId: Types.ObjectId;
|
|
token: string;
|
|
createdAt: Date;
|
|
expiresAt: Date;
|
|
lastActivityAt: Date;
|
|
ipAddress?: string;
|
|
userAgent?: string;
|
|
}
|
|
|
|
const SessionSchema = new Schema<ISession>({
|
|
userId: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: "User",
|
|
required: true,
|
|
index: true,
|
|
},
|
|
token: {
|
|
type: String,
|
|
required: true,
|
|
unique: true,
|
|
index: true,
|
|
},
|
|
createdAt: {
|
|
type: Date,
|
|
required: true,
|
|
default: Date.now,
|
|
},
|
|
expiresAt: {
|
|
type: Date,
|
|
required: true,
|
|
index: true,
|
|
},
|
|
lastActivityAt: {
|
|
type: Date,
|
|
required: true,
|
|
default: Date.now,
|
|
},
|
|
ipAddress: {
|
|
type: String,
|
|
},
|
|
userAgent: {
|
|
type: String,
|
|
},
|
|
});
|
|
|
|
// Index for cleanup queries
|
|
SessionSchema.index({ expiresAt: 1 });
|
|
|
|
export const Session = model<ISession>("Session", SessionSchema);
|
|
export default Session;
|