mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Improve publisher review management
This commit is contained in:
parent
822dc090f9
commit
aa247bc1f2
@ -22,6 +22,10 @@ import org.wso2.carbon.device.application.mgt.core.dao.common.ApplicationManagem
|
|||||||
import org.wso2.carbon.device.application.mgt.core.dto.ApplicationsDTO;
|
import org.wso2.carbon.device.application.mgt.core.dto.ApplicationsDTO;
|
||||||
import org.wso2.carbon.device.application.mgt.core.impl.ApplicationManagerImpl;
|
import org.wso2.carbon.device.application.mgt.core.impl.ApplicationManagerImpl;
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dto.DeviceTypeVersion;
|
||||||
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@ -35,190 +39,224 @@ public class ApplicationManagementTest extends BaseTestCase {
|
|||||||
|
|
||||||
private static final Log log = LogFactory.getLog(ApplicationManagementTest.class);
|
private static final Log log = LogFactory.getLog(ApplicationManagementTest.class);
|
||||||
|
|
||||||
// @Test
|
@Test
|
||||||
// public void testAddApplication() throws Exception {
|
public void testAddApplication() throws Exception {
|
||||||
//
|
|
||||||
// ApplicationDAO applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO();
|
ApplicationDAO applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO();
|
||||||
// ConnectionManagerUtil.beginDBTransaction();
|
ConnectionManagerUtil.beginDBTransaction();
|
||||||
// applicationDAO.createApplication(ApplicationsDTO.getApp1(), -1234);
|
applicationDAO.createApplication(ApplicationsDTO.getApp1(), -1234);
|
||||||
// ConnectionManagerUtil.commitDBTransaction();
|
ConnectionManagerUtil.commitDBTransaction();
|
||||||
// ConnectionManagerUtil.closeDBConnection();
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test(dependsOnMethods = ("addAplicationCategories"))
|
@Test(dependsOnMethods = ("addApplicationCategories"))
|
||||||
// public void createApplication() throws Exception {
|
public void createApplication() throws Exception {
|
||||||
//
|
|
||||||
// log.debug("Creating the first application ....!");
|
log.debug("Creating the first application ....!");
|
||||||
//
|
|
||||||
// ApplicationWrapper applicationWrapper = new ApplicationWrapper();
|
ApplicationWrapper applicationWrapper = new ApplicationWrapper();
|
||||||
//
|
|
||||||
// List<String> categories = new ArrayList<>();
|
List<String> categories = new ArrayList<>();
|
||||||
// categories.add("Test Category");
|
categories.add("Test Category");
|
||||||
// applicationWrapper.setAppCategories(categories);
|
applicationWrapper.setAppCategories(categories);
|
||||||
//
|
|
||||||
// applicationWrapper.setDescription("Test Description");
|
applicationWrapper.setDescription("Test Description");
|
||||||
// applicationWrapper.setDeviceType("android");
|
applicationWrapper.setDeviceType("android");
|
||||||
// applicationWrapper.setName("Test Application");
|
applicationWrapper.setName("Test Application");
|
||||||
// applicationWrapper.setSubType("Test Sub type");
|
applicationWrapper.setSubType("Test Sub type");
|
||||||
//
|
|
||||||
// List<String> tags = new ArrayList<>();
|
List<String> tags = new ArrayList<>();
|
||||||
// tags.add("abc");
|
tags.add("abc");
|
||||||
// tags.add("pqr");
|
tags.add("pqr");
|
||||||
// tags.add("xyz");
|
tags.add("xyz");
|
||||||
// applicationWrapper.setTags(tags);
|
applicationWrapper.setTags(tags);
|
||||||
// applicationWrapper.setPaymentCurrency("USD");
|
applicationWrapper.setPaymentCurrency("USD");
|
||||||
//
|
|
||||||
// List<ApplicationReleaseWrapper> applicationReleaseWrappers = new ArrayList<>();
|
List<ApplicationReleaseWrapper> applicationReleaseWrappers = new ArrayList<>();
|
||||||
// ApplicationReleaseWrapper releaseWrapper = new ApplicationReleaseWrapper();
|
ApplicationReleaseWrapper releaseWrapper = new ApplicationReleaseWrapper();
|
||||||
// releaseWrapper.setDescription("First release");
|
releaseWrapper.setDescription("First release");
|
||||||
// releaseWrapper.setIsSharedWithAllTenants(false);
|
releaseWrapper.setIsSharedWithAllTenants(false);
|
||||||
// releaseWrapper.setMetaData("Just meta data");
|
releaseWrapper.setMetaData("Just meta data");
|
||||||
// releaseWrapper.setReleaseType("free");
|
releaseWrapper.setReleaseType("free");
|
||||||
// releaseWrapper.setPrice(5.7);
|
releaseWrapper.setPrice(5.7);
|
||||||
// releaseWrapper.setSupportedOsVersions("4.0-7.0");
|
releaseWrapper.setSupportedOsVersions("4.0-7.0");
|
||||||
// applicationReleaseWrappers.add(releaseWrapper);
|
applicationReleaseWrappers.add(releaseWrapper);
|
||||||
//
|
|
||||||
// applicationWrapper.setApplicationReleaseWrappers(applicationReleaseWrappers);
|
applicationWrapper.setApplicationReleaseWrappers(applicationReleaseWrappers);
|
||||||
//
|
|
||||||
// ApplicationArtifact applicationArtifact = new ApplicationArtifact();
|
ApplicationArtifact applicationArtifact = new ApplicationArtifact();
|
||||||
// applicationArtifact.setBannerName("My First Banner");
|
applicationArtifact.setBannerName("My First Banner");
|
||||||
// File banner = new File("src/test/resources/samples/app1/banner1.jpg");
|
File banner = new File("src/test/resources/samples/app1/banner1.jpg");
|
||||||
// InputStream bannerStream = new FileInputStream(banner);
|
InputStream bannerStream = new FileInputStream(banner);
|
||||||
// applicationArtifact.setBannerStream(bannerStream);
|
applicationArtifact.setBannerStream(bannerStream);
|
||||||
// applicationArtifact.setIconName("My First Icon");
|
applicationArtifact.setIconName("My First Icon");
|
||||||
// applicationArtifact.setIconStream(new FileInputStream(new File("src/test/resources/samples/app1/icon.png")));
|
applicationArtifact.setIconStream(new FileInputStream(new File("src/test/resources/samples/app1/icon.png")));
|
||||||
// applicationArtifact.setInstallerName("Test Android App");
|
applicationArtifact.setInstallerName("Test Android App");
|
||||||
// applicationArtifact.setInstallerStream(new FileInputStream(new File("src/test/resources/samples/app1/sample.apk")));
|
applicationArtifact.setInstallerStream(new FileInputStream(new File("src/test/resources/samples/app1/sample.apk")));
|
||||||
//
|
|
||||||
// Map<String, InputStream> screenshots = new HashMap<>();
|
Map<String, InputStream> screenshots = new HashMap<>();
|
||||||
// screenshots.put("shot1", new FileInputStream(new File("src/test/resources/samples/app1/shot1.png")));
|
screenshots.put("shot1", new FileInputStream(new File("src/test/resources/samples/app1/shot1.png")));
|
||||||
// screenshots.put("shot2", new FileInputStream(new File("src/test/resources/samples/app1/shot2.png")));
|
screenshots.put("shot2", new FileInputStream(new File("src/test/resources/samples/app1/shot2.png")));
|
||||||
// screenshots.put("shot3", new FileInputStream(new File("src/test/resources/samples/app1/shot3.png")));
|
screenshots.put("shot3", new FileInputStream(new File("src/test/resources/samples/app1/shot3.png")));
|
||||||
//
|
|
||||||
// applicationArtifact.setScreenshots(screenshots);
|
applicationArtifact.setScreenshots(screenshots);
|
||||||
//
|
|
||||||
// ApplicationManager manager = new ApplicationManagerImpl();
|
ApplicationManager manager = new ApplicationManagerImpl();
|
||||||
// manager.createApplication(applicationWrapper, applicationArtifact);
|
manager.createApplication(applicationWrapper, applicationArtifact);
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void updateApplication(int applicationId, ApplicationUpdateWrapper applicationUpdateWrapper) throws ApplicationManagementException {
|
public void updateApplication(int applicationId, ApplicationUpdateWrapper applicationUpdateWrapper) throws ApplicationManagementException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void deleteApplication(int applicationId) throws ApplicationManagementException {
|
public void deleteApplication(int applicationId) throws ApplicationManagementException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void retireApplication(int applicationId) throws ApplicationManagementException {
|
public void retireApplication(int applicationId) throws ApplicationManagementException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void deleteApplicationRelease(String releaseUuid) throws ApplicationManagementException {
|
public void deleteApplicationRelease(String releaseUuid) throws ApplicationManagementException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public ApplicationList getApplications(Filter filter) throws ApplicationManagementException {
|
public ApplicationList getApplications(Filter filter) throws ApplicationManagementException {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public Application getApplicationById(int id, String state) throws ApplicationManagementException {
|
public Application getApplicationById(int id, String state) throws ApplicationManagementException {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public ApplicationRelease getApplicationReleaseByUUID(String uuid) throws ApplicationManagementException {
|
public ApplicationRelease getApplicationReleaseByUUID(String uuid) throws ApplicationManagementException {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public ApplicationDTO getApplicationByUuid(String uuid, String state) throws ApplicationManagementException {
|
public ApplicationDTO getApplicationByUuid(String uuid, String state) throws ApplicationManagementException {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public ApplicationDTO getApplicationByRelease(String appReleaseUUID) throws ApplicationManagementException {
|
public ApplicationDTO getApplicationByRelease(String appReleaseUUID) throws ApplicationManagementException {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public List<LifecycleState> getLifecycleStateChangeFlow(String releaseUuid) throws ApplicationManagementException {
|
public List<LifecycleState> getLifecycleStateChangeFlow(String releaseUuid) throws ApplicationManagementException {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void changeLifecycleState(String releaseUuid, String stateName) throws ApplicationManagementException {
|
public void changeLifecycleState(String releaseUuid, String stateName) throws ApplicationManagementException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void updateApplicationImageArtifact(String uuid, ApplicationArtifact applicationArtifact) throws ApplicationManagementException {
|
public void updateApplicationImageArtifact(String uuid, ApplicationArtifact applicationArtifact) throws ApplicationManagementException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void updateApplicationArtifact(String deviceType, String appType, String uuid, ApplicationArtifact applicationArtifact) throws ApplicationManagementException {
|
public void updateApplicationArtifact(String deviceType, String appType, String uuid, ApplicationArtifact applicationArtifact) throws ApplicationManagementException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public ApplicationRelease createRelease(int applicationId, ApplicationReleaseWrapper applicationReleaseWrapper, ApplicationArtifact applicationArtifact) throws ApplicationManagementException {
|
public ApplicationRelease createRelease(int applicationId, ApplicationReleaseWrapper applicationReleaseWrapper, ApplicationArtifact applicationArtifact) throws ApplicationManagementException {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public boolean updateRelease(String deviceType, String applicationType, String releaseUuid, ApplicationReleaseWrapper applicationReleaseWrapper, ApplicationArtifact applicationArtifact) throws ApplicationManagementException {
|
public boolean updateRelease(String deviceType, String applicationType, String releaseUuid, ApplicationReleaseWrapper applicationReleaseWrapper, ApplicationArtifact applicationArtifact) throws ApplicationManagementException {
|
||||||
// return false;
|
return false;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void validateAppCreatingRequest(ApplicationWrapper applicationWrapper) throws RequestValidatingException {
|
public void validateAppCreatingRequest(ApplicationWrapper applicationWrapper) throws RequestValidatingException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void validateReleaseCreatingRequest(ApplicationReleaseWrapper applicationReleaseWrapper, String applicationType) throws RequestValidatingException {
|
public void validateReleaseCreatingRequest(ApplicationReleaseWrapper applicationReleaseWrapper, String applicationType) throws RequestValidatingException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void validateImageArtifacts(Attachment iconFile, Attachment bannerFile, List<Attachment> attachmentList) throws RequestValidatingException {
|
public void validateImageArtifacts(Attachment iconFile, Attachment bannerFile, List<Attachment> attachmentList) throws RequestValidatingException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test
|
||||||
// public void validateBinaryArtifact(Attachment binaryFile, String applicationType) throws RequestValidatingException {
|
public void validateBinaryArtifact(Attachment binaryFile, String applicationType) throws RequestValidatingException {
|
||||||
//
|
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Test
|
@Test(dependsOnMethods = ("addDeviceVersions"))
|
||||||
// public void addAplicationCategories() throws ApplicationManagementException {
|
public void addApplicationCategories() throws ApplicationManagementException {
|
||||||
//
|
List<String> categories = new ArrayList<>();
|
||||||
// List<String> categories = new ArrayList<>();
|
categories.add("Test Category");
|
||||||
// categories.add("Test Category");
|
categories.add("Test Category2");
|
||||||
// categories.add("Test Category2");
|
ApplicationManager manager = new ApplicationManagerImpl();
|
||||||
// ApplicationManager manager = new ApplicationManagerImpl();
|
manager.addApplicationCategories(categories);
|
||||||
// manager.addApplicationCategories(categories);
|
|
||||||
//
|
}
|
||||||
// }
|
|
||||||
//
|
@Test
|
||||||
// @Test
|
public void addDeviceVersions() throws ApplicationManagementException {
|
||||||
// public List<Tag> getRegisteredTags() throws ApplicationManagementException {
|
List<DeviceTypeVersion> deviceTypeVersions = new ArrayList<>();
|
||||||
// return null;
|
List<String> supportingVersions = new ArrayList<>();
|
||||||
// }
|
|
||||||
//
|
//add supporting versions
|
||||||
// @Test
|
supportingVersions.add("4.0");
|
||||||
// public List<Category> getRegisteredCategories() throws ApplicationManagementException {
|
supportingVersions.add("5.0");
|
||||||
// return null;
|
supportingVersions.add("6.0");
|
||||||
// }
|
supportingVersions.add("7.0");
|
||||||
//
|
supportingVersions.add("8.0");
|
||||||
// @Test
|
|
||||||
// public void deleteTagMapping(int appId, String tagName) throws ApplicationManagementException {
|
DeviceManagementProviderServiceImpl deviceManagementProviderService = new DeviceManagementProviderServiceImpl();
|
||||||
//
|
try {
|
||||||
// }
|
List<DeviceType> deviceTypes = deviceManagementProviderService.getDeviceTypes();
|
||||||
|
|
||||||
|
for (DeviceType deviceType: deviceTypes){
|
||||||
|
for (String version : supportingVersions){
|
||||||
|
DeviceTypeVersion deviceTypeVersion = new DeviceTypeVersion();
|
||||||
|
deviceTypeVersion.setDeviceTypeId(deviceType.getId());
|
||||||
|
deviceTypeVersion.setVersionName(version);
|
||||||
|
deviceTypeVersions.add(deviceTypeVersion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (DeviceTypeVersion deviceTypeVersion : deviceTypeVersions){
|
||||||
|
deviceManagementProviderService.addDeviceTypeVersion(deviceTypeVersion);
|
||||||
|
}
|
||||||
|
} catch (DeviceManagementException e) {
|
||||||
|
String msg = "Error Occured while adding device type versions";
|
||||||
|
log.error(msg);
|
||||||
|
throw new ApplicationManagementException(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public List<Tag> getRegisteredTags() throws ApplicationManagementException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public List<Category> getRegisteredCategories() throws ApplicationManagementException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void deleteTagMapping(int appId, String tagName) throws ApplicationManagementException {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,313 @@
|
|||||||
|
/* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.carbon.device.application.mgt.publisher.api.services.admin;
|
||||||
|
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import io.swagger.annotations.ApiResponse;
|
||||||
|
import io.swagger.annotations.ApiResponses;
|
||||||
|
import io.swagger.annotations.Extension;
|
||||||
|
import io.swagger.annotations.ExtensionProperty;
|
||||||
|
import io.swagger.annotations.Info;
|
||||||
|
import io.swagger.annotations.SwaggerDefinition;
|
||||||
|
import io.swagger.annotations.Tag;
|
||||||
|
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
||||||
|
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.ErrorResponse;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.PaginationResult;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.response.Review;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ReviewWrapper;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.DELETE;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.PUT;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIs to handle admin review management related tasks in publisher.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@SwaggerDefinition(
|
||||||
|
info = @Info(
|
||||||
|
version = "1.0.0",
|
||||||
|
title = "Publisher Review Management Admin Service",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = "name", value = "PublisherReviewManagementAdminService"),
|
||||||
|
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/admin/review"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
),
|
||||||
|
tags = {
|
||||||
|
@Tag(name = "review_management", description = "Publisher Review Management related Admin APIs")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Scopes(
|
||||||
|
scopes = {
|
||||||
|
@Scope(
|
||||||
|
name = "Update a Review",
|
||||||
|
description = "Update a Review of applications.",
|
||||||
|
key = "perm:admin:app:review:update",
|
||||||
|
permissions = {"/app-mgt/publisher/admin/review/update"}
|
||||||
|
),
|
||||||
|
@Scope(
|
||||||
|
name = "Get Review Details",
|
||||||
|
description = "Get review details of applications.",
|
||||||
|
key = "perm:admin:app:review:view",
|
||||||
|
permissions = {"/app-mgt/publisher/admin/review/view"}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@Path("/admin/reviews")
|
||||||
|
@Api(value = "Publisher Review Management Admin API")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
public interface ReviewManagementAdminAPI {
|
||||||
|
String SCOPE = "scope";
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Path("/{uuid}/{reviewId}")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "PUT",
|
||||||
|
value = "Edit a review",
|
||||||
|
notes = "This will edit the review",
|
||||||
|
tags = "Review Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:admin:app:review:update")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully updated reviewTmp.",
|
||||||
|
response = Review.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while updating the new reviewTmp.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response updateReview(
|
||||||
|
@ApiParam(
|
||||||
|
name = "reviewTmp",
|
||||||
|
value = "The review that need to be updated.",
|
||||||
|
required = true)
|
||||||
|
@Valid ReviewWrapper updatingReview,
|
||||||
|
@ApiParam(
|
||||||
|
name = "uuid",
|
||||||
|
value = "uuid of the application release",
|
||||||
|
required = true)
|
||||||
|
@PathParam("uuid") String uuid,
|
||||||
|
@ApiParam(
|
||||||
|
name = "reviewId",
|
||||||
|
value = "review id of the updating reviewTmp.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("reviewId") int reviewId);
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Path("/{uuid}/{reviewId}")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "DELETE",
|
||||||
|
value = "Remove review",
|
||||||
|
notes = "Remove review",
|
||||||
|
tags = "Review Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:admin:app:review:update")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully deleted the review"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No activity found with the given ID.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while deleting the review.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
|
||||||
|
Response deleteReview(
|
||||||
|
@ApiParam(
|
||||||
|
name = "uuid",
|
||||||
|
value = "UUID of the application release.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("uuid") String uuid,
|
||||||
|
@ApiParam(
|
||||||
|
name = "reviewId",
|
||||||
|
value = "Id of the review.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("reviewId") int reviewId);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/release/{uuid}")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "get app release reviews",
|
||||||
|
notes = "Get all app release reviews",
|
||||||
|
tags = "Review Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:admin:app:review:view")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully retrieved app release reviews.",
|
||||||
|
response = PaginationResult.class,
|
||||||
|
responseContainer = "PaginationResult"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n Not found an application release for requested UUID."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while getting the review list.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
|
||||||
|
Response getAllReleaseReviews(
|
||||||
|
@ApiParam(
|
||||||
|
name = "uuid",
|
||||||
|
value = "uuid of the application release.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("uuid") String uuid,
|
||||||
|
@ApiParam(
|
||||||
|
name = "offset",
|
||||||
|
value = "Starting review number.",
|
||||||
|
defaultValue = "0")
|
||||||
|
@QueryParam("offSet") int offSet,
|
||||||
|
@ApiParam(
|
||||||
|
name = "limit",
|
||||||
|
value = "Limit of paginated reviews",
|
||||||
|
defaultValue = "20")
|
||||||
|
@QueryParam("limit") int limit);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{uuid}/release-rating")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "get ratings",
|
||||||
|
notes = "Get all ratings",
|
||||||
|
tags = "Review Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:admin:app:review:view")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully retrieved ratings.",
|
||||||
|
response = List.class,
|
||||||
|
responseContainer = "List"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No Application release found for application release UUID.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while getting ratings",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
|
||||||
|
Response getAppReleaseRating(
|
||||||
|
@ApiParam(
|
||||||
|
name = "uuid",
|
||||||
|
value = "uuid of the application release",
|
||||||
|
required = true)
|
||||||
|
@PathParam("uuid") String uuid);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{uuid}/app-rating")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "get app ratings",
|
||||||
|
notes = "Get all app ratings",
|
||||||
|
tags = "Store Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:admin:app:review:view")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully retrieved ratings.",
|
||||||
|
response = List.class,
|
||||||
|
responseContainer = "List"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No Application found which has application release of UUID.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while getting ratings",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
|
||||||
|
Response getAppRating(
|
||||||
|
@ApiParam(
|
||||||
|
name = "uuid",
|
||||||
|
value = "uuid of the application release",
|
||||||
|
required = true)
|
||||||
|
@PathParam("uuid")
|
||||||
|
String uuid);
|
||||||
|
}
|
||||||
@ -14,24 +14,30 @@
|
|||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.application.mgt.store.api.services.impl.admin;
|
package org.wso2.carbon.device.application.mgt.publisher.api.services.impl.admin;
|
||||||
|
|
||||||
import io.swagger.annotations.ApiParam;
|
import io.swagger.annotations.ApiParam;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.PaginationRequest;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.PaginationResult;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.Rating;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ReviewManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ReviewManagementException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.services.ReviewManager;
|
import org.wso2.carbon.device.application.mgt.common.services.ReviewManager;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ReviewWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ReviewWrapper;
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException;
|
import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException;
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.APIUtil;
|
import org.wso2.carbon.device.application.mgt.core.util.APIUtil;
|
||||||
import org.wso2.carbon.device.application.mgt.store.api.services.admin.ReviewManagementAdminAPI;
|
import org.wso2.carbon.device.application.mgt.publisher.api.services.admin.ReviewManagementAdminAPI;
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
import javax.ws.rs.DELETE;
|
||||||
|
import javax.ws.rs.DefaultValue;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.PUT;
|
import javax.ws.rs.PUT;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -99,4 +105,73 @@ public class ReviewManagementAdminAPIImpl implements ReviewManagementAdminAPI {
|
|||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@GET
|
||||||
|
@Path("/release/{uuid}")
|
||||||
|
public Response getAllReleaseReviews(
|
||||||
|
@PathParam("uuid") String uuid,
|
||||||
|
@DefaultValue("0") @QueryParam("offset") int offSet,
|
||||||
|
@DefaultValue("20") @QueryParam("limit") int limit) {
|
||||||
|
ReviewManager reviewManager = APIUtil.getReviewManager();
|
||||||
|
PaginationRequest request = new PaginationRequest(offSet, limit);
|
||||||
|
try {
|
||||||
|
PaginationResult paginationResult = reviewManager.getAllReleaseReviews(request, uuid);
|
||||||
|
return Response.status(Response.Status.OK).entity(paginationResult).build();
|
||||||
|
} catch (NotFoundException e) {
|
||||||
|
String msg = "Couldn't find an application release for UUID: " + uuid;
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
|
||||||
|
} catch (ReviewManagementException e) {
|
||||||
|
String msg = "Error occurred while retrieving reviews for application UUID: " + uuid;
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||||
|
} catch (ApplicationManagementException e) {
|
||||||
|
String msg = "Error occurred while retrieving application release details for application UUID: " + uuid;
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@GET
|
||||||
|
@Path("/{uuid}/release-rating")
|
||||||
|
public Response getAppReleaseRating(
|
||||||
|
@PathParam("uuid") String uuid) {
|
||||||
|
ReviewManager reviewManager = APIUtil.getReviewManager();
|
||||||
|
Rating rating;
|
||||||
|
try {
|
||||||
|
rating = reviewManager.getAppReleaseRating(uuid);
|
||||||
|
} catch (NotFoundException e) {
|
||||||
|
String msg = "Couldn't found an application release for UUID: " + uuid;
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
|
||||||
|
} catch (ReviewManagementException | ApplicationManagementException e) {
|
||||||
|
String msg = "Error occured while getting review data for application release UUID: " + uuid;
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
|
||||||
|
}
|
||||||
|
return Response.status(Response.Status.OK).entity(rating).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@GET
|
||||||
|
@Path("/{uuid}/app-rating")
|
||||||
|
public Response getAppRating(
|
||||||
|
@PathParam("uuid") String uuid) {
|
||||||
|
ReviewManager reviewManager = APIUtil.getReviewManager();
|
||||||
|
Rating rating;
|
||||||
|
try {
|
||||||
|
rating = reviewManager.getAppRating(uuid);
|
||||||
|
} catch (NotFoundException e) {
|
||||||
|
String msg = "Couldn't found an application for application release UUID: " + uuid;
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
|
||||||
|
} catch (ReviewManagementException | ApplicationManagementException e) {
|
||||||
|
String msg = "Error occured while getting review data for application release UUID: " + uuid;
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
|
||||||
|
}
|
||||||
|
return Response.status(Response.Status.OK).entity(rating).build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -26,6 +26,7 @@
|
|||||||
<jaxrs:server id="applicationMgtService" address="/">
|
<jaxrs:server id="applicationMgtService" address="/">
|
||||||
<jaxrs:serviceBeans>
|
<jaxrs:serviceBeans>
|
||||||
<ref bean="applicationMgtServiceBean"/>
|
<ref bean="applicationMgtServiceBean"/>
|
||||||
|
<ref bean="reviewMgtAdminServiceBean"/>
|
||||||
<ref bean="applicationMgtAdminServiceBean"/>
|
<ref bean="applicationMgtAdminServiceBean"/>
|
||||||
<ref bean="swaggerResource"/>
|
<ref bean="swaggerResource"/>
|
||||||
</jaxrs:serviceBeans>
|
</jaxrs:serviceBeans>
|
||||||
@ -55,6 +56,7 @@
|
|||||||
|
|
||||||
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.publisher.api.services.impl.ApplicationManagementPublisherAPIImpl"/>
|
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.publisher.api.services.impl.ApplicationManagementPublisherAPIImpl"/>
|
||||||
<bean id="applicationMgtAdminServiceBean" class="org.wso2.carbon.device.application.mgt.publisher.api.services.impl.admin.ApplicationManagementPublisherAdminAPIImpl"/>
|
<bean id="applicationMgtAdminServiceBean" class="org.wso2.carbon.device.application.mgt.publisher.api.services.impl.admin.ApplicationManagementPublisherAdminAPIImpl"/>
|
||||||
|
<bean id="reviewMgtAdminServiceBean" class="org.wso2.carbon.device.application.mgt.publisher.api.services.impl.admin.ReviewManagementAdminAPIImpl" />
|
||||||
<bean id="jsonProvider" class="org.wso2.carbon.device.application.mgt.addons.JSONMessageHandler"/>
|
<bean id="jsonProvider" class="org.wso2.carbon.device.application.mgt.addons.JSONMessageHandler"/>
|
||||||
<bean id="multipartProvider" class="org.wso2.carbon.device.application.mgt.addons.MultipartCustomProvider"/>
|
<bean id="multipartProvider" class="org.wso2.carbon.device.application.mgt.addons.MultipartCustomProvider"/>
|
||||||
|
|
||||||
|
|||||||
@ -49,9 +49,9 @@ import javax.ws.rs.core.MediaType;
|
|||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIs to handle review management related tasks.
|
* APIs to handle review management related tasks.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@SwaggerDefinition(
|
@SwaggerDefinition(
|
||||||
info = @Info(
|
info = @Info(
|
||||||
@ -60,7 +60,7 @@ import java.util.List;
|
|||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = "name", value = "ReviewManagementService"),
|
@ExtensionProperty(name = "name", value = "ReviewManagementService"),
|
||||||
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/review"),
|
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/store/review"),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
@ -92,13 +92,13 @@ public interface ReviewManagementAPI {
|
|||||||
String SCOPE = "scope";
|
String SCOPE = "scope";
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/release/{uuid}")
|
@Path("/app/user/{uuid}")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "GET",
|
httpMethod = "GET",
|
||||||
value = "get app release reviews",
|
value = "get app reviews",
|
||||||
notes = "Get all app release reviews",
|
notes = "Get all app reviews",
|
||||||
tags = "Store Management",
|
tags = "Store Management",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ -111,19 +111,20 @@ public interface ReviewManagementAPI {
|
|||||||
value = {
|
value = {
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 200,
|
code = 200,
|
||||||
message = "OK. \n Successfully retrieved app release reviews.",
|
message = "OK. \n Successfully retrieved app reviews.",
|
||||||
response = PaginationResult.class,
|
response = PaginationResult.class,
|
||||||
responseContainer = "PaginationResult"),
|
responseContainer = "PaginationResult"),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 404,
|
code = 404,
|
||||||
message = "Not Found. \n Not found an application release for requested UUID."),
|
message = "Not Found. \n Not found an application release associated with requested "
|
||||||
|
+ "UUID."),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server Error. \n Error occurred while getting the review list.",
|
message = "Internal Server Error. \n Error occurred while getting the review list.",
|
||||||
response = ErrorResponse.class)
|
response = ErrorResponse.class)
|
||||||
})
|
})
|
||||||
|
|
||||||
Response getAllReleaseReviews(
|
Response getUserReviews(
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name="uuid",
|
name="uuid",
|
||||||
value="uuid of the application release.",
|
value="uuid of the application release.",
|
||||||
@ -140,105 +141,55 @@ public interface ReviewManagementAPI {
|
|||||||
defaultValue = "20")
|
defaultValue = "20")
|
||||||
@QueryParam("limit") int limit);
|
@QueryParam("limit") int limit);
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/app/user/{uuid}")
|
@Path("/app/{uuid}")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "GET",
|
httpMethod = "GET",
|
||||||
value = "get app reviews",
|
value = "get app reviews",
|
||||||
notes = "Get all app reviews",
|
notes = "Get all app reviews",
|
||||||
tags = "Store Management",
|
tags = "Store Management",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:app:review:view")
|
@ExtensionProperty(name = SCOPE, value = "perm:app:review:view")
|
||||||
})
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
@ApiResponses(
|
|
||||||
value = {
|
|
||||||
@ApiResponse(
|
|
||||||
code = 200,
|
|
||||||
message = "OK. \n Successfully retrieved app reviews.",
|
|
||||||
response = PaginationResult.class,
|
|
||||||
responseContainer = "PaginationResult"),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 404,
|
|
||||||
message = "Not Found. \n Not found an application release associated with requested "
|
|
||||||
+ "UUID."),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 500,
|
|
||||||
message = "Internal Server Error. \n Error occurred while getting the review list.",
|
|
||||||
response = ErrorResponse.class)
|
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
Response getUserReviews(
|
@ApiResponses(
|
||||||
@ApiParam(
|
value = {
|
||||||
name="uuid",
|
@ApiResponse(
|
||||||
value="uuid of the application release.",
|
code = 200,
|
||||||
required = true)
|
message = "OK. \n Successfully retrieved app reviews.",
|
||||||
@PathParam("uuid") String uuid,
|
response = PaginationResult.class,
|
||||||
@ApiParam(
|
responseContainer = "PaginationResult"),
|
||||||
name="offset",
|
@ApiResponse(
|
||||||
value="Starting review number.",
|
code = 404,
|
||||||
defaultValue = "0")
|
message = "Not Found. \n Not found an application release associated with requested "
|
||||||
@QueryParam("offSet") int offSet,
|
+ "UUID."),
|
||||||
@ApiParam(
|
@ApiResponse(
|
||||||
name="limit",
|
code = 500,
|
||||||
value = "Limit of paginated reviews",
|
message = "Internal Server Error. \n Error occurred while getting the review list.",
|
||||||
defaultValue = "20")
|
response = ErrorResponse.class)
|
||||||
@QueryParam("limit") int limit);
|
})
|
||||||
|
|
||||||
@GET
|
Response getAllAppReviews(
|
||||||
@Path("/app/{uuid}")
|
@ApiParam(
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
name="uuid",
|
||||||
@ApiOperation(
|
value="uuid of the application release.",
|
||||||
produces = MediaType.APPLICATION_JSON,
|
required = true)
|
||||||
httpMethod = "GET",
|
@PathParam("uuid") String uuid,
|
||||||
value = "get app reviews",
|
@ApiParam(
|
||||||
notes = "Get all app reviews",
|
name="offset",
|
||||||
tags = "Store Management",
|
value="Starting review number.",
|
||||||
extensions = {
|
defaultValue = "0")
|
||||||
@Extension(properties = {
|
@QueryParam("offSet") int offSet,
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:app:review:view")
|
@ApiParam(
|
||||||
})
|
name="limit",
|
||||||
}
|
value = "Limit of paginated reviews",
|
||||||
)
|
defaultValue = "20")
|
||||||
|
@QueryParam("limit") int limit);
|
||||||
@ApiResponses(
|
|
||||||
value = {
|
|
||||||
@ApiResponse(
|
|
||||||
code = 200,
|
|
||||||
message = "OK. \n Successfully retrieved app reviews.",
|
|
||||||
response = PaginationResult.class,
|
|
||||||
responseContainer = "PaginationResult"),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 404,
|
|
||||||
message = "Not Found. \n Not found an application release associated with requested "
|
|
||||||
+ "UUID."),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 500,
|
|
||||||
message = "Internal Server Error. \n Error occurred while getting the review list.",
|
|
||||||
response = ErrorResponse.class)
|
|
||||||
})
|
|
||||||
|
|
||||||
Response getAllAppReviews(
|
|
||||||
@ApiParam(
|
|
||||||
name="uuid",
|
|
||||||
value="uuid of the application release.",
|
|
||||||
required = true)
|
|
||||||
@PathParam("uuid") String uuid,
|
|
||||||
@ApiParam(
|
|
||||||
name="offset",
|
|
||||||
value="Starting review number.",
|
|
||||||
defaultValue = "0")
|
|
||||||
@QueryParam("offSet") int offSet,
|
|
||||||
@ApiParam(
|
|
||||||
name="limit",
|
|
||||||
value = "Limit of paginated reviews",
|
|
||||||
defaultValue = "20")
|
|
||||||
@QueryParam("limit") int limit);
|
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("/{uuid}")
|
@Path("/{uuid}")
|
||||||
@ -442,13 +393,13 @@ public interface ReviewManagementAPI {
|
|||||||
@PathParam("reviewId") int reviewId);
|
@PathParam("reviewId") int reviewId);
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/{uuid}/release-rating")
|
@Path("/{uuid}/app-rating")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "GET",
|
httpMethod = "GET",
|
||||||
value = "get ratings",
|
value = "get app ratings",
|
||||||
notes = "Get all ratings",
|
notes = "Get all app ratings",
|
||||||
tags = "Store Management",
|
tags = "Store Management",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ -466,7 +417,7 @@ public interface ReviewManagementAPI {
|
|||||||
responseContainer = "List"),
|
responseContainer = "List"),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 404,
|
code = 404,
|
||||||
message = "Not Found. \n No Application release found for application release UUID.",
|
message = "Not Found. \n No Application found which has application release of UUID.",
|
||||||
response = ErrorResponse.class),
|
response = ErrorResponse.class),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
@ -474,52 +425,11 @@ public interface ReviewManagementAPI {
|
|||||||
response = ErrorResponse.class)
|
response = ErrorResponse.class)
|
||||||
})
|
})
|
||||||
|
|
||||||
Response getAppReleaseRating(
|
Response getAppRating(
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "uuid",
|
name = "uuid",
|
||||||
value = "uuid of the application release",
|
value = "uuid of the application release",
|
||||||
required = true)
|
required = true)
|
||||||
@PathParam("uuid")
|
@PathParam("uuid")
|
||||||
String uuid);
|
String uuid);
|
||||||
|
|
||||||
@GET
|
|
||||||
@Path("/{uuid}/app-rating")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
@ApiOperation(
|
|
||||||
produces = MediaType.APPLICATION_JSON,
|
|
||||||
httpMethod = "GET",
|
|
||||||
value = "get app ratings",
|
|
||||||
notes = "Get all app ratings",
|
|
||||||
tags = "Store Management",
|
|
||||||
extensions = {
|
|
||||||
@Extension(properties = {
|
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:app:review:view")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
@ApiResponses(
|
|
||||||
value = {
|
|
||||||
@ApiResponse(
|
|
||||||
code = 200,
|
|
||||||
message = "OK. \n Successfully retrieved ratings.",
|
|
||||||
response = List.class,
|
|
||||||
responseContainer = "List"),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 404,
|
|
||||||
message = "Not Found. \n No Application found which has application release of UUID.",
|
|
||||||
response = ErrorResponse.class),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 500,
|
|
||||||
message = "Internal Server Error. \n Error occurred while getting ratings",
|
|
||||||
response = ErrorResponse.class)
|
|
||||||
})
|
|
||||||
|
|
||||||
Response getAppRating(
|
|
||||||
@ApiParam(
|
|
||||||
name = "uuid",
|
|
||||||
value = "uuid of the application release",
|
|
||||||
required = true)
|
|
||||||
@PathParam("uuid")
|
|
||||||
String uuid);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,174 +0,0 @@
|
|||||||
/* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
package org.wso2.carbon.device.application.mgt.store.api.services.admin;
|
|
||||||
|
|
||||||
import io.swagger.annotations.Api;
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
|
||||||
import io.swagger.annotations.ApiParam;
|
|
||||||
import io.swagger.annotations.ApiResponse;
|
|
||||||
import io.swagger.annotations.ApiResponses;
|
|
||||||
import io.swagger.annotations.Extension;
|
|
||||||
import io.swagger.annotations.ExtensionProperty;
|
|
||||||
import io.swagger.annotations.Info;
|
|
||||||
import io.swagger.annotations.SwaggerDefinition;
|
|
||||||
import io.swagger.annotations.Tag;
|
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.ErrorResponse;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.response.Review;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ReviewWrapper;
|
|
||||||
|
|
||||||
import javax.validation.Valid;
|
|
||||||
import javax.ws.rs.Consumes;
|
|
||||||
import javax.ws.rs.DELETE;
|
|
||||||
import javax.ws.rs.PUT;
|
|
||||||
import javax.ws.rs.Path;
|
|
||||||
import javax.ws.rs.PathParam;
|
|
||||||
import javax.ws.rs.Produces;
|
|
||||||
import javax.ws.rs.core.MediaType;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* APIs to handle review management related tasks.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@SwaggerDefinition(
|
|
||||||
info = @Info(
|
|
||||||
version = "1.0.0",
|
|
||||||
title = "Review Management Admin Service",
|
|
||||||
extensions = {
|
|
||||||
@Extension(properties = {
|
|
||||||
@ExtensionProperty(name = "name", value = "ReviewManagementAdminService"),
|
|
||||||
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/admin/review"),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
),
|
|
||||||
tags = {
|
|
||||||
@Tag(name = "review_management", description = "Review Management related Admin APIs")
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@Scopes(
|
|
||||||
scopes = {
|
|
||||||
@Scope(
|
|
||||||
name = "Update a Review",
|
|
||||||
description = "Update a Review from the application store.",
|
|
||||||
key = "perm:admin:app:review:update",
|
|
||||||
permissions = {"/app-mgt/store/admin/review/update"}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
@Path("/admin/reviews")
|
|
||||||
@Api(value = "Review Management Admin API")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
public interface ReviewManagementAdminAPI {
|
|
||||||
String SCOPE = "scope";
|
|
||||||
|
|
||||||
@PUT
|
|
||||||
@Path("/{uuid}/{reviewId}")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
|
||||||
@ApiOperation(
|
|
||||||
consumes = MediaType.APPLICATION_JSON,
|
|
||||||
produces = MediaType.APPLICATION_JSON,
|
|
||||||
httpMethod = "PUT",
|
|
||||||
value = "Edit a reviewTmp",
|
|
||||||
notes = "This will edit the reviewTmp",
|
|
||||||
tags = "Store Management",
|
|
||||||
extensions = {
|
|
||||||
@Extension(properties = {
|
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:admin:app:review:update")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@ApiResponses(
|
|
||||||
value = {
|
|
||||||
@ApiResponse(
|
|
||||||
code = 200,
|
|
||||||
message = "OK. \n Successfully updated reviewTmp.",
|
|
||||||
response = Review.class),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 400,
|
|
||||||
message = "Bad Request. \n Invalid request or validation error."),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 500,
|
|
||||||
message = "Internal Server Error. \n Error occurred while updating the new reviewTmp.",
|
|
||||||
response = ErrorResponse.class)
|
|
||||||
})
|
|
||||||
Response updateReview(
|
|
||||||
@ApiParam(
|
|
||||||
name = "reviewTmp",
|
|
||||||
value = "The reviewTmp that need to be updated.",
|
|
||||||
required = true)
|
|
||||||
@Valid ReviewWrapper updatingReview,
|
|
||||||
@ApiParam(
|
|
||||||
name = "uuid",
|
|
||||||
value = "uuid of the application release",
|
|
||||||
required = true)
|
|
||||||
@PathParam("uuid") String uuid,
|
|
||||||
@ApiParam(
|
|
||||||
name = "reviewId",
|
|
||||||
value = "reviewTmp id of the updating reviewTmp.",
|
|
||||||
required = true)
|
|
||||||
@PathParam("reviewId") int reviewId);
|
|
||||||
|
|
||||||
@DELETE
|
|
||||||
@Path("/{uuid}/{reviewId}")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
|
||||||
@ApiOperation(
|
|
||||||
consumes = MediaType.APPLICATION_JSON,
|
|
||||||
produces = MediaType.APPLICATION_JSON,
|
|
||||||
httpMethod = "DELETE",
|
|
||||||
value = "Remove comment",
|
|
||||||
notes = "Remove comment",
|
|
||||||
tags = "Store Management",
|
|
||||||
extensions = {
|
|
||||||
@Extension(properties = {
|
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:admin:app:review:update")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
@ApiResponses(
|
|
||||||
value = {
|
|
||||||
@ApiResponse(
|
|
||||||
code = 200,
|
|
||||||
message = "OK. \n Successfully deleted the review"),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 404,
|
|
||||||
message = "Not Found. \n No activity found with the given ID.",
|
|
||||||
response = ErrorResponse.class),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 500,
|
|
||||||
message = "Internal Server Error. \n Error occurred while deleting the review.",
|
|
||||||
response = ErrorResponse.class)
|
|
||||||
})
|
|
||||||
|
|
||||||
Response deleteReview(
|
|
||||||
@ApiParam(
|
|
||||||
name = "uuid",
|
|
||||||
value = "UUID of the application release.",
|
|
||||||
required = true)
|
|
||||||
@PathParam("uuid") String uuid,
|
|
||||||
@ApiParam(name = "reviewId",
|
|
||||||
value = "Id of the review.",
|
|
||||||
required = true)
|
|
||||||
@PathParam("reviewId") int reviewId);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -53,33 +53,6 @@ public class ReviewManagementAPIImpl implements ReviewManagementAPI {
|
|||||||
|
|
||||||
private static Log log = LogFactory.getLog(ReviewManagementAPIImpl.class);
|
private static Log log = LogFactory.getLog(ReviewManagementAPIImpl.class);
|
||||||
|
|
||||||
@Override
|
|
||||||
@GET
|
|
||||||
@Path("/release/{uuid}")
|
|
||||||
public Response getAllReleaseReviews(
|
|
||||||
@PathParam("uuid") String uuid,
|
|
||||||
@DefaultValue("0") @QueryParam("offset") int offSet,
|
|
||||||
@DefaultValue("20") @QueryParam("limit") int limit) {
|
|
||||||
ReviewManager reviewManager = APIUtil.getReviewManager();
|
|
||||||
PaginationRequest request = new PaginationRequest(offSet, limit);
|
|
||||||
try {
|
|
||||||
PaginationResult paginationResult = reviewManager.getAllReleaseReviews(request, uuid);
|
|
||||||
return Response.status(Response.Status.OK).entity(paginationResult).build();
|
|
||||||
} catch (NotFoundException e) {
|
|
||||||
String msg = "Couldn't find an application release for UUID: " + uuid;
|
|
||||||
log.error(msg, e);
|
|
||||||
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
|
|
||||||
} catch (ReviewManagementException e) {
|
|
||||||
String msg = "Error occurred while retrieving reviews for application UUID: " + uuid;
|
|
||||||
log.error(msg, e);
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
|
||||||
} catch (ApplicationManagementException e) {
|
|
||||||
String msg = "Error occurred while retrieving application release details for application UUID: " + uuid;
|
|
||||||
log.error(msg, e);
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path("/app/user/{uuid}")
|
@Path("/app/user/{uuid}")
|
||||||
@ -281,27 +254,6 @@ public class ReviewManagementAPIImpl implements ReviewManagementAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@GET
|
|
||||||
@Path("/{uuid}/release-rating")
|
|
||||||
public Response getAppReleaseRating(
|
|
||||||
@PathParam("uuid") String uuid) {
|
|
||||||
ReviewManager reviewManager = APIUtil.getReviewManager();
|
|
||||||
Rating rating;
|
|
||||||
try {
|
|
||||||
rating = reviewManager.getAppReleaseRating(uuid);
|
|
||||||
} catch (NotFoundException e) {
|
|
||||||
String msg = "Couldn't found an application release for UUID: " + uuid;
|
|
||||||
log.error(msg, e);
|
|
||||||
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
|
|
||||||
} catch (ReviewManagementException | ApplicationManagementException e) {
|
|
||||||
String msg = "Error occured while getting review data for application release UUID: " + uuid;
|
|
||||||
log.error(msg, e);
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
|
|
||||||
}
|
|
||||||
return Response.status(Response.Status.OK).entity(rating).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path("/{uuid}/app-rating")
|
@Path("/{uuid}/app-rating")
|
||||||
|
|||||||
@ -26,7 +26,6 @@
|
|||||||
<jaxrs:serviceBeans>
|
<jaxrs:serviceBeans>
|
||||||
<ref bean="applicationMgtServiceBean"/>
|
<ref bean="applicationMgtServiceBean"/>
|
||||||
<ref bean="reviewMgtServiceBean"/>
|
<ref bean="reviewMgtServiceBean"/>
|
||||||
<ref bean="reviewMgtAdminServiceBean"/>
|
|
||||||
<ref bean="subscriptionMgtServiceBean"/>
|
<ref bean="subscriptionMgtServiceBean"/>
|
||||||
<ref bean="swaggerResource"/>
|
<ref bean="swaggerResource"/>
|
||||||
</jaxrs:serviceBeans>
|
</jaxrs:serviceBeans>
|
||||||
@ -56,7 +55,6 @@
|
|||||||
|
|
||||||
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.ApplicationManagementAPIImpl"/>
|
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.ApplicationManagementAPIImpl"/>
|
||||||
<bean id="reviewMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.ReviewManagementAPIImpl" />
|
<bean id="reviewMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.ReviewManagementAPIImpl" />
|
||||||
<bean id="reviewMgtAdminServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.admin.ReviewManagementAdminAPIImpl" />
|
|
||||||
<bean id="subscriptionMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.SubscriptionManagementAPIImpl"/>
|
<bean id="subscriptionMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.SubscriptionManagementAPIImpl"/>
|
||||||
<bean id="jsonProvider" class="org.wso2.carbon.device.application.mgt.addons.JSONMessageHandler"/>
|
<bean id="jsonProvider" class="org.wso2.carbon.device.application.mgt.addons.JSONMessageHandler"/>
|
||||||
<bean id="multipartProvider" class="org.wso2.carbon.device.application.mgt.addons.MultipartCustomProvider"/>
|
<bean id="multipartProvider" class="org.wso2.carbon.device.application.mgt.addons.MultipartCustomProvider"/>
|
||||||
|
|||||||
@ -154,6 +154,7 @@
|
|||||||
<Scope>perm:app:subscription:install</Scope>
|
<Scope>perm:app:subscription:install</Scope>
|
||||||
<Scope>perm:app:subscription:uninstall</Scope>
|
<Scope>perm:app:subscription:uninstall</Scope>
|
||||||
<Scope>perm:admin:app:review:update</Scope>
|
<Scope>perm:admin:app:review:update</Scope>
|
||||||
|
<Scope>perm:admin:app:review:view</Scope>
|
||||||
<Scope>perm:admin:app:publisher:update</Scope>
|
<Scope>perm:admin:app:publisher:update</Scope>
|
||||||
</Scopes>
|
</Scopes>
|
||||||
<SSOConfiguration>
|
<SSOConfiguration>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user