Files
danyang-match/miniapp/services/serviceStationService.js
T

53 lines
1.8 KiB
JavaScript
Raw Normal View History

/**
* 善缘服务站(U50)服务层。
*
* Phase 19:U50 的内容清单包含「临时公告 / 开放时间 / 服务项目 / 预约到站」,
* 但公告此前**全仓没有任何存储与接口**,页面也无落点。本轮补齐后端
* (V042 + 运营端五个端点 + 用户端只读端点)后由此接入。
*
* 分层:按 services/index.js 的约定,页面不直接 require utils/api,
* 统一从本模块取数据(本站点主体信息来自首页聚合,公告来自服务站公告端点)。
*
* 契约:
* GET /home → 当前服务站主体信息
* GET /service-locations/{id}/announcements → 仅 status=published 且未过期
* 草稿/归档/过期由服务端过滤,前端不得再做"猜测式"过滤,
* 否则等于把未定稿内容拿到客户端。
*/
const api = require('../utils/api');
/**
* 当前展示的服务站(首页聚合给出的唯一站点)。
* @returns {Promise<object|null>}
*/
async function getStation() {
const home = await api.get('/home');
return (home && home.serviceLocation) || null;
}
/**
* 某服务站的可见临时公告。
*
* 公告属**增强信息**:请求失败时返回空数组而不抛出,
* 避免"公告接口挂了导致整个服务站详情页变成错误页"。
* @param {string} locationId
* @returns {Promise<Array<{id: string, title: string, content?: string}>>}
*/
async function getVisibleAnnouncements(locationId) {
if (!locationId) {
return [];
}
try {
const list = await api.get(`/service-locations/${encodeURIComponent(locationId)}/announcements`);
return Array.isArray(list) ? list : [];
} catch (err) {
console.warn('加载服务站公告失败', err);
return [];
}
}
module.exports = {
getStation,
getVisibleAnnouncements,
};