diff --git a/gm-server/app/controller/activity.ts b/gm-server/app/controller/activity.ts index 75b90b498..4b30c5806 100644 --- a/gm-server/app/controller/activity.ts +++ b/gm-server/app/controller/activity.ts @@ -61,6 +61,13 @@ export default class ActivityController extends Controller { return } + public async getGroupDataById() { + const { ctx } = this; + const { groupId } = ctx.request.body; + ctx.body = await ctx.service.activity.getGroupDataById(groupId); + return + } + public async updateActivityGroupName() { const { ctx } = this; const { groupId, groupName } = ctx.request.body; @@ -75,6 +82,13 @@ export default class ActivityController extends Controller { return } + public async saveSingleActivityToGroup() { + const { ctx } = this; + const { groupId, index, activityId } = ctx.request.body; + ctx.body = await ctx.service.activity.saveSingleActivityToGroup(groupId, index, activityId); + return + } + public async saveGroupToServer() { const { ctx } = this; const { groupId, serverIds } = ctx.request.body; diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index 192c2a353..046992401 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -61,8 +61,9 @@ export default (app: Application) => { router.post('/api/activity/updateactivity', tokenParser, controller.activity.updateActivity); router.post('/api/activity/deleteactivity', tokenParser, controller.activity.deleteActivity); router.post('/api/activity/getactivitygrouplist', tokenParser, controller.activity.getActivityGroupList); - router.post('/api/activity/updateactivitygroupname', tokenParser, controller.activity.updateActivityGroupName); + router.post('/api/activity/updateactivitygroupname', controller.activity.updateActivityGroupName); router.post('/api/activity/saveactivitiestogroup', tokenParser, controller.activity.saveActivitiesToGroup); + router.post('/api/activity/savesingleactivitytogroup', controller.activity.saveSingleActivityToGroup); router.post('/api/activity/savegrouptoserver', tokenParser, controller.activity.saveGroupToServer); router.post('/api/activity/creategroup', tokenParser, controller.activity.createGroup); router.post('/api/activity/deletegroup', tokenParser, controller.activity.deleteGroup); @@ -70,4 +71,5 @@ export default (app: Application) => { router.post('/api/activity/saveactivitygrouptypelist', controller.activity.updateActivityGroupType); router.post('/api/activity/deleteactivitygrouptype', controller.activity.deleteActivityGroupType); router.post('/api/activity/saveactivitygrouptype', controller.activity.saveGroupTypeToActivityGroup); + router.post('/api/activity/getgroupdatabyid', controller.activity.getGroupDataById); }; diff --git a/gm-server/app/service/Activity.ts b/gm-server/app/service/Activity.ts index 3ba9b1cac..e3848b206 100644 --- a/gm-server/app/service/Activity.ts +++ b/gm-server/app/service/Activity.ts @@ -50,6 +50,28 @@ export default class Activity extends Service { return 0 } + private async checkActivityGroupType(groupId: number, aids: number[], ctx) { + + let activityGroup = await ActivityGroupModel.findGroupData(groupId); + if(!activityGroup) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_NOT_FOUND); + if(activityGroup.type != 0) { + let activityGroupType = await ActivityGroupTypeModel.findByGroupType(activityGroup.type); + if(!activityGroupType) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_TYPE_NOT_FOUND); + let dic = activityGroupType.activityTypes; + let activities = await ActivityModel.findActivityByIds(aids); + for(let { type } of activities) { + let index = dic.findIndex(cur => cur.activityType == type); + if(index == -1) { + return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE); + } else { + dic.splice(index, 1); + } + } + } + + return 0 + } + public async updateActivity(activityId: number | string, groupId: number, beginTime: number, endTime: number, type: number, data: string) { const { ctx } = this; let gmuser: GMUserType = ctx.user; @@ -68,7 +90,10 @@ export default class Activity extends Service { }); } - const activities = await ActivityModel.addActivity(aids, groupId, beginTime ? new Date(beginTime) : undefined, endTime ? new Date(endTime) : undefined, type, data, gmuser.uid); + let checkResult = await this.checkActivityGroupType(groupId, aids, ctx); + if(checkResult) return checkResult; + + let activities = await ActivityModel.addActivity(aids, groupId, beginTime ? new Date(beginTime) : undefined, endTime ? new Date(endTime) : undefined, type, data, gmuser.uid); return ctx.service.utils.resResult(STATUS.SUCCESS, { activity: activities }) @@ -124,23 +149,44 @@ export default class Activity extends Service { public async saveActivitiesToGroup(groupId: number, activityIds: number[]) { const { ctx } = this; try { + let checkResult = await this.checkActivityGroupType(groupId, activityIds, ctx); + if(checkResult) return checkResult; + + await ActivityGroupModel.setActivitiesToGroupData(groupId, activityIds, ctx.user?.uid); + + } catch(e) { + return ctx.service.utils.resResult(STATUS.INTERNAL_ERR, null, e.stack); + } + return ctx.service.utils.resResult(STATUS.SUCCESS) + } + + /** + * 选择活动组内的活动 + */ + public async saveSingleActivityToGroup(groupId: number, index: number, activityId: number) { + console.log(groupId, index, activityId); + const { ctx } = this; + try { + let checkResult = await this.checkActivityGroupType(groupId, [activityId], ctx); + if(checkResult) return checkResult; + let activityGroup = await ActivityGroupModel.findGroupData(groupId); if(!activityGroup) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_NOT_FOUND); + let activity = await ActivityModel.findActivity(activityId); + if(!activity) return ctx.service.utils.resResult(STATUS.ACTIVITY_MISSING); + if(activityGroup.type != 0) { let activityGroupType = await ActivityGroupTypeModel.findByGroupType(activityGroup.type); if(!activityGroupType) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_TYPE_NOT_FOUND); let dic = activityGroupType.activityTypes; - let activities = await ActivityModel.findActivityByIds(activityIds); - for(let { type } of activities) { - let index = dic.findIndex(cur => cur.activityType == type); - if(index == -1) { - return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE); - } else { - dic.splice(index, 1); - } - } + let curDic = dic.find(cur => cur.index == index); + console.log(dic, curDic) + if(curDic.activityType != activity.type) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_NOT_FIT_GROUP_TYPE) } + let activityIds = activityGroup.activities||[]; + if(activityIds.indexOf(activityId) == -1) activityIds.push(activityId); + await ActivityGroupModel.setActivitiesToGroupData(groupId, activityIds, ctx.user?.uid); } catch(e) { @@ -239,4 +285,16 @@ export default class Activity extends Service { await ActivityGroupModel.updateGroup(groupId, { type: groupType }, ctx.user?.uid); return ctx.service.utils.resResult(STATUS.SUCCESS); } + + public async getGroupDataById(groupId: number) { + const { ctx } = this; + let activityGroup = await ActivityGroupModel.findGroupData(groupId); + if(!activityGroup) return ctx.service.utils.resResult(STATUS.GM_ACTIVITY_GROUP_NOT_FOUND); + let { type, activities: activityIds = [] } = activityGroup; + let activities = await ActivityModel.findActivityByIds(activityIds); + return ctx.service.utils.resResult(STATUS.SUCCESS, { + data: { groupId, groupType: type, activities } + }); + } + }