2020-11-27 19:27:44 +01:00
|
|
|
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";
|
2021-06-15 17:25:33 +02:00
|
|
|
import { ActorType, GroupVisibility, Openness } from "../enums";
|
2020-11-27 19:27:44 +01:00
|
|
|
import type { IMember } from "./member.model";
|
|
|
|
import type { ITodoList } from "../todolist";
|
2021-02-24 19:06:48 +01:00
|
|
|
import { IActivity } from "../activity.model";
|
2019-04-26 15:22:16 +02:00
|
|
|
|
2020-11-06 11:34:32 +01:00
|
|
|
export interface IGroup extends IActor {
|
|
|
|
members: Paginate<IMember>;
|
|
|
|
resources: Paginate<IResource>;
|
|
|
|
todoLists: Paginate<ITodoList>;
|
|
|
|
discussions: Paginate<IDiscussion>;
|
|
|
|
organizedEvents: Paginate<IEvent>;
|
2021-07-21 12:02:14 +02:00
|
|
|
posts: Paginate<IPost>;
|
2020-11-06 11:34:32 +01:00
|
|
|
physicalAddress: IAddress;
|
|
|
|
openness: Openness;
|
2021-06-15 17:25:33 +02:00
|
|
|
visibility: GroupVisibility;
|
2021-01-20 18:16:44 +01:00
|
|
|
manuallyApprovesFollowers: boolean;
|
2021-02-24 19:06:48 +01:00
|
|
|
activity: Paginate<IActivity>;
|
2020-11-06 11:34:32 +01:00
|
|
|
}
|
|
|
|
|
2019-04-26 15:22:16 +02:00
|
|
|
export class Group extends Actor implements IGroup {
|
2020-02-18 08:57:00 +01:00
|
|
|
members: Paginate<IMember> = { elements: [], total: 0 };
|
|
|
|
|
|
|
|
resources: Paginate<IResource> = { elements: [], total: 0 };
|
|
|
|
|
|
|
|
todoLists: Paginate<ITodoList> = { elements: [], total: 0 };
|
|
|
|
|
2020-07-09 17:24:28 +02:00
|
|
|
discussions: Paginate<IDiscussion> = { elements: [], total: 0 };
|
2020-02-18 08:57:00 +01:00
|
|
|
|
2020-07-09 17:24:28 +02:00
|
|
|
organizedEvents: Paginate<IEvent> = { elements: [], total: 0 };
|
|
|
|
|
|
|
|
posts: Paginate<IPost> = { elements: [], total: 0 };
|
2019-09-02 10:50:00 +02:00
|
|
|
|
2020-11-06 11:34:32 +01:00
|
|
|
constructor(hash: IGroup | Record<string, unknown> = {}) {
|
2019-09-02 10:50:00 +02:00
|
|
|
super(hash);
|
2020-02-18 08:57:00 +01:00
|
|
|
this.type = ActorType.GROUP;
|
2019-09-02 10:50:00 +02:00
|
|
|
|
|
|
|
this.patch(hash);
|
|
|
|
}
|
2021-06-15 17:25:33 +02:00
|
|
|
visibility: GroupVisibility = GroupVisibility.PUBLIC;
|
2021-02-24 19:06:48 +01:00
|
|
|
activity: Paginate<IActivity> = { elements: [], total: 0 };
|
2020-08-31 12:40:30 +02:00
|
|
|
|
2020-11-06 11:34:32 +01:00
|
|
|
openness: Openness = Openness.INVITE_ONLY;
|
|
|
|
|
2020-08-05 16:44:08 +02:00
|
|
|
physicalAddress: IAddress = new Address();
|
2019-09-02 10:50:00 +02:00
|
|
|
|
2021-01-20 18:16:44 +01:00
|
|
|
manuallyApprovesFollowers = true;
|
|
|
|
|
2020-11-06 11:34:32 +01:00
|
|
|
patch(hash: IGroup | Record<string, unknown>): void {
|
2019-09-02 10:50:00 +02:00
|
|
|
Object.assign(this, hash);
|
|
|
|
}
|
2019-04-26 15:22:16 +02:00
|
|
|
}
|