import { Schema } from "mongoose"; import { EnumMap,IJson,IDocument,IObject,IInstance,IModel,IAction,IActionTypes,ISettings,MiscInfo } from "@onebro/oba-common"; export enum SwiftTradersUserProfileStatuses { N = "New", S = "Saved", Y = "Sent", Z = "Seen/Read", A = "Accepted", D = "Declined", R = "Revised", E = "Expired", C = "Cancelled",} export type SwiftTradersUserProfileStatus = keyof typeof SwiftTradersUserProfileStatuses; export enum SwiftTradersRoles { G = "GUEST", U = "USER", A = "ADMIN", S = "SUPER", SA = "SYSADMIN"} export type SwiftTradersRole = keyof typeof SwiftTradersRoles; export type SwiftTradersExperienceLevel = "novice"|"beginner"|"intermediate"|"advanced"|"expert"; export type SwiftTradersUserProfileConfig = { username:string; role:SwiftTradersRole; settings:ISettings<"location"|"cookies">; img?:string;}; export type SwiftTradersUserProfileType = IObject & SwiftTradersUserProfileConfig & { bio:string; motto:string; socials?:MiscInfo; stats?:MiscInfo; expYrs?:number; expLvl?:SwiftTradersExperienceLevel; rating?:number; followers?:SwiftTradersUserProfile[]; following?:SwiftTradersUserProfile[];}; export interface SwiftTradersUserProfileDocument extends IDocument,SwiftTradersUserProfileType {lang:string;} export interface SwiftTradersUserProfile extends IInstance,SwiftTradersUserProfileDocument { following:SwiftTradersUserProfile[]; followers:SwiftTradersUserProfile[]; preview():SwiftTradersUserProfilePreview; follow(o:any):Promise; unfollow(o:any):Promise; rate(o:any):Promise; invite(o:any):Promise; respond(o:any):Promise;} export interface SwiftTradersUserProfileModel extends IModel {} export type SwiftTradersUSerProfilePublicKeys = "username"|"bio"|"motto"|"expYrs"|"expLvl"|"rating"|"settings"|"img"|"socials"|"lang"; export type SwiftTradersUSerProfilePublicData = Pick; export type SwiftTradersUserProfilePreview = Pick & {role:SwiftTradersRoles;}; export type SwiftTradersUserProfileJson = IJson & SwiftTradersUSerProfilePublicData & { role:SwiftTradersRoles; memberSince:Date; followers:SwiftTradersUserProfilePreview[]; following:SwiftTradersUserProfilePreview[];}; export type SwiftTradersUserProfileModelMap = {SwiftTradersUserProfile:SwiftTradersUserProfileModel;}; export type SwiftTradersUserProfileInstanceMap = {profile:SwiftTradersUserProfile;}; export type SwiftTradersUserProfileSchemaMap = {profile:Schema;}; export type SwiftTradersUserProfileActionTypes = IActionTypes|"fetchByUsername$"; export type SwiftTradersUserProfileActions = EnumMap; export type SwiftTradersUserProfileUpdateFollowersOrFollowing = Partial<{ addFollowers?:string[]; removeFollowers?:string[]; addFollowing?:string[]; removeFollowing?:string[];}>;