interface CategoryTypeInterface {
    id?: number;
    code: string;
    userId: number;
    lastUpdatedBy?: number;
    isRevision?: Boolean;
    revisionId?: number;
    status: number;
    sortOrder?: number;
    categoryTypeContent?: CategoryTypeContentInterface,
    categoryTypeContents?: CategoryTypeContentInterface[];
}

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

interface CategoryTypeRequestObject {
    name: string;
    description?: Text | null;
    status: number | null;
}

interface CategoryTypeObject {
    code: string;
    status: number | null;
}

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

interface CategoryTypeObjectInteface {
    id: number;
    code: string;
    status: number;
    name: string;
    description?: Text | null;
    descriptionText?: Text | null;
    author: UserPublicObjectInterface | null,
    lastUpdatedBy: UserPublicObjectInterface | null,
    createdAt: Date,
    updatedAt: Date
}

interface CategoryTypeObjectSummaryInteface {
    id: number;
    code: string;
    status: number;
    name: string;
    description?: Text | null;
    descriptionText?: Text | null;
    createdAt: Date,
    updatedAt: Date
}

interface CategoryTypeDataObject {
    id?: number;
    code: string;
    userId: number | null;
    lastUpdatedBy?: number;
    categoryTypeContents?: CategoryTypeContentObject[];
    categoryTypeContent?: CategoryTypeContentObject
}

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

interface CategoryTypePaginatedData {
    count: number;
    rows: CategoryTypeObjectSummaryInteface[]
}

interface CategoryTypeIdentifierObject {
    id: number;
}

interface CategoryTypeStringIdentifierObject {
    code: string;
}

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

interface CategoryTypeListAllRequestObject {
    searchText: string | null;
    sortBy: string;
    sortDirection: string;
}

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

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

interface CategoryTypeCreateServiceInput {
    name: string;
    description?: Text | null;
    status: number | null;
}

interface CategoryTypeUpdateServiceInput {
    id: number;
    name: string;
    description?: Text | null;
    status: number | null;
}

interface CategoryTypeDeleteServiceInput {
    id: number;
}

interface CategoryTypeGetByIdServiceInput {
    id: number;
    expanded?: boolean;
}

interface CategoryTypeGetByCodeServiceInput {
    code: string;
    expanded?: boolean;
}

interface CategoryTypeGetCategoryTypesServiceInput {
    listRequest: CategoryTypeListRequestObject;
}

interface CategoryTypeGetAllCategoryTypesServiceInput {
    listRequest: CategoryTypeListAllRequestObject;
}

interface CategoryTypeGetRevisionsServiceInput {
    id: number;
    listRequest: CategoryTypeListRequestObject;
    language?: string | null;
}

interface CategoryTypeRestoreRevisionServiceInput {
    id: number;
}

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

interface CategoryTypeGetIdServiceInput {
    code: string;
}

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

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

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

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

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

interface CategoryTypeCreateDaoInput {
    categoryTypeObj: CategoryTypeObject;
    categoryTypeContentObj: CategoryTypeContentObject;
    languages: LanguageInfo;
}

interface CategoryTypeUpdateDaoInput {
    id: number;
    categoryTypeObj: CategoryTypeObject;
    categoryTypeContentObj: CategoryTypeContentObject;
    languages: LanguageInfo;
}

interface CategoryTypeDeleteDaoInput {
    id: number;
}

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

interface CategoryTypeGetListDaoInput {
    listRequest: CategoryTypeListRequestObject;
}

interface CategoryTypeGetAllListDaoInput {
    listRequest: CategoryTypeListAllRequestObject;
}

interface CategoryTypeGetRevisionListDaoInput {
    id: number;
    listRequest: CategoryTypeListRequestObject;
    language?: string | null;
}

interface CategoryTypeRestoreRevisionDaoInput {
    id: number;
}

interface CategoryTypeGetIdFromCodeDaoInput {
    code: string;
}

interface CategoryTypeGetFullObjectDaoInput {
    id: number;
}

interface CategoryTypeStoreRevisionDaoInput {
    id: number;
}
