import serverError from "./serverError"; import addDbEntry from "./db/addDbEntry"; import { DATASQUIREL_LoggedInUser } from "../../types"; import dbHandler from "./dbHandler"; type Param = { query: { invite: number; database_access: string; priviledge: string; email: string; }; user: DATASQUIREL_LoggedInUser; }; /** * Add Admin User on Login * ============================================================================== * * @description this function handles admin users that have been invited by another * admin user. This fires when the invited user has been logged in or a new account * has been created for the invited user */ export default async function addAdminUserOnLogin({ query, user, }: Param): Promise { try { const { invite, database_access, priviledge, email } = query; const lastInviteTimeQuery = `SELECT date_created_code FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`; const lastInviteTimeValues = [invite, email]; const lastInviteTimeArray = (await dbHandler({ query: lastInviteTimeQuery, values: lastInviteTimeValues, })) as any[]; if (!lastInviteTimeArray || !lastInviteTimeArray[0]) { throw new Error("No Invitation Found"); } //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// const invitingUserDbQuery = `SELECT first_name,last_name,email FROM users WHERE id=?`; const invitingUserDbValues = [invite]; const invitingUserDb = (await dbHandler({ query: invitingUserDbQuery, values: invitingUserDbValues, })) as any[]; if (invitingUserDb?.[0]) { const existingUserUser = (await dbHandler({ query: `SELECT email FROM user_users WHERE user_id=? AND invited_user_id=? AND user_type='admin' AND email=?`, values: [invite, user.id, email], })) as any[]; if (existingUserUser?.[0]) { console.log("User already added"); } else { addDbEntry({ dbFullName: "datasquirel", tableName: "user_users", data: { user_id: invite, invited_user_id: user.id, database_access: database_access, first_name: user.first_name, last_name: user.last_name, phone: user.phone, email: user.email, username: user.username, user_type: "admin", user_priviledge: priviledge, image: user.image, image_thumbnail: user.image_thumbnail, }, }); //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// const dbTableData = (await dbHandler({ query: `SELECT db_tables_data FROM invitations WHERE inviting_user_id=? AND invited_user_email=?`, values: [invite, email], })) as any[]; const clearEntries = (await dbHandler({ query: `DELETE FROM delegated_user_tables WHERE root_user_id=? AND delegated_user_id=?`, values: [invite, user.id], })) as any[]; //////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////////////////////////////////// if (dbTableData && dbTableData[0]) { const dbTableEntries = dbTableData[0].db_tables_data.split("|"); for (let i = 0; i < dbTableEntries.length; i++) { const dbTableEntry = dbTableEntries[i]; const dbTableEntryArray = dbTableEntry.split("-"); const [db_slug, table_slug] = dbTableEntryArray; const newEntry = await addDbEntry({ dbFullName: "datasquirel", tableName: "delegated_user_tables", data: { delegated_user_id: user.id, root_user_id: invite, database: db_slug, table: table_slug, priviledge: priviledge, }, }); } } } const inviteAccepted = (await dbHandler({ query: `UPDATE invitations SET invitation_status='Accepted' WHERE inviting_user_id=? AND invited_user_email=?`, values: [invite, email], })) as any[]; } } catch (error: any) { serverError({ component: "addAdminUserOnLogin", message: error.message, user: user, }); } }