Skip to content

Commit

Permalink
refactor: remove methods that gets project and members by UUID (#2346)
Browse files Browse the repository at this point in the history
  • Loading branch information
mpro7 committed Dec 19, 2022
1 parent c3f96a9 commit 2c8da6c
Show file tree
Hide file tree
Showing 6 changed files with 2 additions and 134 deletions.
Expand Up @@ -6,7 +6,6 @@
package org.knora.webapi.store.cache.impl

import dsp.errors.BadRequestException
import dsp.valueobjects.V2UuidValidation
import org.knora.webapi.messages.StringFormatter
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectADM
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM._
Expand Down Expand Up @@ -106,17 +105,6 @@ object CacheInMemImplZSpec extends ZIOSpecDefault {
.getOrElseWith(e => throw BadRequestException(e.head.getMessage))
)
} yield assert(retrievedProject)(equalTo(Some(project)))
),
test("successfully store a project and retrieve by UUID")(
for {
_ <- CacheService.putProjectADM(project)
retrievedProject <-
CacheService.getProjectADM(
UuidIdentifier
.fromString(V2UuidValidation.getUuidFromIri(project.id))
.getOrElseWith(e => throw BadRequestException(e.head.getMessage))
)
} yield assert(retrievedProject)(equalTo(Some(project)))
)
)

Expand Down
Expand Up @@ -10,7 +10,6 @@ import zio.test.Assertion._
import zio.test._

import dsp.errors.BadRequestException
import dsp.valueobjects.V2UuidValidation
import org.knora.webapi.messages.StringFormatter
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectADM
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM._
Expand Down Expand Up @@ -98,17 +97,6 @@ object CacheRedisImplZSpec extends ZIOSpecDefault {
.getOrElseWith(e => throw BadRequestException(e.head.getMessage))
)
} yield assert(retrievedProject)(equalTo(Some(project)))
),
test("successfully store a project and retrieve by UUID")(
for {
_ <- CacheService.putProjectADM(project)
retrievedProject <-
CacheService.getProjectADM(
UuidIdentifier
.fromString(V2UuidValidation.getUuidFromIri(project.id))
.getOrElseWith(e => throw BadRequestException(e.head.getMessage))
)
} yield assert(retrievedProject)(equalTo(Some(project)))
)
)
}
Expand Up @@ -20,7 +20,6 @@ import dsp.errors.BadRequestException
import dsp.errors.OntologyConstraintException
import dsp.errors.ValidationException
import dsp.valueobjects.Iri.ProjectIri
import dsp.valueobjects.Iri._
import dsp.valueobjects.Project._
import dsp.valueobjects.V2
import org.knora.webapi.IRI
Expand Down Expand Up @@ -511,7 +510,7 @@ case class ProjectADM(
}

/**
* Represents the project's identifier, which can be an IRI, shortcode, shortname or UUID.
* Represents the project's identifier, which can be an IRI, shortcode or shortname.
*/
sealed trait ProjectIdentifierADM { self =>
def asIriIdentifierOption: Option[String] =
Expand All @@ -531,12 +530,6 @@ sealed trait ProjectIdentifierADM { self =>
case ShortnameIdentifier(value) => Some(value.value)
case _ => None
}

def asUuidIdentifierOption: Option[String] =
self match {
case UuidIdentifier(value) => Some(UuidIdentifier.makeProjectIri(value.value))
case _ => None
}
}

object ProjectIdentifierADM {
Expand Down Expand Up @@ -580,33 +573,17 @@ object ProjectIdentifierADM {
}
}

/**
* Represents [[UuidIdentifier]] identifier.
*
* @param value that constructs the identifier in the type of [[Base64Uuid]] value object.
*/
final case class UuidIdentifier(value: Base64Uuid) extends ProjectIdentifierADM
object UuidIdentifier {
def fromString(value: String): Validation[ValidationException, UuidIdentifier] =
Base64Uuid.make(value).map {
UuidIdentifier(_)
}

def makeProjectIri(uuid: String) = s"http://rdfh.ch/projects/${uuid}"
}

/**
* Gets desired Project identifier value.
*
* @param identifier either IRI, Shortname, Shortcode or UUID of the project.
* @param identifier either IRI, Shortname or Shortcode of the project.
* @return identifier's value as [[String]]
*/
def getId(identifier: ProjectIdentifierADM): String =
identifier match {
case IriIdentifier(value) => value.value
case ShortnameIdentifier(value) => value.value
case ShortcodeIdentifier(value) => value.value
case UuidIdentifier(value) => UuidIdentifier.makeProjectIri(value.value)
}
}

