import { dataSource } from "../data-source"; import { invite } from "../entity/invite"; 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 InternalException("Failed saving invite", err); }); } /** * @description delete invite by mail and token * @param DeleteRefreshCommand * @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 InternalException("failed invite removal", err); }); } }