import { Schema } from "mongoose"; import { EnumMap,IJson,IDocument,IObject,IInstance,IModel,IAction,IActionTypes,ISettings,MiscInfo } from "@onebro/oba-common"; export enum FinavigatorUserProfileStatuses { N = "New", S = "Saved", Y = "Sent", Z = "Seen/Read", A = "Accepted", D = "Declined", R = "Revised", E = "Expired", C = "Cancelled",} export type FinavigatorUserProfileStatus = keyof typeof FinavigatorUserProfileStatuses; export enum FinavigatorRoles { G = "GUEST", U = "USER", A = "ADMIN", S = "SUPER", SA = "SYSADMIN"} export type FinavigatorRole = keyof typeof FinavigatorRoles; export type FinavigatorExperienceLevel = "novice"|"beginner"|"intermediate"|"advanced"|"expert"; export type FinavigatorUserProfileConfig = { username:string; role:FinavigatorRole; settings:ISettings<"location"|"cookies">; img?:string;}; export type FinavigatorUserProfileType = IObject & FinavigatorUserProfileConfig & { bio:string; motto:string; socials?:MiscInfo; stats?:MiscInfo; expYrs?:number; expLvl?:FinavigatorExperienceLevel; rating?:number; followers?:FinavigatorUserProfile[]; following?:FinavigatorUserProfile[];}; export interface FinavigatorUserProfileDocument extends IDocument,FinavigatorUserProfileType {lang:string;} export interface FinavigatorUserProfile extends IInstance,FinavigatorUserProfileDocument { following:FinavigatorUserProfile[]; followers:FinavigatorUserProfile[]; preview():FinavigatorUserProfilePreview; follow(o:any):Promise; unfollow(o:any):Promise; rate(o:any):Promise; invite(o:any):Promise; respond(o:any):Promise;} export interface FinavigatorUserProfileModel extends IModel {} export type FinavigatorUSerProfilePublicKeys = "username"|"bio"|"motto"|"expYrs"|"expLvl"|"rating"|"settings"|"img"|"socials"|"lang"; export type FinavigatorUSerProfilePublicData = Pick; export type FinavigatorUserProfilePreview = Pick & {role:FinavigatorRoles;}; export type FinavigatorUserProfileJson = IJson & FinavigatorUSerProfilePublicData & { role:FinavigatorRoles; memberSince:Date; followers:FinavigatorUserProfilePreview[]; following:FinavigatorUserProfilePreview[];}; export type FinavigatorUserProfileModelMap = {FinavigatorUserProfile:FinavigatorUserProfileModel;}; export type FinavigatorUserProfileInstanceMap = {profile:FinavigatorUserProfile;}; export type FinavigatorUserProfileSchemaMap = {profile:Schema;}; export type FinavigatorUserProfileActionTypes = IActionTypes|"fetchByUsername$"; export type FinavigatorUserProfileActions = EnumMap; export type FinavigatorUserProfileUpdateFollowersOrFollowing = Partial<{ addFollowers?:string[]; removeFollowers?:string[]; addFollowing?:string[]; removeFollowing?:string[];}>;