
interface RoleInterface {
    id?: number;
    code: string;
    userId: number | null;
    lastUpdatedBy?: number | null
    accountId: number | null;
    isRevision: boolean;
    revisionId: number | null;
    isDefault: boolean;
    status: number;
    sortOrder?: number;
    roleContents?: RoleContentInterface[]
    permissions?: PermissionInterface[];
}

interface RoleContentInterface {
    id?: number;
    roleId?: number;
    languageId: number;
    name: string;
    description?: Text | null;
    descriptionText?: Text | null;
}

interface RoleObjectInteface {
    id: number;
    code: string;
    name: string;
    description?: Text | null;
    descriptionText?: Text | null;
    permissions?: PermissionInterface[];
    author: UserPublicObjectInterface | null;
    lastUpdatedBy: UserPublicObjectInterface | null,
    createdAt: Date,
    updatedAt: Date
}

interface RoleRequestObject {
    name: string;
    description?: Text | null;
    descriptionText?: Text | null;
    permissionIds: number[] | null;
    status: number | null

}

interface RoleObject {
    code?: string;
    isDefault?: boolean;
    status: number | null;

}

interface RoleContentObject {
    id?: number;
    roleId?: number;
    languageId?: number;
    name: string;
    description?: Text | null;
    descriptionText?: Text | null;

}

interface RoleDataObject {
    id?: number;
    code?: string;
    userId: number | null;
    accountId: number | null;
    lastUpdatedBy?: number | null;
    roleContents?: RoleContentObject[];
    roleContent?: RoleContentObject,
    permissions?: PermissionInterface[];
}

interface RolePaginatedList {
    page: number;
    perPage: number;
    totalRecords: number;
    totalPages?: number;
    data: CategoryTypeObjectSummaryInteface[] | [];
}

interface RolePaginatedData {
    count: number;
    rows: RoleObjectSummaryInteface[]
}

interface RoleIdentifierObject {
    id: number;
}

interface RoleStringIdentifierObject {
    code: string;
}

interface RoleListRequestObject {
    page: number;
    perPage: number;
    searchText: string | null;
    sortBy: string;
    sortDirection: string;
    status: number | null;
}

interface RoleListAllRequestObject {
    searchText: string | null;
    sortBy: string;
    sortDirection: string;
    status: number | null;
}

interface RolePermissions {
    id: number;
    code: string;
    name: string;
}

interface RoleSortRequest {
    before: number | null;
    after: number | null;
}

interface RoleStatusObject {
    status: number;
}

interface DaoOptions {
    transaction?: import("sequelize").Transaction;
}

interface RoleCreateServiceInput {
    name: string;
    description?: Text | null;
    permissionIds: number[] | null;
    status: number | null;
}

interface RoleUpdateServiceInput {
    id: number;
    name: string;
    description?: Text | null;
    permissionIds: number[] | null;
    status: number | null;
}

interface RoleDeleteServiceInput {
    id: number;
}

interface RoleGetByIdServiceInput {
    id: number;
    expanded?: boolean;
    paranoid?: boolean;
}

interface RoleGetByCodeServiceInput {
    code: string;
    expanded?: boolean;
    paranoid?: boolean;
}

interface RoleListRolesServiceInput {
    listRequest: RoleListRequestObject;
}

interface RoleListAllRolesServiceInput {
    listRequest: RoleListAllRequestObject;
}

interface RoleListRoleRevisionsServiceInput {
    id: number;
    listRequest: RoleListRequestObject;
}

interface RoleRestoreRevisionServiceInput {
    id: number;
}

interface RoleSetSortOrderServiceInput {
    id: number;
    before: number | null;
    after: number | null;
}

interface RoleUpdateStatusServiceInput {
    id: number;
    status: number;
}

interface RoleGetDaoInput {
    id?: number | null;
    code?: string | null;
    expanded?: boolean;
    paranoid?: boolean;
}

interface RoleGetByIdDaoInput {
    id: number;
    expanded?: boolean;
    paranoid?: boolean;
}

interface RoleGetByCodeDaoInput {
    code: string;
    expanded?: boolean;
    paranoid?: boolean;
}

interface RoleDoExistsByCodeDaoInput {
    code: string;
    excludeId?: number | null;
    includeRevision?: boolean;
}

interface RoleDoExistsByIdDaoInput {
    id: number;
    includeRevision?: boolean;
}

interface RoleCreateDaoInput {
    roleObj: RoleObject;
    roleContentObj: RoleContentObject;
    permissionIds: number[] | null;
    languages: LanguageInfo;
}

interface RoleUpdateDaoInput {
    id: number;
    roleObj: RoleObject;
    roleContentObj: RoleContentObject;
    permissionIds: number[] | null;
    languages: LanguageInfo;
}

interface RoleDeleteDaoInput {
    id: number;
}

interface RoleSetSortOrderDaoInput {
    id: number;
    before?: number | null;
    after?: number | null;
}

interface RoleGetRoleListDaoInput {
    listRequest: RoleListRequestObject;
}

interface RoleGetAllRolesDaoInput {
    listRequest: RoleListAllRequestObject;
}

interface RoleGetRoleRevisionListDaoInput {
    id: number;
    listRequest: RoleListRequestObject;
}

interface RoleRestoreRevisionDaoInput {
    id: number;
}

interface RoleUpdateStatusDaoInput {
    id: number;
    status: number;
}
