Skip to content

Commit

Permalink
refactor: Use RestrictedViewSize in ProjectSetRestrictedViewSizeReque…
Browse files Browse the repository at this point in the history
…st (#3001)
  • Loading branch information
seakayone committed Jan 23, 2024
1 parent ecf9c0a commit 239c4fc
Show file tree
Hide file tree
Showing 12 changed files with 31 additions and 33 deletions.
Expand Up @@ -24,7 +24,6 @@ import dsp.errors.BadRequestException
import dsp.errors.OntologyConstraintException
import dsp.errors.ValidationException
import dsp.valueobjects.Iri
import dsp.valueobjects.RestrictedViewSize
import dsp.valueobjects.V2
import org.knora.webapi.IRI
import org.knora.webapi.core.RelayedMessage
Expand All @@ -33,11 +32,12 @@ import org.knora.webapi.messages.StringFormatter
import org.knora.webapi.messages.admin.responder.AdminKnoraResponseADM
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM.*
import org.knora.webapi.messages.store.triplestoremessages.TriplestoreJsonProtocol
import org.knora.webapi.slice.admin.api.Codecs.ZioJsonCodec.restrictedViewSize
import org.knora.webapi.slice.admin.api.model.ProjectsEndpointsRequests.ProjectCreateRequest
import org.knora.webapi.slice.admin.api.model.ProjectsEndpointsRequests.ProjectUpdateRequest
import org.knora.webapi.slice.admin.domain.model.KnoraProject.*
import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize
import org.knora.webapi.slice.admin.domain.model.User

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Messages

Expand Down
Expand Up @@ -12,7 +12,6 @@ import java.util.UUID

import dsp.errors.*
import dsp.valueobjects.Iri
import dsp.valueobjects.RestrictedViewSize
import dsp.valueobjects.V2
import org.knora.webapi.*
import org.knora.webapi.config.AppConfig
Expand All @@ -39,6 +38,7 @@ import org.knora.webapi.slice.admin.AdminConstants
import org.knora.webapi.slice.admin.api.model.ProjectsEndpointsRequests.ProjectCreateRequest
import org.knora.webapi.slice.admin.api.model.ProjectsEndpointsRequests.ProjectUpdateRequest
import org.knora.webapi.slice.admin.domain.model.KnoraProject.ProjectIri
import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize
import org.knora.webapi.slice.admin.domain.model.User
import org.knora.webapi.slice.admin.domain.model.UserIri
import org.knora.webapi.slice.admin.domain.service.ProjectADMService
Expand Down
Expand Up @@ -12,6 +12,7 @@ import zio.json.JsonCodec
import dsp.valueobjects.V2
import org.knora.webapi.slice.admin.api.model.MaintenanceRequests.AssetId
import org.knora.webapi.slice.admin.domain.model.KnoraProject.*
import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize
import org.knora.webapi.slice.admin.domain.model.UserIri
import org.knora.webapi.slice.common.Value.BooleanValue
import org.knora.webapi.slice.common.Value.StringValue
Expand Down Expand Up @@ -65,6 +66,7 @@ object Codecs {
implicit val logo: StringCodec[Logo] = stringCodec(Logo.from)
implicit val longname: StringCodec[Longname] = stringCodec(Longname.from)
implicit val projectIri: StringCodec[ProjectIri] = stringCodec(ProjectIri.from)
implicit val restrictedViewSize: JsonCodec[RestrictedViewSize] = stringCodec(RestrictedViewSize.from)
implicit val selfJoin: StringCodec[SelfJoin] = booleanCodec(SelfJoin.from)
implicit val shortcode: StringCodec[Shortcode] = stringCodec(Shortcode.from)
implicit val shortname: StringCodec[Shortname] = stringCodec(Shortname.from)
Expand Down
Expand Up @@ -10,6 +10,7 @@ import zio.json.JsonCodec

import org.knora.webapi.slice.admin.api.Codecs.ZioJsonCodec.*
import org.knora.webapi.slice.admin.domain.model.KnoraProject.*
import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize

object ProjectsEndpointsRequests {

Expand Down Expand Up @@ -41,7 +42,7 @@ object ProjectsEndpointsRequests {
implicit val codec: JsonCodec[ProjectUpdateRequest] = DeriveJsonCodec.gen[ProjectUpdateRequest]
}

final case class ProjectSetRestrictedViewSizeRequest(size: String)
final case class ProjectSetRestrictedViewSizeRequest(size: RestrictedViewSize)
object ProjectSetRestrictedViewSizeRequest {
implicit val codec: JsonCodec[ProjectSetRestrictedViewSizeRequest] =
DeriveJsonCodec.gen[ProjectSetRestrictedViewSizeRequest]
Expand Down
Expand Up @@ -10,7 +10,6 @@ import zio.macros.accessible

import dsp.errors.BadRequestException
import dsp.errors.NotFoundException
import dsp.valueobjects.RestrictedViewSize
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM.*
import org.knora.webapi.messages.admin.responder.projectsmessages.*
import org.knora.webapi.responders.admin.ProjectsResponderADM
Expand Down Expand Up @@ -276,14 +275,13 @@ final case class ProjectsADMRestServiceLive(
override def updateProjectRestrictedViewSettings(
id: ProjectIdentifierADM,
user: User,
setSizeReq: ProjectSetRestrictedViewSizeRequest
req: ProjectSetRestrictedViewSizeRequest
): Task[ProjectRestrictedViewSizeResponseADM] =
for {
size <- ZIO.fromEither(RestrictedViewSize.make(setSizeReq.size)).mapError(BadRequestException(_))
project <- projectRepo.findById(id).someOrFail(NotFoundException(s"Project '${getId(id)}' not found."))
_ <- permissionService.ensureSystemAdminOrProjectAdmin(user, project)
_ <- projectRepo.setProjectRestrictedViewSize(project, size)
} yield ProjectRestrictedViewSizeResponseADM(size)
_ <- projectRepo.setProjectRestrictedViewSize(project, req.size)
} yield ProjectRestrictedViewSizeResponseADM(req.size)

override def exportProject(shortcodeStr: String, user: User): Task[Unit] =
convertStringToShortcodeId(shortcodeStr).flatMap(exportProject(_, user))
Expand Down
Expand Up @@ -3,19 +3,21 @@
* SPDX-License-Identifier: Apache-2.0
*/

package dsp.valueobjects

import zio.json.JsonCodec
package org.knora.webapi.slice.admin.domain.model

import scala.util.matching.Regex

import org.knora.webapi.slice.common.StringValueCompanion
import org.knora.webapi.slice.common.Value.StringValue

/**
* RestrictedViewSize value object.
*/
sealed abstract case class RestrictedViewSize private (value: String)
case class RestrictedViewSize private (value: String) extends StringValue

object RestrictedViewSize {
def make(value: String): Either[String, RestrictedViewSize] = {
object RestrictedViewSize extends StringValueCompanion[RestrictedViewSize] {
def default: RestrictedViewSize = new RestrictedViewSize("!512,512") {}
def from(value: String): Either[String, RestrictedViewSize] = {
val trimmed: String = value.trim
// matches strings "pct:1-100"
val percentagePattern: Regex = "pct:[1-9][0-9]?0?$".r
Expand All @@ -32,13 +34,6 @@ object RestrictedViewSize {
else Left(ErrorMessages.RestrictedViewSizeInvalid(value))
}

def unsafeFrom(value: String): RestrictedViewSize =
make(value).fold(s => throw new IllegalArgumentException(s), identity)

def default: RestrictedViewSize = new RestrictedViewSize("!512,512") {}

implicit val codec: JsonCodec[RestrictedViewSize] =
JsonCodec[String].transformOrFail(RestrictedViewSize.make, _.value)
}

object ErrorMessages {
Expand Down
Expand Up @@ -6,11 +6,11 @@
package org.knora.webapi.slice.admin.domain.service
import zio.Task

import dsp.valueobjects.RestrictedViewSize
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM
import org.knora.webapi.slice.admin.domain.model.KnoraProject
import org.knora.webapi.slice.admin.domain.model.KnoraProject.ProjectIri
import org.knora.webapi.slice.admin.domain.model.KnoraProject.Shortcode
import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize
import org.knora.webapi.slice.common.repo.service.Repository

trait KnoraProjectRepo extends Repository[KnoraProject, ProjectIri] {
Expand Down
Expand Up @@ -7,14 +7,14 @@ package org.knora.webapi.slice.admin.domain.service

import zio.*

import dsp.valueobjects.RestrictedViewSize
import org.knora.webapi.messages.OntologyConstants
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectADM
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectKeywordsGetResponseADM
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectsKeywordsGetResponseADM
import org.knora.webapi.slice.admin.domain.model.KnoraProject
import org.knora.webapi.slice.admin.domain.model.KnoraProject.*
import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize
import org.knora.webapi.slice.ontology.domain.service.OntologyRepo
import org.knora.webapi.slice.resourceinfo.domain.InternalIri

Expand Down
Expand Up @@ -8,7 +8,6 @@ package org.knora.webapi.slice.admin.repo.service
import play.twirl.api.TxtFormat
import zio.*

import dsp.valueobjects.RestrictedViewSize
import dsp.valueobjects.V2
import org.knora.webapi.messages.OntologyConstants.KnoraAdmin.*
import org.knora.webapi.messages.StringFormatter
Expand All @@ -21,6 +20,7 @@ import org.knora.webapi.messages.store.triplestoremessages.SubjectV2
import org.knora.webapi.messages.twirl.queries.sparql
import org.knora.webapi.slice.admin.domain.model.KnoraProject
import org.knora.webapi.slice.admin.domain.model.KnoraProject.*
import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize
import org.knora.webapi.slice.admin.domain.service.KnoraProjectRepo
import org.knora.webapi.slice.common.repo.service.PredicateObjectMapper
import org.knora.webapi.slice.resourceinfo.domain.InternalIri
Expand Down
Expand Up @@ -4,7 +4,7 @@
*@

@import org.knora.webapi.IRI
@import dsp.valueobjects.RestrictedViewSize
@import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize

@*
* Sets project restricted view settings.
Expand Down
Expand Up @@ -8,8 +8,10 @@ package dsp.valueobjects
import zio.Scope
import zio.test.*

import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize

/**
* This spec is used to test the [[dsp.valueobjects.RestrictedViewSize]] value object creation.
* This spec is used to test the [[RestrictedViewSize]] value object creation.
*/
object RestrictedViewSizeSpec extends ZIOSpecDefault {

Expand All @@ -18,31 +20,31 @@ object RestrictedViewSizeSpec extends ZIOSpecDefault {
val gen = Gen.int(1, 100)
check(gen) { int =>
val param = s"pct:$int"
assertTrue(RestrictedViewSize.make(param).map(_.value) == Right(param))
assertTrue(RestrictedViewSize.from(param).map(_.value) == Right(param))
}
},
test("should succeed on passing the same x y dimensions") {
val gen = Gen.int(1, 1000)
check(gen) { integer =>
val param = s"!$integer,$integer"
assertTrue(RestrictedViewSize.make(param).map(_.value) == Right(param))
assertTrue(RestrictedViewSize.from(param).map(_.value) == Right(param))
}
},
test("should fail on passing negative x y dimensions") {
val gen = Gen.int(-1000, -1)
check(gen) { integer =>
val param = s"!$integer,$integer"
assertTrue(RestrictedViewSize.make(param).map(_.value) == Left(ErrorMessages.RestrictedViewSizeInvalid(param)))
assertTrue(RestrictedViewSize.from(param).map(_.value) == Left(s"Invalid RestrictedViewSize: $param"))
}
},
test("should fail on passing incorrect values") {
val gen = Gen.fromIterable(Seq("!512,100", "pct:-1", "pct:0", "pct:101"))
check(gen) { param =>
assertTrue(RestrictedViewSize.make(param) == Left(ErrorMessages.RestrictedViewSizeInvalid(param)))
assertTrue(RestrictedViewSize.from(param) == Left(s"Invalid RestrictedViewSize: $param"))
}
},
test("should fail on passing empty value") {
assertTrue(RestrictedViewSize.make("") == Left(ErrorMessages.RestrictedViewSizeMissing))
assertTrue(RestrictedViewSize.from("") == Left("RestrictedViewSize cannot be empty."))
}
)
}
Expand Up @@ -10,13 +10,13 @@ import zio.Task
import zio.ULayer
import zio.ZLayer

import dsp.valueobjects.RestrictedViewSize
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM.IriIdentifier
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM.ShortcodeIdentifier
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectIdentifierADM.ShortnameIdentifier
import org.knora.webapi.slice.admin.domain.model.KnoraProject
import org.knora.webapi.slice.admin.domain.model.KnoraProject.ProjectIri
import org.knora.webapi.slice.admin.domain.model.RestrictedViewSize
import org.knora.webapi.slice.admin.domain.service.KnoraProjectRepo
import org.knora.webapi.slice.common.repo.AbstractInMemoryCrudRepository

Expand Down

0 comments on commit 239c4fc

Please sign in to comment.