RequestOut<TEditLabReplyData> LabService::editLab(const RequestIn<TEditLabRequestData> &in) { typedef RequestOut<TEditLabReplyData> Out; Translator t(in.locale()); QString error; if (!commonCheck(t, in.data(), &error)) return Out(error); bool ok = false; const TEditLabRequestData &requestData = in.data(); Lab entity = LabRepo->findOne(requestData.id(), &ok); if (!ok) return Out(t.translate("LabService", "Failed to get lab (internal)", "error")); if (!entity.isValid()) return Out(t.translate("LabService", "No such lab", "error")); entity.convertToCreatedByUser(); entity.setAuthors(requestData.authors()); entity.setDeletedExtraFiles(requestData.deletedExtraFiles()); entity.setDescription(requestData.description()); entity.setExtraFiles(requestData.newExtraFiles()); entity.setGroups(requestData.groups()); entity.setSaveData(requestData.editData()); if (requestData.editData()) { entity.setDataList(requestData.dataList()); entity.setType(requestData.dataList().first().type()); } entity.setTags(requestData.tags()); entity.setTitle(requestData.title()); TransactionHolder holder(Source); LabRepo->edit(entity, &ok); if (!ok) return Out(t.translate("LabService", "Failed to edit lab (internal)", "error")); entity = LabRepo->findOne(entity.id(), &ok); if (!ok || !entity.isValid()) return Out(t.translate("LabService", "Failed to get lab (internal)", "error")); TEditLabReplyData replyData; TLabInfo info = labToLabInfo(entity, &ok); if (!ok) return Out(t.translate("LabService", "Failed to create lab info (internal)", "error")); if (!commit(t, holder, &error)) return Out(error); replyData.setLabInfo(info); return Out(replyData, entity.lastModificationDateTime()); }
RequestOut<TAddLabReplyData> LabService::addLab(const RequestIn<TAddLabRequestData> &in, quint64 userId) { typedef RequestOut<TAddLabReplyData> Out; Translator t(in.locale()); QString error; const TAddLabRequestData &requestData = in.data(); if (!commonCheck(t, requestData, &error)) return Out(error); if (!checkUserId(t, userId, &error)) return Out(error); bool ok = false; Lab entity; entity.setAuthors(requestData.authors()); entity.setDataList(requestData.dataList()); entity.setDescription(requestData.description()); entity.setExtraFiles(requestData.extraFiles()); entity.setGroups(requestData.groups()); entity.setSenderId(userId); entity.setTags(requestData.tags()); entity.setTitle(requestData.title()); entity.setType(requestData.dataList().first().type()); TransactionHolder holder(Source); quint64 id = LabRepo->add(entity, &ok); if (!ok || !id) return Out(t.translate("LabService", "Failed to add lab (internal)", "error")); entity = LabRepo->findOne(id, &ok); if (!ok || !entity.isValid()) return Out(t.translate("LabService", "Failed to get lab (internal)", "error")); TLabInfo info = labToLabInfo(entity, &ok); if (!ok) return Out(t.translate("LabService", "Failed to create lab info (internal)", "error")); if (!commit(t, holder, &error)) return Out(error); TAddLabReplyData replyData; replyData.setLabInfo(info); return Out(replyData, info.creationDateTime()); }