Expand Down
Expand Up @@ -52,13 +52,11 @@ class ProjectsRouteADM(routeData: KnoraRouteData)
getKeywords() ~
getProjectKeywords() ~
getProjectByIri() ~
getProjectByUuid() ~
getProjectByShortname() ~
getProjectByShortcode() ~
changeProject() ~
deleteProject() ~
getProjectMembersByIri() ~
getProjectMembersByUuid() ~
getProjectMembersByShortname() ~
getProjectMembersByShortcode() ~
getProjectAdminMembersByIri() ~
Expand Down Expand Up @@ -212,34 +210,6 @@ class ProjectsRouteADM(routeData: KnoraRouteData)
}
}

/**
* Returns a single project identified through the Base64 encoded UUID.
*/
private def getProjectByUuid(): Route =
path(projectsBasePath / "uuid" / Segment) { value =>
get { requestContext =>
val requestMessage: Future[ProjectGetRequestADM] = for {
requestingUser <- getUserADM(
requestContext = requestContext,
routeData.appConfig
)

} yield ProjectGetRequestADM(
identifier = UuidIdentifier
.fromString(value)
.getOrElseWith(e => throw BadRequestException(e.head.getMessage)),
requestingUser = requestingUser
)

RouteUtilADM.runJsonRoute(
requestMessageF = requestMessage,
requestContext = requestContext,
appActor = appActor,
log = log
)
}
}

/**
* Returns a single project identified through the shortname.
*/
Expand Down Expand Up @@ -388,34 +358,6 @@ class ProjectsRouteADM(routeData: KnoraRouteData)
}
}

/**
* Returns all members of a project identified through the Base64 encoded UUID.
*/
private def getProjectMembersByUuid(): Route =
path(projectsBasePath / "uuid" / Segment / "members") { value =>
get { requestContext =>
val requestMessage: Future[ProjectMembersGetRequestADM] = for {
requestingUser <- getUserADM(
requestContext = requestContext,
routeData.appConfig
)

} yield ProjectMembersGetRequestADM(
identifier = UuidIdentifier
.fromString(value)
.getOrElseWith(e => throw BadRequestException(e.head.getMessage)),
requestingUser = requestingUser
)

RouteUtilADM.runJsonRoute(
requestMessageF = requestMessage,
requestContext = requestContext,
appActor = appActor,
log = log
)
}
}

/**
* Returns all members of a project identified through the shortname.
*/
Expand Down
Expand Up @@ -125,7 +125,6 @@ case class CacheServiceInMemImpl(
case IriIdentifier(value) => getProjectByIri(value)
case ShortcodeIdentifier(value) => getProjectByShortcode(value)
case ShortnameIdentifier(value) => getProjectByShortname(value)
case UuidIdentifier(value) => getProjectByUuid(value)
}).tap(_ => ZIO.logDebug(s"Retrieved ProjectADM from Cache: $identifier"))

/**
Expand Down Expand Up @@ -160,15 +159,6 @@ case class CacheServiceInMemImpl(
project <- projects.get(iri).some
} yield project).commit.unsome

/**
* Retrieves the project by the UUID.
*
* @param uuid the project's UUID
* @return an optional [[ProjectADM]].
*/
def getProjectByUuid(uuid: Iri.Base64Uuid) =
projects.get(UuidIdentifier.makeProjectIri(uuid.value)).commit

/**
* Store string or byte array value under key.
*
Expand Down
Expand Up @@ -118,7 +118,6 @@ case class CacheServiceRedisImpl(pool: JedisPool) extends CacheService {
case IriIdentifier(value) => getProjectByIri(value)
case ShortcodeIdentifier(value) => getProjectByShortcode(value)
case ShortnameIdentifier(value) => getProjectByShortname(value)
case UuidIdentifier(value) => getProjectByUuid(value)
}

/**
Expand Down Expand Up @@ -171,22 +170,6 @@ case class CacheServiceRedisImpl(pool: JedisPool) extends CacheService {
}
} yield project)

/**
* Retrieves the project by its UUID.
*
* @param id the project's UUID
* @return an optional [[ProjectADM]].
*/
def getProjectByUuid(uuid: Iri.Base64Uuid): Task[Option[ProjectADM]] =
(for {
bytes <- getBytesValue(UuidIdentifier.makeProjectIri(uuid.value))
project <-
bytes match {
case Some(value) => CacheSerialization.deserialize[ProjectADM](value)
case None => ZIO.succeed(None)
}
} yield project)

/**
* Store string value under key.
*
Expand Down

0 comments on commit 2c8da6c

Please sign in to comment.