import type { IActor } from "./actor.model"; import { Actor } from "./actor.model"; import type { Paginate } from "../paginate"; import type { IResource } from "../resource"; import type { IEvent } from "../event.model"; import type { IDiscussion } from "../discussions"; import type { IPost } from "../post.model"; import type { IAddress } from "../address.model"; import { Address } from "../address.model"; import { ActorType, Openness } from "../enums"; import type { IMember } from "./member.model"; import type { ITodoList } from "../todolist"; export interface IGroup extends IActor { members: Paginate; resources: Paginate; todoLists: Paginate; discussions: Paginate; organizedEvents: Paginate; physicalAddress: IAddress; openness: Openness; } export class Group extends Actor implements IGroup { members: Paginate = { elements: [], total: 0 }; resources: Paginate = { elements: [], total: 0 }; todoLists: Paginate = { elements: [], total: 0 }; discussions: Paginate = { elements: [], total: 0 }; organizedEvents: Paginate = { elements: [], total: 0 }; posts: Paginate = { elements: [], total: 0 }; constructor(hash: IGroup | Record = {}) { super(hash); this.type = ActorType.GROUP; this.patch(hash); } openness: Openness = Openness.INVITE_ONLY; physicalAddress: IAddress = new Address(); patch(hash: IGroup | Record): void { Object.assign(this, hash); } }