package org.rakam.ui.report; import org.rakam.server.http.HttpService; import org.rakam.server.http.annotations.Api; import org.rakam.server.http.annotations.ApiOperation; import org.rakam.server.http.annotations.ApiParam; import org.rakam.server.http.annotations.Authorization; import org.rakam.server.http.annotations.BodyParam; import org.rakam.server.http.annotations.IgnoreApi; import org.rakam.server.http.annotations.JsonRequest; import org.rakam.ui.ProtectEndpoint; import org.rakam.ui.ReportMetadata; import org.rakam.ui.UIPermissionParameterProvider.Project; import org.rakam.util.SuccessMessage; import javax.inject.Inject; import javax.inject.Named; import javax.ws.rs.POST; import javax.ws.rs.Path; @Path("/ui/report") @Api(value = "/report", tags = "rakam-ui", authorizations = @Authorization(value = "read_key")) @IgnoreApi public class ReportHttpService extends HttpService { private final ReportMetadata metadata; @Inject public ReportHttpService(ReportMetadata metadata) { this.metadata = metadata; } @JsonRequest @ApiOperation(value = "List Reports", authorizations = @Authorization(value = "read_key")) @Path("/list") public Object list(@Named("user_id") Project project) { return metadata.getReports(project.userId, project.project); } @ApiOperation(value = "Create Report", authorizations = @Authorization(value = "read_key")) @Path("/create") @POST @ProtectEndpoint(writeOperation = true) public SuccessMessage create(@Named("user_id") Project project, @BodyParam Report report) { metadata.save(project.userId, project.project, report); return SuccessMessage.success(); } @JsonRequest @ApiOperation(value = "Delete Report", authorizations = @Authorization(value = "read_key")) @Path("/delete") @ProtectEndpoint(writeOperation = true) public SuccessMessage delete( @Named("user_id") Project project, @ApiParam(value = "slug", description = "Slug") String slug) { metadata.delete(project.userId, project.project, slug); return SuccessMessage.success(); } @JsonRequest @ApiOperation(value = "Get Report", authorizations = @Authorization(value = "read_key")) @Path("/get") public Report get( @ApiParam(value = "slug", description = "Report name") String slug, @Named("user_id") Project project) { return metadata.get(project.userId, project.project, slug); } @ApiOperation(value = "Update report", authorizations = @Authorization(value = "read_key")) @POST @Path("/update") @JsonRequest @ProtectEndpoint(writeOperation = true) public SuccessMessage update(@Named("user_id") Project project, @BodyParam Report report) { metadata.update(project.userId, project.project, report); return SuccessMessage.success(); } }