Skip to content

Commit

Permalink
Added public endpoint for fetching subset of projects info
Browse files Browse the repository at this point in the history
  • Loading branch information
this-Aditya committed Aug 5, 2024
1 parent 01e5f89 commit 8b05aeb
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ class OAuth2ServerConfiguration(
.skipUrlPattern(HttpMethod.GET, "/management/health")
.skipUrlPattern(HttpMethod.POST, "/oauth/token")
.skipUrlPattern(HttpMethod.GET, "/api/meta-token/*")
.skipUrlPattern(HttpMethod.GET, "/api/lite-projects")
.skipUrlPattern(HttpMethod.GET, "/api/sitesettings")
.skipUrlPattern(HttpMethod.GET, "/api/redirect/**")
.skipUrlPattern(HttpMethod.GET, "/api/logout-url")
Expand Down Expand Up @@ -173,6 +174,7 @@ class OAuth2ServerConfiguration(
.hasAnyAuthority(RoleAuthority.SYS_ADMIN_AUTHORITY)
.antMatchers("/api/profile-info").permitAll()
.antMatchers("/api/sitesettings").permitAll()
.antMatchers("/api/lite-projects").permitAll()
.antMatchers("/api/logout-url").permitAll()
.antMatchers("/api/**")
.authenticated() // Allow management/health endpoint to all to allow kubernetes to be able to
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/org/radarbase/management/service/ProjectService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,17 @@ class ProjectService(
}
}

/**
*Get all the projects for the public endpoint.
*
*@return the list of ProjectLiteDTO
*/
@Transactional(readOnly = true)
fun findProjectsForPublicEndpoint(pageable: Pageable): Page<*> {
val projects: Page<Project> = projectRepository.findAllWithEagerRelationships(pageable)
return projects.map { project: Project -> projectMapper.projectToProjectLiteDTO(project) }
}

/**
* Get one project by id.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package org.radarbase.management.service.dto

import com.fasterxml.jackson.annotation.JsonInclude
import org.radarbase.management.domain.enumeration.ProjectStatus
import reactor.util.annotation.NonNull
import java.io.Serializable
import javax.validation.constraints.NotNull

@JsonInclude(JsonInclude.Include.NON_NULL)
class ProjectLiteDTO : Serializable {
@NonNull
var projectName: String? = null

@NonNull
var description: String? = null

@NotNull
var location: String? = null
var projectStatus: ProjectStatus? = null


override fun toString() = "PublicProjectDTO(" +
"projectName=$projectName, " +
"description=$description, " +
"location=$location, " +
"projectStatus=$projectStatus" +
")"


override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as ProjectLiteDTO

if (projectName != other.projectName) return false
if (description != other.description) return false
if (location != other.location) return false
if (projectStatus != other.projectStatus) return false

return true
}

override fun hashCode(): Int {
var result = projectName?.hashCode() ?: 0
result = 31 * result + (description?.hashCode() ?: 0)
result = 31 * result + (location?.hashCode() ?: 0)
result = 31 * result + (projectStatus?.hashCode() ?: 0)
return result
}

companion object {
private const val serialVersionUID = 1L
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import org.mapstruct.Named
import org.radarbase.management.domain.Project
import org.radarbase.management.service.dto.MinimalProjectDetailsDTO
import org.radarbase.management.service.dto.ProjectDTO
import org.radarbase.management.service.dto.ProjectLiteDTO
import org.radarbase.management.service.mapper.decorator.ProjectMapperDecorator

/**
Expand Down Expand Up @@ -48,6 +49,8 @@ interface ProjectMapper {
fun projectToMinimalProjectDetailsDTO(project: Project): MinimalProjectDetailsDTO
fun projectsToMinimalProjectDetailsDTOs(projects: List<Project>): List<MinimalProjectDetailsDTO>

fun projectToProjectLiteDTO(project: Project): ProjectLiteDTO

@Mapping(target = "description", ignore = true)
@Mapping(target = "roles", ignore = true)
@Mapping(target = "organizationName", ignore = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.radarbase.management.web.rest

import io.micrometer.core.annotation.Timed
import org.radarbase.management.service.ProjectService
import org.radarbase.management.web.rest.util.PaginationUtil
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.domain.Pageable
import org.springframework.data.web.PageableDefault
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

/**
* GET /lite-projects : get all the projects.
*
* @return the ResponseEntity with status 200 (OK) and the list of ProjectLiteDTO
*/

@RestController
@RequestMapping("/api")
class ProjectLiteResource(
@Autowired private val projectService: ProjectService
) {

@GetMapping("lite-projects")
@Timed
fun getProjectsInfo(
@PageableDefault(size = Int.MAX_VALUE) pageable: Pageable,
): ResponseEntity<*> {
log.debug("REST request to get Projects for public endpoint")
val page = projectService.findProjectsForPublicEndpoint(pageable)
val headers = PaginationUtil
.generatePaginationHttpHeaders(page, "/api/lite-projects")
return ResponseEntity(page.content, headers, HttpStatus.OK)
}

companion object {
private val log = LoggerFactory.getLogger(ProjectLiteResource::class.java)
}
}

0 comments on commit 8b05aeb

Please sign in to comment.