295 lines
7.1 KiB
JavaScript
295 lines
7.1 KiB
JavaScript
const cloud = require("wx-server-sdk");
|
||
cloud.init({
|
||
env: cloud.DYNAMIC_CURRENT_ENV,
|
||
});
|
||
|
||
const db = cloud.database();
|
||
|
||
const DEFAULT_PHOTO_BOOK_HOME = {
|
||
photographerName: "陪你拍阿柚",
|
||
photographerTagline: "温柔日系私房写真 · 闺蜜情侣生日跟拍",
|
||
heroImage:
|
||
"https://images.unsplash.com/photo-1524504388940-b1c1722653e1?auto=format&fit=crop&w=1200&q=80",
|
||
tags: ["情侣", "闺蜜", "生日", "汉服"],
|
||
works: [
|
||
{
|
||
id: "w1",
|
||
cover:
|
||
"https://images.unsplash.com/photo-1521572267360-ee0c2909d518?auto=format&fit=crop&w=900&q=80",
|
||
},
|
||
{
|
||
id: "w2",
|
||
cover:
|
||
"https://images.unsplash.com/photo-1524863479829-916d8e77f114?auto=format&fit=crop&w=900&q=80",
|
||
},
|
||
{
|
||
id: "w3",
|
||
cover:
|
||
"https://images.unsplash.com/photo-1464863979621-258859e62245?auto=format&fit=crop&w=900&q=80",
|
||
},
|
||
],
|
||
packages: [
|
||
{
|
||
id: "p1",
|
||
badge: "🔥 热门",
|
||
title: "2小时轻陪拍",
|
||
desc: "含台词一次拍摄片 + 情侣合影",
|
||
price: 399,
|
||
},
|
||
{
|
||
id: "p2",
|
||
badge: "",
|
||
title: "3小时沉浸拍摄",
|
||
desc: "更自由更出片",
|
||
price: 699,
|
||
},
|
||
],
|
||
ctaText: "去预约一次拍照",
|
||
};
|
||
|
||
const safeGetCollection = async (name, query = {}) => {
|
||
try {
|
||
return await db.collection(name).where(query).get();
|
||
} catch (e) {
|
||
return { data: [] };
|
||
}
|
||
};
|
||
// 获取openid
|
||
const getOpenId = async () => {
|
||
// 获取基础信息
|
||
const wxContext = cloud.getWXContext();
|
||
return {
|
||
openid: wxContext.OPENID,
|
||
appid: wxContext.APPID,
|
||
unionid: wxContext.UNIONID,
|
||
};
|
||
};
|
||
|
||
// 获取小程序二维码
|
||
const getMiniProgramCode = async () => {
|
||
// 获取小程序二维码的buffer
|
||
const resp = await cloud.openapi.wxacode.get({
|
||
path: "pages/index/index",
|
||
});
|
||
const { buffer } = resp;
|
||
// 将图片上传云存储空间
|
||
const upload = await cloud.uploadFile({
|
||
cloudPath: "code.png",
|
||
fileContent: buffer,
|
||
});
|
||
return upload.fileID;
|
||
};
|
||
|
||
// 创建集合
|
||
const createCollection = async () => {
|
||
try {
|
||
// 创建集合
|
||
await db.createCollection("sales");
|
||
await db.collection("sales").add({
|
||
// data 字段表示需新增的 JSON 数据
|
||
data: {
|
||
region: "华东",
|
||
city: "上海",
|
||
sales: 11,
|
||
},
|
||
});
|
||
await db.collection("sales").add({
|
||
// data 字段表示需新增的 JSON 数据
|
||
data: {
|
||
region: "华东",
|
||
city: "南京",
|
||
sales: 11,
|
||
},
|
||
});
|
||
await db.collection("sales").add({
|
||
// data 字段表示需新增的 JSON 数据
|
||
data: {
|
||
region: "华南",
|
||
city: "广州",
|
||
sales: 22,
|
||
},
|
||
});
|
||
await db.collection("sales").add({
|
||
// data 字段表示需新增的 JSON 数据
|
||
data: {
|
||
region: "华南",
|
||
city: "深圳",
|
||
sales: 22,
|
||
},
|
||
});
|
||
return {
|
||
success: true,
|
||
};
|
||
} catch (e) {
|
||
// 这里catch到的是该collection已经存在,从业务逻辑上来说是运行成功的,所以catch返回success给前端,避免工具在前端抛出异常
|
||
return {
|
||
success: true,
|
||
data: "create collection success",
|
||
};
|
||
}
|
||
};
|
||
|
||
// 查询数据
|
||
const selectRecord = async () => {
|
||
// 返回数据库查询结果
|
||
return await db.collection("sales").get();
|
||
};
|
||
|
||
// 更新数据
|
||
const updateRecord = async (event) => {
|
||
try {
|
||
// 遍历修改数据库信息
|
||
for (let i = 0; i < event.data.length; i++) {
|
||
await db
|
||
.collection("sales")
|
||
.where({
|
||
_id: event.data[i]._id,
|
||
})
|
||
.update({
|
||
data: {
|
||
sales: event.data[i].sales,
|
||
},
|
||
});
|
||
}
|
||
return {
|
||
success: true,
|
||
data: event.data,
|
||
};
|
||
} catch (e) {
|
||
return {
|
||
success: false,
|
||
errMsg: e,
|
||
};
|
||
}
|
||
};
|
||
|
||
// 新增数据
|
||
const insertRecord = async (event) => {
|
||
try {
|
||
const insertRecord = event.data;
|
||
// 插入数据
|
||
await db.collection("sales").add({
|
||
data: {
|
||
region: insertRecord.region,
|
||
city: insertRecord.city,
|
||
sales: Number(insertRecord.sales),
|
||
},
|
||
});
|
||
return {
|
||
success: true,
|
||
data: event.data,
|
||
};
|
||
} catch (e) {
|
||
return {
|
||
success: false,
|
||
errMsg: e,
|
||
};
|
||
}
|
||
};
|
||
|
||
// 删除数据
|
||
const deleteRecord = async (event) => {
|
||
try {
|
||
await db
|
||
.collection("sales")
|
||
.where({
|
||
_id: event.data._id,
|
||
})
|
||
.remove();
|
||
return {
|
||
success: true,
|
||
};
|
||
} catch (e) {
|
||
return {
|
||
success: false,
|
||
errMsg: e,
|
||
};
|
||
}
|
||
};
|
||
|
||
// 摄影书主页
|
||
const getPhotoBookHome = async () => {
|
||
const profileRes = await safeGetCollection("photographer_profiles", {
|
||
enabled: true,
|
||
});
|
||
const worksRes = await safeGetCollection("photographer_works", {
|
||
enabled: true,
|
||
});
|
||
const packageRes = await safeGetCollection("photo_packages", {
|
||
enabled: true,
|
||
});
|
||
|
||
const profile = profileRes.data[0] || {};
|
||
const works = (worksRes.data || []).slice(0, 6);
|
||
const packages = (packageRes.data || []).slice(0, 6);
|
||
|
||
const fromCloud = Boolean(
|
||
profile.photographerName || works.length || packages.length
|
||
);
|
||
|
||
if (!fromCloud) {
|
||
return {
|
||
success: true,
|
||
source: "fallback",
|
||
data: DEFAULT_PHOTO_BOOK_HOME,
|
||
};
|
||
}
|
||
|
||
return {
|
||
success: true,
|
||
source: "cloud",
|
||
data: {
|
||
photographerName:
|
||
profile.photographerName || DEFAULT_PHOTO_BOOK_HOME.photographerName,
|
||
photographerTagline:
|
||
profile.photographerTagline ||
|
||
DEFAULT_PHOTO_BOOK_HOME.photographerTagline,
|
||
heroImage: profile.heroImage || DEFAULT_PHOTO_BOOK_HOME.heroImage,
|
||
tags: profile.tags || DEFAULT_PHOTO_BOOK_HOME.tags,
|
||
works:
|
||
works.map((item) => ({
|
||
id: item._id,
|
||
cover: item.cover,
|
||
})) || DEFAULT_PHOTO_BOOK_HOME.works,
|
||
packages:
|
||
packages.map((item) => ({
|
||
id: item._id,
|
||
badge: item.badge || "",
|
||
title: item.title,
|
||
desc: item.desc,
|
||
price: item.price,
|
||
})) || DEFAULT_PHOTO_BOOK_HOME.packages,
|
||
ctaText: profile.ctaText || DEFAULT_PHOTO_BOOK_HOME.ctaText,
|
||
},
|
||
};
|
||
};
|
||
|
||
// const getOpenId = require('./getOpenId/index');
|
||
// const getMiniProgramCode = require('./getMiniProgramCode/index');
|
||
// const createCollection = require('./createCollection/index');
|
||
// const selectRecord = require('./selectRecord/index');
|
||
// const updateRecord = require('./updateRecord/index');
|
||
// const fetchGoodsList = require('./fetchGoodsList/index');
|
||
// const genMpQrcode = require('./genMpQrcode/index');
|
||
// 云函数入口函数
|
||
exports.main = async (event, context) => {
|
||
switch (event.type) {
|
||
case "getOpenId":
|
||
return await getOpenId();
|
||
case "getMiniProgramCode":
|
||
return await getMiniProgramCode();
|
||
case "createCollection":
|
||
return await createCollection();
|
||
case "selectRecord":
|
||
return await selectRecord();
|
||
case "updateRecord":
|
||
return await updateRecord(event);
|
||
case "insertRecord":
|
||
return await insertRecord(event);
|
||
case "deleteRecord":
|
||
return await deleteRecord(event);
|
||
case "getPhotoBookHome":
|
||
return await getPhotoBookHome();
|
||
}
|
||
};
|