123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- 'use strict';
- module.exports = async (event, context) => {
-
- let {
- appid,
- appVersion,
- wgtVersion,
- } = event;
- const platform_Android = 'Android';
- const platform_iOS = 'iOS';
- const package_app = 'native_app';
- const package_wgt = 'wgt';
- const app_version_db_name = 'opendb-app-versions'
- let platform = platform_Android;
-
- if (event.headers) {
- let body;
- try {
- if (event.httpMethod.toLocaleLowerCase() === 'get') {
- body = event.queryStringParameters;
- } else {
- body = JSON.parse(event.body);
- }
- } catch (e) {
- return {
- code: 500,
- msg: '请求错误'
- };
- }
- appid = body.appid;
- appVersion = body.appVersion;
- wgtVersion = body.wgtVersion;
- platform = /iPhone|iPad/.test(event.headers) ? platform_iOS : platform_Android;
- } else if (context.OS) {
- platform = context.OS === 'android' ?
- platform_Android :
- context.OS === 'ios' ?
- platform_iOS :
- platform_Android;
- }
- if (appid && appVersion && wgtVersion && platform) {
- const collection = uniCloud.database().collection(app_version_db_name);
- const record = await collection.where({
- appid,
- platform,
- stable_publish: true
- })
- .orderBy('create_date', 'desc')
- .get();
- if (record && record.data && record.data.length > 0) {
- const appVersionInDb = record.data.find(item => item.type === package_app) || {};
- const wgtVersionInDb = record.data.find(item => item.type === package_wgt) || {};
- const hasAppPackage = !!Object.keys(appVersionInDb).length;
- const hasWgtPackage = !!Object.keys(wgtVersionInDb).length;
-
- let stablePublishDb = hasAppPackage ?
- hasWgtPackage ?
- compare(wgtVersionInDb.version, appVersionInDb.version) >= 0 ?
- wgtVersionInDb :
- appVersionInDb :
- appVersionInDb :
- wgtVersionInDb;
- const {
- version,
- min_uni_version
- } = stablePublishDb;
-
- const appUpdate = compare(version, appVersion) === 1;
- const wgtUpdate = compare(version, wgtVersion) === 1;
- if (Object.keys(stablePublishDb).length && appUpdate && wgtUpdate) {
-
- if (min_uni_version && compare(min_uni_version, appVersion) < 1) {
- return {
- code: 101,
- message: 'wgt更新',
- ...stablePublishDb
- };
- } else if (hasAppPackage && compare(appVersionInDb.version, appVersion) === 1) {
- return {
- code: 102,
- message: '整包更新',
- ...appVersionInDb
- };
- }
- }
- return {
- code: 0,
- message: '当前版本已经是最新的,不需要更新'
- };
- }
- return {
- code: -101,
- message: '暂无更新或检查appid是否填写正确'
- };
- }
- return {
- code: -102,
- message: '请检查传参是否填写正确'
- };
- };
- function compare(v1 = '0', v2 = '0') {
- v1 = String(v1).split('.')
- v2 = String(v2).split('.')
- const minVersionLens = Math.min(v1.length, v2.length);
- let result = 0;
- for (let i = 0; i < minVersionLens; i++) {
- const curV1 = Number(v1[i])
- const curV2 = Number(v2[i])
- if (curV1 > curV2) {
- result = 1
- break;
- } else if (curV1 < curV2) {
- result = -1
- break;
- }
- }
- if (result === 0 && (v1.length !== v2.length)) {
- const v1BiggerThenv2 = v1.length > v2.length;
- const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
- for (let i = minVersionLens; i < maxLensVersion.length; i++) {
- const curVersion = Number(maxLensVersion[i])
- if (curVersion > 0) {
- v1BiggerThenv2 ? result = 1 : result = -1
- break;
- }
- }
- }
- return result;
- }
|