deafmissoula-website/server/src/models/BoardMember.ts
friday-bot a164c1f956 Auth, drag-and-drop, image previews, rate limiting
- Login by email; board members are dashboard users (full access)
- Forced password change on first login; forgot/reset password via email
- Auto-send welcome email with set-password link when board member created
- 5 attempts / 5 min rate limit on login endpoint
- Board + Minutes tabs: drag-and-drop card reordering, persisted to DB
- PATCH /api/board/reorder and /api/minutes/reorder endpoints
- New minutes auto-insert at top (order 0)
- ImagePicker: inline preview thumbnail before upload (board, gallery, sponsors)
- Fix Minutes public sort: proper date parsing instead of broken string compare
- Remove server/dist/ from git tracking (.gitignore)
2026-05-27 16:49:10 -06:00

29 lines
1.1 KiB
TypeScript

import mongoose, { Document, Schema } from 'mongoose';
export interface IBoardMember extends Document {
name: string;
position: string;
email: string;
image: string;
bio: string;
order: number;
password?: string;
mustChangePassword: boolean;
resetToken?: string;
resetTokenExpiry?: Date;
}
const BoardMemberSchema = new Schema<IBoardMember>({
name: { type: String, required: true, trim: true },
position: { type: String, required: true, trim: true },
email: { type: String, required: true, unique: true, trim: true, lowercase: true },
image: { type: String, required: true },
bio: { type: String, required: true },
order: { type: Number, default: 0 },
password: { type: String, select: false },
mustChangePassword:{ type: Boolean, default: true },
resetToken: { type: String, select: false },
resetTokenExpiry: { type: Date, select: false },
}, { timestamps: true });
export const BoardMember = mongoose.model<IBoardMember>('BoardMember', BoardMemberSchema);