Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(projectsADM): add possibility to get project and members by UUID (DEV-1408) #2272

Merged
merged 37 commits into from Nov 18, 2022
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
58d2e61
change getProjectByIri methods to work with UUID too
mpro7 Oct 31, 2022
eadef5a
add tests
mpro7 Nov 1, 2022
0dee8eb
fix tests
mpro7 Nov 1, 2022
6c73a88
fix error message
mpro7 Nov 1, 2022
adcaeaf
final fixes
mpro7 Nov 2, 2022
07ba246
update docs
mpro7 Nov 2, 2022
f3a35b9
one method per indentifier + docs
mpro7 Nov 2, 2022
486778f
refactor ProjectIdentifierADM
mpro7 Nov 4, 2022
b1e0ff5
adjust ProjectRouteADM
mpro7 Nov 4, 2022
1c5f567
fix other places where ProjectIdentifierADM is used
mpro7 Nov 4, 2022
80e0d71
Merge branch 'main' into DEV-1408-dsp-api-make-possible-to-get-projec…
mpro7 Nov 7, 2022
295a8df
fix tests
mpro7 Nov 7, 2022
24a41ec
fix formatting
mpro7 Nov 7, 2022
7c3815b
refactor + cleanup
mpro7 Nov 7, 2022
bab628d
Merge branch 'main' into DEV-1408-dsp-api-make-possible-to-get-projec…
mpro7 Nov 8, 2022
e1345c0
fix UpgradePluginPR2255
mpro7 Nov 8, 2022
533bc95
remove duplicated test
mpro7 Nov 9, 2022
76cc1b4
update Lumieres project IRI
mpro7 Nov 9, 2022
adc3844
update gravsearch test project IRI
mpro7 Nov 9, 2022
faa52ef
update v1 test data
mpro7 Nov 9, 2022
df03fdc
add UUID value object
mpro7 Nov 9, 2022
773d1d6
add found only in repo iri map
mpro7 Nov 9, 2022
e7571b4
move value object check to ProjectIdentifierADM
mpro7 Nov 10, 2022
c57ecd9
Merge branch 'main' into DEV-1408-dsp-api-make-possible-to-get-projec…
mpro7 Nov 10, 2022
1cc17ba
fix QueryTraverser
mpro7 Nov 11, 2022
79b0e60
improve uuid validation
mpro7 Nov 11, 2022
508101c
refactor ProjectIdentifierADM 2.0
mpro7 Nov 15, 2022
9562f54
improved naming
mpro7 Nov 15, 2022
2f97aae
fix cache
mpro7 Nov 15, 2022
8d09cd6
fix tests
mpro7 Nov 15, 2022
ca8bbbf
fix formatting
mpro7 Nov 15, 2022
de980cb
Merge branch 'main' into DEV-1408-dsp-api-make-possible-to-get-projec…
mpro7 Nov 16, 2022
12e1abd
move accessors into trait
mpro7 Nov 16, 2022
2967d9f
improve Base64Uuid value obbject + add tests
mpro7 Nov 16, 2022
ee8b604
improve cahce + add tests
mpro7 Nov 16, 2022
d1125ab
add missing tests + cleanup
mpro7 Nov 16, 2022
68c9aba
review changes
mpro7 Nov 17, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/03-apis/api-admin/projects.md
Expand Up @@ -13,7 +13,7 @@

- `POST: /admin/projects` : create a new project

- `GET: /admin/projects/[iri | shortname | shortcode]/<identifier>` : returns a single project identified either through iri, shortname, or shortcode
- `GET: /admin/projects/[iri | shortname | shortcode | UUID]/<identifier>` : returns a single project identified either through iri, shortname, shortcode or UUID
mpro7 marked this conversation as resolved.
Show resolved Hide resolved

- `PUT: /admin/projects/iri/<identifier>` : update a project identified by iri

Expand All @@ -23,7 +23,7 @@

**Project Member Operations:**

- `GET: /admin/projects/[iri | shortname | shortcode]/<identifier>/members` : returns all members part of a project identified through iri, shortname or shortcode
- `GET: /admin/projects/[iri | shortname | shortcode | UUID]/<identifier>/members` : returns all members part of a project identified through iri, shortname, shortcode or UUID

**Project Admin Member Operations:**

