Помогите профильтровать значения в бд

Всем привет. У меня есть сервер на nest(orm - sequelize). Я хочу сделать путь с необязательными query параметрами. У меня есть две таблицы tasks и themes. У одного задания может быть только одна тема, а у одной темы - много заданий. И, я хочу сделать эндпоинт типа: .../tasks?theme_title=IT, но чтобы параметр theme_title был необязательным. Т.е., если я его задаю - возвращаются задания с конкретной темой, если нет - то все задания. И, собственно, есть две проблемы. 1 - я не знаю, как сделать параметр для фильтрации в свойстве where необязательным. Т.е., если theme_title = undefined, запрос не фильтровался бы по полю theme. 2 - я не знаю, как лучше сделать само получение заданий для конкретной темы, потому что я вижу 2 варианта: находить конкретную тему по ее названию и потом брать у нее эти задания(по типу theme.tasks; этот вариант мне не очень нравится) или же каким-то образом фильтровать сами задания(по типу where: {theme: {title: theme_title}}). Но здесь у меня возникает ошибка "Некорректное значение theme". Вот мои модели. Надеюсь, я объяснил все более менее понятно)

Задачи:

@Table({tableName: 'tasks'})
export class Task extends Model<Task, TaskCreationAttrs> {

    @ApiProperty({example: 1})
    @Column({type: DataType.INTEGER, unique: true, autoIncrement: true, primaryKey: true})
    id: number;

    @ApiProperty({example: 'Задачка про яблоки'})
    @Column({type: DataType.STRING, allowNull: false})
    title: string;

    @ApiProperty({example: 'Текст задачки про яблоки'})
    @Column({type: DataType.STRING, defaultValue: false})
    text: string;

    @ForeignKey(() => User)
    @Column({type: DataType.INTEGER, allowNull: false})
    user_id: number;

    @BelongsTo(() => User)
    author: () => User;

    @ApiProperty({example: [Solution]})
    @HasMany(() => Solution)
    solutions: Solution[];

    @ForeignKey(() => Theme)
    @Column({type: DataType.INTEGER, allowNull: false})
    theme_id: number;

    @BelongsTo(() => Theme)
    theme: Theme;

    // @ApiProperty({example: Image[]})
    // @HasMany(() => Image)
    // images: Image[];
}

Темы:

@Table({tableName: 'themes'})
export class Theme extends Model<Theme, ThemeCreationAttrs> {
    @ApiProperty({example: 1})
    @Column({type: DataType.INTEGER, unique: true, autoIncrement: true, primaryKey: true})
    id: number;

    @ApiProperty({example: 'it'})
    @Column({type: DataType.STRING, unique: true, allowNull: false})
    title: string;

    @HasMany(() => Task)
    tasks: Task[];
}

Ответы (1 шт):

Автор решения: ДимаЭф

В общем, у меня более менее получилось сделать запрос, который выдает нужный мне результат.

async getAllTasks(query: FilterGetAllDto) {
    const themeWhere = {};
    if (query.theme) {
        themeWhere['title'] = query.theme;
    }

    const tasks = await this.tasksRepository
        .findAll({
            include: [
                {
                    model: User,
                    attributes: ['id', 'sn_uid', 'user_name'],
                },
                {
                    model: Theme,
                    where: themeWhere,
                    attributes: ['id', 'title'],
                },
                {
                    model: Tag,
                    attributes: ['id', 'title'],
                },
                {
                    model: Solution,
                    attributes: ['id', 'text'],
                },
            ],
        });
    return tasks;
}
→ Ссылка