import { dataSource } from "../../../data-source"; import { invite } from "../../../entity/management/invite"; import DatabaseActionException from "../../../exceptions/databaseActionException"; import InternalException from "../../../exceptions/internalException"; import { StringHelper } from "../../../helpers/stringHelper"; import { CreateInviteCommand, DeleteInviteCommand } from "./inviteCommand"; export default abstract class InviteCommandHandler { /** * @description create user * @param CreateInviteCommand * @returns {Promise} */ static async create(createInvite: CreateInviteCommand): Promise { const token = StringHelper.random(32); return await dataSource .createQueryBuilder() .insert() .into(invite) .values({ mail: createInvite.mail, token: token, username: createInvite.username, firstname: createInvite.firstname, lastname: createInvite.lastname, secret: createInvite.secret, }) .orUpdate(["firstName", "lastName", "token", "secret"], ["mail"]) .execute() .then((result) => { return token; }) .catch((err) => { throw new DatabaseActionException("CREATE", "invite", err); }); } /** * @description delete invite by mail and token * @param DeleteInviteCommand * @returns {Promise} */ static async deleteByTokenAndMail(deleteInvite: DeleteInviteCommand): Promise { return await dataSource .createQueryBuilder() .delete() .from(invite) .where("invite.token = :token", { token: deleteInvite.token }) .andWhere("invite.mail = :mail", { mail: deleteInvite.mail }) .execute() .then((res) => {}) .catch((err) => { throw new DatabaseActionException("DELETE", "invite", err); }); } /** * @description delete invite by mail * @param DeleteByMailInviteCommand * @returns {Promise} */ static async deleteByMail(mail: string): Promise { return await dataSource .createQueryBuilder() .delete() .from(invite) .where("invite.mail = :mail", { mail }) .execute() .then((res) => {}) .catch((err) => { throw new DatabaseActionException("DELETE", "invite", err); }); } }