backend: add membershipDate and registrationDate fields to room member and user schemas
This commit is contained in:
parent
b017334976
commit
df2d58c3bb
@ -71,6 +71,10 @@ const MeetRoomMemberSchema = new Schema<MeetRoomMemberDocument>(
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
membershipDate: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
baseRole: {
|
||||
type: String,
|
||||
enum: Object.values(MeetRoomMemberRole),
|
||||
@ -95,6 +99,8 @@ const MeetRoomMemberSchema = new Schema<MeetRoomMemberDocument>(
|
||||
|
||||
// Create indexes for efficient querying
|
||||
MeetRoomMemberSchema.index({ roomId: 1, memberId: 1 }, { unique: true });
|
||||
MeetRoomMemberSchema.index({ roomId: 1, membershipDate: -1, _id: -1 });
|
||||
MeetRoomMemberSchema.index({ roomId: 1, name: 1, membershipDate: -1, _id: -1 });
|
||||
MeetRoomMemberSchema.index({ roomId: 1, name: 1, _id: 1 });
|
||||
MeetRoomMemberSchema.index({ memberId: 1 });
|
||||
|
||||
|
||||
@ -303,7 +303,8 @@ MeetRoomSchema.index({ roomId: 1 }, { unique: true });
|
||||
MeetRoomSchema.index({ creationDate: -1, _id: -1 });
|
||||
MeetRoomSchema.index({ roomName: 1, creationDate: -1, _id: -1 });
|
||||
MeetRoomSchema.index({ status: 1, creationDate: -1, _id: -1 });
|
||||
MeetRoomSchema.index({ autoDeletionDate: 1 });
|
||||
MeetRoomSchema.index({ owner: 1, creationDate: -1, _id: -1 });
|
||||
MeetRoomSchema.index({ autoDeletionDate: 1, _id: 1 });
|
||||
|
||||
export const meetRoomCollectionName = 'MeetRoom';
|
||||
|
||||
|
||||
@ -30,6 +30,10 @@ const MeetUserSchema = new Schema<MeetUserDocument>(
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
registrationDate: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
role: {
|
||||
type: String,
|
||||
enum: Object.values(MeetUserRole),
|
||||
@ -54,7 +58,10 @@ const MeetUserSchema = new Schema<MeetUserDocument>(
|
||||
|
||||
// Create indexes for efficient querying
|
||||
MeetUserSchema.index({ userId: 1 }, { unique: true });
|
||||
MeetUserSchema.index({ name: 1, _id: 1 });
|
||||
MeetUserSchema.index({ registrationDate: -1, _id: -1 });
|
||||
MeetUserSchema.index({ name: 1, registrationDate: -1, _id: -1 });
|
||||
MeetUserSchema.index({ role: 1, registrationDate: -1, _id: -1 });
|
||||
MeetUserSchema.index({ name: 1, role: 1, _id: 1 });
|
||||
|
||||
export const meetUserCollectionName = 'MeetUser';
|
||||
|
||||
|
||||
@ -129,8 +129,8 @@ export class RoomMemberRepository extends BaseRepository<MeetRoomMember, MeetRoo
|
||||
* @param options.fields - Comma-separated list of fields to include in the result
|
||||
* @param options.maxItems - Maximum number of results to return (default: 100)
|
||||
* @param options.nextPageToken - Token for pagination
|
||||
* @param options.sortField - Field to sort by (default: 'name')
|
||||
* @param options.sortOrder - Sort order: 'asc' or 'desc' (default: 'asc')
|
||||
* @param options.sortField - Field to sort by (default: 'membershipDate')
|
||||
* @param options.sortOrder - Sort order: 'asc' or 'desc' (default: 'desc')
|
||||
* @returns Object containing members array, pagination info, and optional next page token
|
||||
*/
|
||||
async findByRoomId(
|
||||
@ -149,7 +149,7 @@ export class RoomMemberRepository extends BaseRepository<MeetRoomMember, MeetRoo
|
||||
|
||||
this.currentRoomRoles = room.roles;
|
||||
|
||||
const { name, fields, maxItems = 100, nextPageToken, sortField = 'name', sortOrder = 'asc' } = options;
|
||||
const { name, fields, maxItems = 100, nextPageToken, sortField = 'membershipDate', sortOrder = 'desc' } = options;
|
||||
|
||||
// Build base filter
|
||||
const filter: Record<string, unknown> = { roomId };
|
||||
|
||||
@ -79,8 +79,8 @@ export class UserRepository<TUser extends MeetUser = MeetUser> extends BaseRepos
|
||||
* @param options.role - Optional role to filter by
|
||||
* @param options.maxItems - Maximum number of results to return (default: 100)
|
||||
* @param options.nextPageToken - Token for pagination
|
||||
* @param options.sortField - Field to sort by (default: 'name')
|
||||
* @param options.sortOrder - Sort order: 'asc' or 'desc' (default: 'asc')
|
||||
* @param options.sortField - Field to sort by (default: 'registrationDate')
|
||||
* @param options.sortOrder - Sort order: 'asc' or 'desc' (default: 'desc')
|
||||
* @returns Object containing users array, pagination info, and optional next page token
|
||||
*/
|
||||
async find(options: MeetUserFilters = {}): Promise<{
|
||||
@ -88,7 +88,15 @@ export class UserRepository<TUser extends MeetUser = MeetUser> extends BaseRepos
|
||||
isTruncated: boolean;
|
||||
nextPageToken?: string;
|
||||
}> {
|
||||
const { userId, name, role, maxItems = 100, nextPageToken, sortField = 'name', sortOrder = 'asc' } = options;
|
||||
const {
|
||||
userId,
|
||||
name,
|
||||
role,
|
||||
maxItems = 100,
|
||||
nextPageToken,
|
||||
sortField = 'registrationDate',
|
||||
sortOrder = 'desc'
|
||||
} = options;
|
||||
|
||||
// Build base filter
|
||||
const filter: Record<string, unknown> = {};
|
||||
|
||||
@ -90,6 +90,7 @@ export class RoomMemberService {
|
||||
memberId,
|
||||
roomId,
|
||||
name: memberName,
|
||||
membershipDate: Date.now(),
|
||||
baseRole,
|
||||
customPermissions
|
||||
} as MeetRoomMember;
|
||||
|
||||
@ -28,6 +28,7 @@ export class UserService {
|
||||
const admin: MeetUser = {
|
||||
userId: MEET_ENV.INITIAL_ADMIN_USER,
|
||||
name: 'Admin',
|
||||
registrationDate: Date.now(),
|
||||
role: MeetUserRole.ADMIN,
|
||||
passwordHash: await PasswordHelper.hashPassword(MEET_ENV.INITIAL_ADMIN_PASSWORD)
|
||||
};
|
||||
@ -47,6 +48,7 @@ export class UserService {
|
||||
const user: MeetUser = {
|
||||
userId: userOptions.userId,
|
||||
name: userOptions.name,
|
||||
registrationDate: Date.now(),
|
||||
role: userOptions.role,
|
||||
passwordHash
|
||||
};
|
||||
|
||||
@ -19,6 +19,7 @@ export interface MeetRoomMember {
|
||||
memberId: string; // Unique identifier for the member (equals userId for internal users, or generated for external users)
|
||||
roomId: string; // ID of the room the member belongs to
|
||||
name: string; // Name of the member (either internal or external user name)
|
||||
membershipDate: number; // Timestamp when the member was added to the room
|
||||
baseRole: MeetRoomMemberRole; // The base role of the member in the room
|
||||
customPermissions?: Partial<MeetRoomMemberPermissions>; // Custom permissions for the member (if any)
|
||||
effectivePermissions: MeetRoomMemberPermissions; // Effective permissions for the member (base role + custom permissions)
|
||||
|
||||
@ -13,6 +13,7 @@ export interface MeetUserOptions {
|
||||
export interface MeetUser {
|
||||
userId: string;
|
||||
name: string;
|
||||
registrationDate: number;
|
||||
role: MeetUserRole;
|
||||
passwordHash: string;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user