mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
61 lines
2.3 KiB
TypeScript
61 lines
2.3 KiB
TypeScript
/*
|
|
* Copyright © 2024 Hexastack. All rights reserved.
|
|
*
|
|
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
|
|
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
|
|
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
|
|
* 3. SaaS Restriction: This software, or any derivative of it, may not be used to offer a competing product or service (SaaS) without prior written consent from Hexastack. Offering the software as a service or using it in a commercial cloud environment without express permission is strictly prohibited.
|
|
*/
|
|
|
|
import { InjectModel } from '@nestjs/mongoose';
|
|
import { Model, TFilterQuery } from 'mongoose';
|
|
|
|
import { BaseRepository } from '@/utils/generics/base-repository';
|
|
|
|
import {
|
|
Invitation,
|
|
INVITATION_POPULATE,
|
|
InvitationDocument,
|
|
InvitationFull,
|
|
InvitationPopulate,
|
|
} from '../schemas/invitation.schema';
|
|
import { hash } from '../utilities/hash';
|
|
|
|
export class InvitationRepository extends BaseRepository<
|
|
Invitation,
|
|
InvitationPopulate,
|
|
InvitationFull
|
|
> {
|
|
constructor(@InjectModel(Invitation.name) readonly model: Model<Invitation>) {
|
|
super(model, Invitation, INVITATION_POPULATE, InvitationFull);
|
|
}
|
|
|
|
/**
|
|
* Pre-create hook that hashes the token of the invitation before saving it to the database.
|
|
*
|
|
* @param _doc - The document instance that is about to be created.
|
|
*/
|
|
async preCreate(_doc: InvitationDocument) {
|
|
if (_doc?.token) {
|
|
_doc.token = hash(_doc.token);
|
|
} else {
|
|
throw new Error('No token provided');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Builds the query used to find invitations, applying the hashed token to the filter
|
|
* if a token is provided.
|
|
*
|
|
* @param filter - The filter object for querying invitations.
|
|
*
|
|
* @returns The query with the hashed token if a token was provided, otherwise the original query.
|
|
*/
|
|
protected findQuery(filter: TFilterQuery<Invitation>) {
|
|
const filterWithHashedToken = filter.token
|
|
? { ...filter, token: hash(filter.token.toString()) }
|
|
: filter;
|
|
return super.findQuery(filterWithHashedToken);
|
|
}
|
|
}
|