import { BaseModel } from '#database/base_model' import { Configuration } from '../domain/configuration/configuration.js' import { Filter, Sort } from 'mongodb' export default class ConfigurationModel extends BaseModel { static collectionName = 'configurations' static async findByIdentifier(identifier: string): Promise { return this.findOne({ identifier }) as Promise } static async findAllEnabled(sort: Sort = { priority: -1 }): Promise { const collection = this.getCollection() return collection.find({ enabled: true }).sort(sort).toArray() as unknown as Promise } static async paginateConfigurations( page: number, perPage: number, filter: Filter = {}, sort: Sort = { priority: -1 } ): Promise<{ data: Configuration[]; total: number; page: number; perPage: number; lastPage: number }> { return this.paginate(page, perPage, filter, sort) } static async createIfNotExists(data: Partial): Promise { const existing = await this.findOne({ identifier: data.identifier }) if (existing) { throw new Error(`Configuration with identifier '${data.identifier}' already exists`) } return this.create(data) as Promise } static async distinctTags(): Promise { const collection = this.getCollection() const tags = await collection.distinct('tags') return (tags as string[]).filter(Boolean).sort() } static async deleteByIdentifier(identifier: string): Promise { return this.deleteOne({ identifier }) } }