Expand Down
Expand Up @@ -49,12 +49,14 @@ class ProjectsRouteADM(routeData: KnoraRouteData)
addProject() ~
getKeywords() ~
getProjectKeywords() ~
getProjectByIri() ~
getProjectByIriOrUuid("iri") ~
getProjectByIriOrUuid("uuid") ~
getProjectByShortname() ~
getProjectByShortcode() ~
changeProject() ~
deleteProject() ~
getProjectMembersByIri() ~
getProjectMembersByIriOrUuid("iri") ~
getProjectMembersByIriOrUuid("uuid") ~
getProjectMembersByShortname() ~
getProjectMembersByShortcode() ~
getProjectAdminMembersByIri() ~
Expand Down Expand Up @@ -173,18 +175,23 @@ class ProjectsRouteADM(routeData: KnoraRouteData)
}

/**
* returns a single project identified through iri
* Returns a single project identified through IRI or UUID
*/
private def getProjectByIri(): Route =
path(projectsBasePath / "iri" / Segment) { value =>
private def getProjectByIriOrUuid(routeResolver: String): Route =
mpro7 marked this conversation as resolved.
Show resolved Hide resolved
path(projectsBasePath / routeResolver / Segment) { value =>
val iri: String = if (routeResolver == "uuid") s"http://rdfh.ch/projects/$value" else value

get { requestContext =>
val requestMessage: Future[ProjectGetRequestADM] = for {
requestingUser <- getUserADM(
requestContext = requestContext,
routeData.appConfig
)
checkedProjectIri =
stringFormatter.validateAndEscapeProjectIri(value, throw BadRequestException(s"Invalid project IRI $value"))
stringFormatter.validateAndEscapeProjectIri(
iri,
throw BadRequestException(s"Invalid project ${routeResolver.toUpperCase}: $value")
)

} yield ProjectGetRequestADM(
identifier = ProjectIdentifierADM(maybeIri = Some(checkedProjectIri)),
Expand Down Expand Up @@ -325,18 +332,23 @@ class ProjectsRouteADM(routeData: KnoraRouteData)
}

/**
* returns all members part of a project identified through iri
* Returns all members part of a project identified through IRI or UUID
*/
private def getProjectMembersByIri(): Route =
path(projectsBasePath / "iri" / Segment / "members") { value =>
private def getProjectMembersByIriOrUuid(routeResolver: String): Route =
path(projectsBasePath / routeResolver / Segment / "members") { value =>
val iri: String = if (routeResolver == "uuid") s"http://rdfh.ch/projects/$value" else value

get { requestContext =>
val requestMessage: Future[ProjectMembersGetRequestADM] = for {
requestingUser <- getUserADM(
requestContext = requestContext,
routeData.appConfig
)
checkedProjectIri =
stringFormatter.validateAndEscapeProjectIri(value, throw BadRequestException(s"Invalid project IRI $value"))
stringFormatter.validateAndEscapeProjectIri(
iri,
throw BadRequestException(s"Invalid project ${routeResolver.toUpperCase}: $value")
)

} yield ProjectMembersGetRequestADM(
identifier = ProjectIdentifierADM(maybeIri = Some(checkedProjectIri)),
Expand Down
Expand Up @@ -53,7 +53,6 @@ class ProjectsResponderADMSpec extends CoreSpec with ImplicitSender {
}

"return information about a project identified by IRI" in {
/* Incunabula project */
appActor ! ProjectGetRequestADM(
identifier = ProjectIdentifierADM(maybeIri = Some(SharedTestDataADM.incunabulaProject.id)),
requestingUser = SharedTestDataADM.rootUser
Expand Down Expand Up @@ -449,7 +448,6 @@ class ProjectsResponderADMSpec extends CoreSpec with ImplicitSender {
*/

"used to query members" should {

"return all members of a project identified by IRI" in {
appActor ! ProjectMembersGetRequestADM(
ProjectIdentifierADM(maybeIri = Some(SharedTestDataADM.imagesProject.id)),
Expand Down
Expand Up @@ -202,7 +202,8 @@ object SharedTestDataADM {
/**
* **********************************
*/
val IMAGES_PROJECT_IRI = "http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA"
val imagesProjectUuid = "MTvoB0EJRrqovzRkWXqfkA"
val IMAGES_PROJECT_IRI = s"http://rdfh.ch/projects/$imagesProjectUuid"
mpro7 marked this conversation as resolved.
Show resolved Hide resolved

/* represents 'user01' as found in admin-data.ttl */
def imagesUser01: UserADM =
Expand Down