import { ISession } from "../Session.model"; import { IUserDocument } from "./Users.Adapter.Mongoose"; export type SignUpParams = { email: string; password: string; lastName: string; firstName: string; phoneCountryCode?: string; phoneAreaCode: string; phoneNumber: string; }; export type UpdateUserParams = { id: string; userName?: string; email?: string; firstName?: string; lastName?: string; street?: string; streetNumber?: string; builingFloor?: string; buildingApartament?: string; block?: string; //barrio o localidad city?: string; state?: string; country?: string; zipCode?: string; phoneCountryCode?: string; phoneAreaCode?: string; phoneNumber?: string; verificated?: boolean; sessionUser: string; external_id?: string; external_service?: string; }; export type LoginParams = { email: string; password: string; }; export type VerificationUserParams = LoginParams & { verificationCode: string; }; export type LoginByTokenParams = { token: string; }; export type LoginByGoogleParams = { token: string; }; export type ChangePasswordParams = { oldPassword: string; newPassword: string; sessionUser: string; }; export type SetUserFileParams = { sessionUser: string; file: Express.Multer.File; }; export type FindUsersParams = { _id?: string; email?: string; firstName?: string; lastName?: string; external_id?: string; external_service?: string; sessionUser?: string; }; export interface IGoogleData { id: string; email: string; name: string; picture: string; } export interface IUserView { id: string; email: string; firstName?: string; lastName?: string; fullName?: string; avatar?: string; phoneNumber?: string; phoneCountryCode?: string; phoneAreaCode?: string; formattedPhoneNumber?: string; street?: string; streetNumber?: string; builingFloor?: string; buildingApartament?: string; block?: string; city?: string; state?: string; country?: string; zipCode?: string; } export interface UserAssistanceInfo { message: string; email?: string; fullName?: string; verificated: boolean; activationCode?: string; recoveryCode?: string; } export interface CollaboratorView { id: string; email: string; fullName: string; avatar: string; } export type FindCollaboratorByEmailParams = { email: string; }; export type PaginateUsersParams = FindUsersParams & { page: number; limit: number; }; export type PaginateUsersResults = { data: IUser[]; page: number; pages: number; }; export type RecoveryAccountParams = { email: string; recoveryCode?: string; newPassword?: string; sendRecoveryCode: boolean; }; export type DeleteUserParams = { sessionUser: string; }; export type SavePayerEmailParams = { email: string; sessionUser: string; }; export type GetPayerEmailParams = { sessionUser: string; }; export type CheckUserPhoneParams = { sessionUser: string; }; export interface PayerEmailResult { mpPayerEmail?: string; } export type SysAdminPaginateUsersParams = { page: number; limit: number; name?: string; lastName?: string; email?: string; isVerified?: boolean; createdFrom?: string; createdTo?: string; sortBy?: "name" | "createdAt"; sortOrder?: "asc" | "desc"; }; export type SysAdminUpdateProfileParams = { userId: string; firstName?: string; lastName?: string; street?: string; streetNumber?: string; builingFloor?: string; buildingApartament?: string; block?: string; city?: string; state?: string; country?: string; zipCode?: string; phoneCountryCode?: string; phoneAreaCode?: string; phoneNumber?: string; }; export type SysAdminSetVerifiedParams = { userId: string; isVerified: boolean; }; export type SysAdminDeleteUserParams = { userId: string; }; export type SysAdminOrganizationsStatusParams = { userId: string; }; export type SysAdminUserSubscriptionDetailsParams = { userId: string; }; export type SysAdminExtendUserSubscriptionMode = "add_months" | "set_end_date"; export type SysAdminExtendUserSubscriptionParams = { userId: string; mode: SysAdminExtendUserSubscriptionMode; months?: 1 | 2; endDate?: string; reason?: string; }; export type SysAdminExtendUserSubscriptionResult = { userId: string; subscriptionId: string; previousEndDate: Date; newEndDate: Date; paymentId: string; transactionId?: string; }; export type SysAdminFinalizeUserSubscriptionParams = { userId: string; reason?: string; }; export type SysAdminFinalizeUserSubscriptionResult = { userId: string; subscriptionId: string; previousEndDate: Date; newEndDate: Date; }; export type SysAdminUserSubscriptionPayment = { id: string; subscriptionId: string; amount: number; paymentDate: Date; paymentMethod?: string; status: string; transactionId?: string; }; export type SysAdminUserSubscriptionDetailsResult = { userId: string; currentSubscription: { id: string; plan: { id: string; name: string; code: string; price: number; } | null; startDate: Date; endDate: Date; isActive: boolean; mpStatus?: string; billingMonths?: number; pendingPaymentType?: "extension" | "upgrade"; pendingPaymentPreferenceId?: string; lastPaymentStatus?: string; } | null; payments: SysAdminUserSubscriptionPayment[]; }; export type SysAdminUserOrganizationsResult = { clientIn: { companyId: string; companyName: string }[]; collaboratorIn: { companyId: string; companyName: string }[]; }; export interface IUser { id?: string; password?: string; email: string; firstName?: string; lastName?: string; external_id?: string; external_service?: string; street?: string; streetNumber?: string; builingFloor?: string; buildingApartament?: string; block?: string; city?: string; state?: string; country?: string; zipCode?: string; phoneCountryCode?: string; phoneAreaCode?: string; phoneNumber?: string; verificated?: boolean; verificationCode?: string; recoveryCode?: string; avatar?: string; mpPayerEmail?: string; lastLoginDate?: Date; } export interface IUsersAdapter { create(user: IUser): Promise; delete(id: string): Promise; find(filters: FindUsersParams): Promise; findOne(filters: FindUsersParams): Promise; paginate(filters: PaginateUsersParams): Promise; update(data: UpdateUserParams): Promise; sysAdminPaginate(filters: SysAdminPaginateUsersParams): Promise; } export interface IUsersManager { users: IUsersAdapter; signUp(data: SignUpParams): Promise; login(data: LoginParams): Promise; loginByToken(data: LoginByTokenParams): Promise; changePassword(data: ChangePasswordParams): Promise; recoveryAccount(data: RecoveryAccountParams): Promise; updateUser(data: UpdateUserParams): Promise; setUserIcon(data: SetUserFileParams): Promise; findOne(data: FindUsersParams): Promise; findByEmail(data: FindCollaboratorByEmailParams): Promise; getUserFullName(data: IUser): string; deleteUser(data: DeleteUserParams): Promise; savePayerEmail(data: SavePayerEmailParams): Promise; getPayerEmail(data: GetPayerEmailParams): Promise; checkUserPhone(data: CheckUserPhoneParams): Promise; getUserAssistanceInfo(data: FindUsersParams): Promise; // SysAdmin Methods sysAdminPaginateUsers(data: SysAdminPaginateUsersParams): Promise; sysAdminUpdateProfile(data: SysAdminUpdateProfileParams): Promise; sysAdminSetVerifiedStatus(data: SysAdminSetVerifiedParams): Promise; sysAdminDeleteUser(data: SysAdminDeleteUserParams): Promise; sysAdminOrganizationsStatus(data: SysAdminOrganizationsStatusParams): Promise; }