import { OrganizationType } from './organizationType'; import { RoleType } from './role'; import { IMemberType, IRole } from './role/organizationRole'; import { SortType } from './sortType'; export type IMemberRole = Pick; export interface IMemberOfAsProject { typeOf: OrganizationType.Project; id: string; } export interface IMemberOfAsSeller { typeOf: OrganizationType.Corporation; id: string; } export type IMemberOf = IMemberOfAsProject | IMemberOfAsSeller; /** * ロール割り当て対象のアイデンティティ */ export interface IMemberOfRole { typeOf: IMemberType; /** * クライアントID or Person ID */ id: string; /** * アプリケーションコード */ identifier?: string; image?: string; name?: string; username?: string; hasRole: IMemberRole[]; /** * プロジェクトメンバー or 販売者メンバー */ memberOf: IMemberOf; } /** * プロジェクトメンバーロール or 販売者メンバーロール * membersに保管 */ export interface IMember { typeOf: RoleType; project: { typeOf: OrganizationType.Project; id: string; }; member: IMemberOfRole; } /** * プロジェクトメンバー検索条件 */ export interface ISearchConditions { limit?: number; page?: number; sort?: { 'member.id'?: SortType; }; id?: { $eq?: string; }; project?: { id?: { $eq?: string; $in?: string[]; }; }; member?: { hasRole?: { roleName?: { $eq?: string; $in?: string[]; }; }; id?: { $eq?: string; $in?: string[]; }; /** * アプリケーションコード */ identifier?: { $eq?: string; }; name?: { $regex?: string; }; typeOf?: { $eq?: string; }; memberOf?: { id?: { $eq?: string; }; typeOf?: { $eq?: OrganizationType.Corporation | OrganizationType.Project; }; }; }; }