import { IGroupStore, IStoreGroup } from '../types/stores/group-store';
import { Knex } from 'knex';
import Group, { IGroup, IGroupModel, IGroupProject, IGroupRole, IGroupUser, IGroupUserModel } from '../types/group';
import Transaction = Knex.Transaction;
export default class GroupStore implements IGroupStore {
    private db;
    constructor(db: Knex);
    getAllWithId(ids: number[]): Promise<Group[]>;
    update(group: IGroupModel): Promise<IGroup>;
    getProjectGroupRoles(projectId: string): Promise<IGroupRole[]>;
    getGroupProjects(groupIds: number[]): Promise<IGroupProject[]>;
    getAllUsersByGroups(groupIds: number[]): Promise<IGroupUser[]>;
    getAll(): Promise<Group[]>;
    delete(id: number): Promise<void>;
    deleteAll(): Promise<void>;
    destroy(): void;
    exists(id: number): Promise<boolean>;
    existsWithName(name: string): Promise<boolean>;
    get(id: number): Promise<Group>;
    create(group: IStoreGroup): Promise<Group>;
    count(): Promise<number>;
    addUsersToGroup(groupId: number, users: IGroupUserModel[], userName: string, transaction?: Transaction): Promise<void>;
    deleteUsersFromGroup(deletableUsers: IGroupUser[], transaction?: Transaction): Promise<void>;
    updateGroupUsers(groupId: number, newUsers: IGroupUserModel[], existingUsers: IGroupUserModel[], deletableUsers: IGroupUser[], userName: string): Promise<void>;
    getNewGroupsForExternalUser(userId: number, externalGroups: string[]): Promise<IGroup[]>;
    addUserToGroups(userId: number, groupIds: number[], createdBy?: string): Promise<void>;
    getOldGroupsForExternalUser(userId: number, externalGroups: string[]): Promise<IGroupUser[]>;
    getGroupsForUser(userId: number): Promise<Group[]>;
}
