import { Schema } from "mongoose"; import { EnumMap,IJson,IDocument,IObject,IInstance,IModel,IAction,IActionTypes,ISettings,MiscInfo } from "@onebro/oba-common"; export enum OneToOneUserProfileStatuses { N = "New", S = "Saved", Y = "Sent", Z = "Seen/Read", A = "Accepted", D = "Declined", R = "Revised", E = "Expired", C = "Cancelled",} export type OneToOneUserProfileStatus = keyof typeof OneToOneUserProfileStatuses; export enum OneToOneRoles { G = "GUEST", U = "USER", A = "ADMIN", S = "SUPER", SA = "SYSADMIN"} export type OneToOneRole = keyof typeof OneToOneRoles; export type OneToOneExperienceLevel = "novice"|"beginner"|"intermediate"|"advanced"|"expert"; export type OneToOneUserProfileConfig = { username:string; role:OneToOneRole; settings:ISettings<"location"|"cookies">; img?:string;}; export type OneToOneUserProfileType = IObject & OneToOneUserProfileConfig & { bio:string; motto:string; socials?:MiscInfo; stats?:MiscInfo; expYrs?:number; expLvl?:OneToOneExperienceLevel; rating?:number; followers?:OneToOneUserProfile[]; following?:OneToOneUserProfile[];}; export interface OneToOneUserProfileDocument extends IDocument,OneToOneUserProfileType {lang:string;} export interface OneToOneUserProfile extends IInstance,OneToOneUserProfileDocument { following:OneToOneUserProfile[]; followers:OneToOneUserProfile[]; preview():OneToOneUserProfilePreview; follow(o:any):Promise; unfollow(o:any):Promise; rate(o:any):Promise; invite(o:any):Promise; respond(o:any):Promise;} export interface OneToOneUserProfileModel extends IModel {} export type OneToOneUSerProfilePublicKeys = "username"|"bio"|"motto"|"expYrs"|"expLvl"|"rating"|"settings"|"img"|"socials"|"lang"; export type OneToOneUSerProfilePublicData = Pick; export type OneToOneUserProfilePreview = Pick & {role:OneToOneRoles;}; export type OneToOneUserProfileJson = IJson & OneToOneUSerProfilePublicData & { role:OneToOneRoles; memberSince:Date; followers:OneToOneUserProfilePreview[]; following:OneToOneUserProfilePreview[];}; export type OneToOneUserProfileModelMap = {OneToOneUserProfile:OneToOneUserProfileModel;}; export type OneToOneUserProfileInstanceMap = {profile:OneToOneUserProfile;}; export type OneToOneUserProfileSchemaMap = {profile:Schema;}; export type OneToOneUserProfileActionTypes = IActionTypes|"fetchByUsername$"; export type OneToOneUserProfileActions = EnumMap; export type OneToOneUserProfileUpdateFollowersOrFollowing = Partial<{ addFollowers?:string[]; removeFollowers?:string[]; addFollowing?:string[]; removeFollowing?:string[];}>;