Files
zhuomi-hui/miniprogram/utils/api.js
T
Michelle ZanandCursor 0ca2e87bf2 Ship signup sheet, subscribe reminders, cover crop, and theme updates.
Wire real WeChat app config, prefer activity cover over posters, and add admin cover cropping for the home banner.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-08 13:06:43 +08:00

44 lines
1.6 KiB
JavaScript

const requestUtil = require('./request')
const authUtil = require('./auth')
// Runs a logged-in call; if the stored token has expired, logs in again and retries once.
function withLogin(run) {
return authUtil
.ensureLogin()
.then(run)
.catch((error) => {
if (error.statusCode !== 401) throw error
return authUtil.ensureLogin().then(run)
})
}
function authed(url, method, data) {
return withLogin(() =>
requestUtil.request({ url: url, method: method || 'GET', data: data, auth: true })
)
}
function uploadTo(url, filePath) {
return withLogin(() => requestUtil.upload({ url: url, filePath: filePath }))
}
module.exports = {
currentActivity: () => requestUtil.request({ url: '/api/activity/current' }),
pastActivities: () => requestUtil.request({ url: '/api/activity/past' }),
activity: (id) => requestUtil.request({ url: '/api/activity/' + id }),
profile: () => authed('/api/user/profile'),
saveProfile: (data) => authed('/api/user/profile', 'POST', data),
uploadAvatar: (filePath) => uploadTo('/api/user/avatar', filePath),
createPast: (data) => authed('/api/activity/past', 'POST', data),
pinPast: (id, pinned) => authed('/api/activity/past/' + id + '/pin', 'POST', { pinned: pinned }),
removePast: (id) => authed('/api/activity/past/' + id, 'DELETE'),
uploadMedia: (filePath) => uploadTo('/api/upload', filePath),
signup: (data) => authed('/api/signup', 'POST', data),
mySignups: () => authed('/api/signup/mine'),
checkin: (data) => authed('/api/checkin/scan', 'POST', data),
subscribeConfig: () => requestUtil.request({ url: '/api/subscribe/config' })
}