Files
bigcapital/packages/server/src/interfaces/User.ts
2023-05-05 00:28:57 +02:00

186 lines
3.8 KiB
TypeScript

import { AnyObject } from '@casl/ability/dist/types/types';
import { ITenant } from '@/interfaces';
import { Model } from 'objection';
import { Tenant } from '@/system/models';
export interface ISystemUser extends Model {
id: number;
firstName: string;
lastName: string;
active: boolean;
password: string;
email: string;
roleId: number;
tenantId: number;
inviteAcceptAt: Date;
lastLoginAt: Date;
deletedAt: Date;
createdAt: Date;
updatedAt: Date;
}
export interface ISystemUserDTO {
firstName: string;
lastName: string;
password: string;
active: boolean;
email: string;
roleId?: number;
}
export interface IEditUserDTO {
firstName: string;
lastName: string;
active: boolean;
email: string;
roleId: number;
}
export interface IInviteUserInput {
firstName: string;
lastName: string;
password: string;
}
export interface IUserInvite {
id: number;
email: string;
token: string;
tenantId: number;
userId: number;
createdAt?: Date;
}
export interface IInviteUserService {
acceptInvite(token: string, inviteUserInput: IInviteUserInput): Promise<void>;
/**
* Re-send user invite.
* @param {number} tenantId -
* @param {string} email -
* @return {Promise<{ invite: IUserInvite }>}
*/
resendInvite(
tenantId: number,
userId: number,
authorizedUser: ISystemUser
): Promise<{
user: ITenantUser;
}>;
/**
* Sends invite mail to the given email from the given tenant and user.
* @param {number} tenantId -
* @param {string} email -
* @param {IUser} authorizedUser -
* @return {Promise<IUserInvite>}
*/
sendInvite(
tenantId: number,
sendInviteDTO: IUserSendInviteDTO,
authorizedUser: ISystemUser
): Promise<{
invitedUser: ITenantUser;
}>;
}
export interface IAcceptInviteUserService {
/**
* Accept the received invite.
* @param {string} token
* @param {IInviteUserInput} inviteUserInput
* @throws {ServiceErrors}
* @returns {Promise<void>}
*/
acceptInvite(token: string, inviteUserDTO: IInviteUserInput): Promise<void>;
/**
* Validate the given invite token.
* @param {string} token - the given token string.
* @throws {ServiceError}
*/
checkInvite(
token: string
): Promise<{ inviteToken: IUserInvite; orgName: object }>;
}
export interface ITenantUser {}
export interface ITenantUserEditedPayload {
tenantId: number;
userId: number;
editUserDTO: IEditUserDTO;
tenantUser: ITenantUser;
oldTenantUser: ITenantUser;
}
export interface ITenantUserActivatedPayload {
tenantId: number;
userId: number;
authorizedUser: ISystemUser;
tenantUser: ITenantUser;
}
export interface ITenantUserInactivatedPayload {
tenantId: number;
userId: number;
authorizedUser: ISystemUser;
tenantUser: ITenantUser;
}
export interface ITenantUserDeletedPayload {
tenantId: number;
userId: number;
tenantUser: ITenantUser;
}
export interface ITenantUser {
id?: number;
firstName: string;
lastName: string;
active: boolean;
email: string;
roleId?: number;
systemUserId: number;
invitedAt: Date | null;
inviteAcceptedAt: Date | null;
}
export interface IUserInvitedEventPayload {
inviteToken: string;
authorizedUser: ISystemUser;
tenantId: number;
user: ITenantUser;
}
export interface IUserInviteTenantSyncedEventPayload {
invite: IUserInvite;
authorizedUser: ISystemUser;
tenantId: number;
user: ITenantUser;
}
export interface IUserInviteResendEventPayload {
inviteToken: string;
authorizedUser: ISystemUser;
tenantId: number;
user: ITenantUser;
}
export interface IAcceptInviteEventPayload {
inviteToken: IUserInvite;
user: ISystemUser;
inviteUserDTO: IInviteUserInput;
}
export interface ICheckInviteEventPayload {
inviteToken: IUserInvite;
tenant: Tenant;
}
export interface IUserSendInviteDTO {
email: string;
roleId: number;
}