import { Schema } from "mongoose"; import { EnumMap,IJson,IDocument,IObject,IInstance,IModel,IAction,IActionTypes,ISettings,MiscInfo } from "@onebro/oba-common"; export enum FirstlineUserProfileStatuses { N = "New", S = "Saved", Y = "Sent", Z = "Seen/Read", A = "Accepted", D = "Declined", R = "Revised", E = "Expired", C = "Cancelled",} export type FirstlineUserProfileStatus = keyof typeof FirstlineUserProfileStatuses; export enum FirstlineRoles { G = "GUEST", U = "USER", A = "ADMIN", S = "SUPER", SA = "SYSADMIN"} export type FirstlineRole = keyof typeof FirstlineRoles; export type FirstlineExperienceLevel = "novice"|"beginner"|"intermediate"|"advanced"|"expert"; export type FirstlineUserProfileConfig = { username:string; role:FirstlineRole; settings:ISettings<"location"|"cookies">; img?:string;}; export type FirstlineUserProfileType = IObject & FirstlineUserProfileConfig & { bio:string; motto:string; socials?:MiscInfo; stats?:MiscInfo; expYrs?:number; expLvl?:FirstlineExperienceLevel; rating?:number; followers?:FirstlineUserProfile[]; following?:FirstlineUserProfile[];}; export interface FirstlineUserProfileDocument extends IDocument,FirstlineUserProfileType {lang:string;} export interface FirstlineUserProfile extends IInstance,FirstlineUserProfileDocument { following:FirstlineUserProfile[]; followers:FirstlineUserProfile[]; preview():FirstlineUserProfilePreview; follow(o:any):Promise; unfollow(o:any):Promise; rate(o:any):Promise; invite(o:any):Promise; respond(o:any):Promise;} export interface FirstlineUserProfileModel extends IModel {} export type FirstlineUSerProfilePublicKeys = "username"|"bio"|"motto"|"expYrs"|"expLvl"|"rating"|"settings"|"img"|"socials"|"lang"; export type FirstlineUSerProfilePublicData = Pick; export type FirstlineUserProfilePreview = Pick & {role:FirstlineRoles;}; export type FirstlineUserProfileJson = IJson & FirstlineUSerProfilePublicData & { role:FirstlineRoles; memberSince:Date; followers:FirstlineUserProfilePreview[]; following:FirstlineUserProfilePreview[];}; export type FirstlineUserProfileModelMap = {FirstlineUserProfile:FirstlineUserProfileModel;}; export type FirstlineUserProfileInstanceMap = {profile:FirstlineUserProfile;}; export type FirstlineUserProfileSchemaMap = {profile:Schema;}; export type FirstlineUserProfileActionTypes = IActionTypes|"fetchByUsername$"; export type FirstlineUserProfileActions = EnumMap; export type FirstlineUserProfileUpdateFollowersOrFollowing = Partial<{ addFollowers?:string[]; removeFollowers?:string[]; addFollowing?:string[]; removeFollowing?:string[];}>;