Files
kashilo/js/services/listings.js

61 lines
1.7 KiB
JavaScript

/**
* Listings Service - Higher-level API for listing operations
* Wraps directus.js with business logic and convenience methods
*/
import { directus } from './directus.js'
class ListingsService {
async getListingsWithFilters(filters = {}) {
const directusFilter = { status: { _eq: 'published' } }
if (filters.category) {
directusFilter.category = { slug: { _eq: filters.category } }
}
if (filters.location) {
directusFilter.location = { _eq: filters.location }
}
if (filters.minPrice != null) {
directusFilter.price = directusFilter.price || {}
directusFilter.price._gte = filters.minPrice
}
if (filters.maxPrice != null) {
directusFilter.price = directusFilter.price || {}
directusFilter.price._lte = filters.maxPrice
}
if (filters.condition) {
directusFilter.condition = { _eq: filters.condition }
}
if (filters.shipping === true) {
directusFilter.shipping = { _eq: true }
}
if (filters.priceType) {
directusFilter.price_type = { _eq: filters.priceType }
}
const sortMap = {
'newest': ['-date_created'],
'oldest': ['date_created'],
'price_asc': ['price'],
'price_desc': ['-price'],
'views': ['-views']
}
return directus.getListings({
filter: directusFilter,
sort: sortMap[filters.sort] || ['-date_created'],
limit: filters.limit || 20,
page: filters.page || 1,
search: filters.search
})
}
}
export const listingsService = new ListingsService()