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

refactor(exceptions): Create sbt project "shared" and move exceptions (DEV-990) #2075

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 5 additions & 5 deletions build.sbt
Expand Up @@ -201,7 +201,7 @@ lazy val webapi: Project = Project(id = "webapi", base = file("webapi"))
),
buildInfoPackage := "org.knora.webapi.http.version"
)
.dependsOn(valueObjects)
.dependsOn(shared)

lazy val webapiJavaRunOptions = Seq(
// "-showversion",
Expand Down Expand Up @@ -284,10 +284,10 @@ lazy val schemaRepoSearchService = project
)
.dependsOn(schemaRepo)

lazy val valueObjects = project
.in(file("dsp-value-objects"))
lazy val shared = project
.in(file("dsp-shared"))
.settings(
name := "valueObjects",
libraryDependencies ++= Dependencies.valueObjectsLibraryDependencies,
name := "shared",
libraryDependencies ++= Dependencies.sharedLibraryDependencies,
testFrameworks := Seq(new TestFramework("zio.test.sbt.ZTestFramework"))
)
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package org.knora.webapi.exceptions
package dsp.errors

import akka.event.LoggingAdapter
import org.apache.commons.lang3.SerializationException
Expand Down
Expand Up @@ -6,6 +6,7 @@
package dsp.valueobjects

import zio.prelude.Validation
import dsp.errors.BadRequestException

object Group {

Expand All @@ -16,12 +17,12 @@ object Group {
object GroupName { self =>
def make(value: String): Validation[Throwable, GroupName] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(GroupErrorMessages.GroupNameMissing))
Validation.fail(BadRequestException(GroupErrorMessages.GroupNameMissing))
} else {
val validatedValue = Validation(
V2IriValidation.toSparqlEncodedString(
value,
throw V2.BadRequestException(GroupErrorMessages.GroupNameInvalid)
throw BadRequestException(GroupErrorMessages.GroupNameInvalid)
)
)

Expand All @@ -42,13 +43,13 @@ object Group {
object GroupDescriptions { self =>
def make(value: Seq[V2.StringLiteralV2]): Validation[Throwable, GroupDescriptions] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(GroupErrorMessages.GroupDescriptionsMissing))
Validation.fail(BadRequestException(GroupErrorMessages.GroupDescriptionsMissing))
} else {
val validatedDescriptions = Validation(value.map { description =>
val validatedDescription =
V2IriValidation.toSparqlEncodedString(
description.value,
throw V2.BadRequestException(GroupErrorMessages.GroupDescriptionsInvalid)
throw BadRequestException(GroupErrorMessages.GroupDescriptionsInvalid)
)
V2.StringLiteralV2(value = validatedDescription, language = description.language)
})
Expand Down
Expand Up @@ -6,6 +6,7 @@
package dsp.valueobjects

import zio.prelude.Validation
import dsp.errors.BadRequestException

sealed trait Iri
object Iri {
Expand All @@ -17,17 +18,17 @@ object Iri {
object GroupIri { self =>
def make(value: String): Validation[Throwable, GroupIri] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(IriErrorMessages.GroupIriMissing))
Validation.fail(BadRequestException(IriErrorMessages.GroupIriMissing))
} else {
val isUuid: Boolean = V2UuidValidation.hasUuidLength(value.split("/").last)

if (!V2IriValidation.isKnoraGroupIriStr(value)) {
Validation.fail(V2.BadRequestException(IriErrorMessages.GroupIriInvalid))
Validation.fail(BadRequestException(IriErrorMessages.GroupIriInvalid))
} else if (isUuid && !V2UuidValidation.isUuidVersion4Or5(value)) {
Validation.fail(V2.BadRequestException(IriErrorMessages.UuidVersionInvalid))
Validation.fail(BadRequestException(IriErrorMessages.UuidVersionInvalid))
} else {
val validatedValue = Validation(
V2IriValidation.validateAndEscapeIri(value, throw V2.BadRequestException(IriErrorMessages.GroupIriInvalid))
V2IriValidation.validateAndEscapeIri(value, throw BadRequestException(IriErrorMessages.GroupIriInvalid))
)

validatedValue.map(new GroupIri(_) {})
Expand All @@ -48,19 +49,19 @@ object Iri {
object ListIri { self =>
def make(value: String): Validation[Throwable, ListIri] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(IriErrorMessages.ListIriMissing))
Validation.fail(BadRequestException(IriErrorMessages.ListIriMissing))
} else {
val isUuid: Boolean = V2UuidValidation.hasUuidLength(value.split("/").last)

if (!V2IriValidation.isKnoraListIriStr(value)) {
Validation.fail(V2.BadRequestException(IriErrorMessages.ListIriInvalid))
Validation.fail(BadRequestException(IriErrorMessages.ListIriInvalid))
} else if (isUuid && !V2UuidValidation.isUuidVersion4Or5(value)) {
Validation.fail(V2.BadRequestException(IriErrorMessages.UuidVersionInvalid))
Validation.fail(BadRequestException(IriErrorMessages.UuidVersionInvalid))
} else {
val validatedValue = Validation(
V2IriValidation.validateAndEscapeIri(
value,
throw V2.BadRequestException(IriErrorMessages.ListIriInvalid)
throw BadRequestException(IriErrorMessages.ListIriInvalid)
)
)

Expand All @@ -82,19 +83,19 @@ object Iri {
object ProjectIri { self =>
def make(value: String): Validation[Throwable, ProjectIri] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(IriErrorMessages.ProjectIriMissing))
Validation.fail(BadRequestException(IriErrorMessages.ProjectIriMissing))
} else {
val isUuid: Boolean = V2UuidValidation.hasUuidLength(value.split("/").last)

if (!V2IriValidation.isKnoraProjectIriStr(value)) {
Validation.fail(V2.BadRequestException(IriErrorMessages.ProjectIriInvalid))
Validation.fail(BadRequestException(IriErrorMessages.ProjectIriInvalid))
} else if (isUuid && !V2UuidValidation.isUuidVersion4Or5(value)) {
Validation.fail(V2.BadRequestException(IriErrorMessages.UuidVersionInvalid))
Validation.fail(BadRequestException(IriErrorMessages.UuidVersionInvalid))
} else {
val validatedValue = Validation(
V2IriValidation.validateAndEscapeProjectIri(
value,
throw V2.BadRequestException(IriErrorMessages.ProjectIriInvalid)
throw BadRequestException(IriErrorMessages.ProjectIriInvalid)
)
)

Expand All @@ -116,19 +117,19 @@ object Iri {
object UserIri { self =>
def make(value: String): Validation[Throwable, UserIri] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(IriErrorMessages.UserIriMissing))
Validation.fail(BadRequestException(IriErrorMessages.UserIriMissing))
} else {
val isUuid: Boolean = V2UuidValidation.hasUuidLength(value.split("/").last)

if (!V2IriValidation.isKnoraUserIriStr(value)) {
Validation.fail(V2.BadRequestException(IriErrorMessages.UserIriInvalid))
Validation.fail(BadRequestException(IriErrorMessages.UserIriInvalid))
} else if (isUuid && !V2UuidValidation.isUuidVersion4Or5(value)) {
Validation.fail(V2.BadRequestException(IriErrorMessages.UuidVersionInvalid))
Validation.fail(BadRequestException(IriErrorMessages.UuidVersionInvalid))
} else {
val validatedValue = Validation(
V2IriValidation.validateAndEscapeUserIri(
value,
throw V2.BadRequestException(IriErrorMessages.UserIriInvalid)
throw BadRequestException(IriErrorMessages.UserIriInvalid)
)
)

Expand Down
Expand Up @@ -6,6 +6,7 @@
package dsp.valueobjects

import zio.prelude.Validation
import dsp.errors.BadRequestException

object List {

Expand All @@ -16,10 +17,10 @@ object List {
object ListName { self =>
def make(value: String): Validation[Throwable, ListName] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ListErrorMessages.ListNameMissing))
Validation.fail(BadRequestException(ListErrorMessages.ListNameMissing))
} else {
val validatedValue = Validation(
V2IriValidation.toSparqlEncodedString(value, throw V2.BadRequestException(ListErrorMessages.ListNameInvalid))
V2IriValidation.toSparqlEncodedString(value, throw BadRequestException(ListErrorMessages.ListNameInvalid))
)

validatedValue.map(new ListName(_) {})
Expand All @@ -39,7 +40,7 @@ object List {
object Position { self =>
def make(value: Int): Validation[Throwable, Position] =
if (value < -1) {
Validation.fail(V2.BadRequestException(ListErrorMessages.InvalidPosition))
Validation.fail(BadRequestException(ListErrorMessages.InvalidPosition))
} else {
Validation.succeed(new Position(value) {})
}
Expand All @@ -58,13 +59,13 @@ object List {
object Labels { self =>
def make(value: Seq[V2.StringLiteralV2]): Validation[Throwable, Labels] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ListErrorMessages.LabelsMissing))
Validation.fail(BadRequestException(ListErrorMessages.LabelsMissing))
} else {
val validatedLabels = Validation(value.map { label =>
val validatedLabel =
V2IriValidation.toSparqlEncodedString(
label.value,
throw V2.BadRequestException(ListErrorMessages.LabelsInvalid)
throw BadRequestException(ListErrorMessages.LabelsInvalid)
)
V2.StringLiteralV2(value = validatedLabel, language = label.language)
})
Expand All @@ -86,13 +87,13 @@ object List {
object Comments { self =>
def make(value: Seq[V2.StringLiteralV2]): Validation[Throwable, Comments] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ListErrorMessages.CommentsMissing))
Validation.fail(BadRequestException(ListErrorMessages.CommentsMissing))
} else {
val validatedComments = Validation(value.map { comment =>
val validatedComment =
V2IriValidation.toSparqlEncodedString(
comment.value,
throw V2.BadRequestException(ListErrorMessages.CommentsInvalid)
throw BadRequestException(ListErrorMessages.CommentsInvalid)
)
V2.StringLiteralV2(value = validatedComment, language = comment.language)
})
Expand Down
Expand Up @@ -6,6 +6,7 @@
package dsp.valueobjects

import zio.prelude.Validation
import dsp.errors.BadRequestException

object Project {

Expand All @@ -18,12 +19,12 @@ object Project {
object Shortcode { self =>
def make(value: String): Validation[Throwable, Shortcode] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ProjectErrorMessages.ShortcodeMissing))
Validation.fail(BadRequestException(ProjectErrorMessages.ShortcodeMissing))
} else {
val validatedValue: Validation[Throwable, String] = Validation(
V2ProjectIriValidation.validateProjectShortcode(
value,
throw V2.BadRequestException(ProjectErrorMessages.ShortcodeInvalid)
throw BadRequestException(ProjectErrorMessages.ShortcodeInvalid)
)
)
validatedValue.map(new Shortcode(_) {})
Expand All @@ -43,12 +44,12 @@ object Project {
object Shortname { self =>
def make(value: String): Validation[Throwable, Shortname] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ProjectErrorMessages.ShortnameMissing))
Validation.fail(BadRequestException(ProjectErrorMessages.ShortnameMissing))
} else {
val validatedValue = Validation(
V2ProjectIriValidation.validateAndEscapeProjectShortname(
value,
throw V2.BadRequestException(ProjectErrorMessages.ShortnameInvalid)
throw BadRequestException(ProjectErrorMessages.ShortnameInvalid)
)
)
validatedValue.map(new Shortname(_) {})
Expand All @@ -68,7 +69,7 @@ object Project {
object Longname { self =>
def make(value: String): Validation[Throwable, Longname] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ProjectErrorMessages.LongnameMissing))
Validation.fail(BadRequestException(ProjectErrorMessages.LongnameMissing))
} else {
Validation.succeed(new Longname(value) {})
}
Expand All @@ -87,7 +88,7 @@ object Project {
object ProjectDescription { self =>
def make(value: Seq[V2.StringLiteralV2]): Validation[Throwable, ProjectDescription] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ProjectErrorMessages.ProjectDescriptionsMissing))
Validation.fail(BadRequestException(ProjectErrorMessages.ProjectDescriptionsMissing))
} else {
Validation.succeed(new ProjectDescription(value) {})
}
Expand All @@ -106,7 +107,7 @@ object Project {
object Keywords { self =>
def make(value: Seq[String]): Validation[Throwable, Keywords] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ProjectErrorMessages.KeywordsMissing))
Validation.fail(BadRequestException(ProjectErrorMessages.KeywordsMissing))
} else {
Validation.succeed(new Keywords(value) {})
}
Expand All @@ -125,7 +126,7 @@ object Project {
object Logo { self =>
def make(value: String): Validation[Throwable, Logo] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(ProjectErrorMessages.LogoMissing))
Validation.fail(BadRequestException(ProjectErrorMessages.LogoMissing))
} else {
Validation.succeed(new Logo(value) {})
}
Expand Down
Expand Up @@ -7,6 +7,7 @@ package dsp.valueobjects

import zio.prelude.Validation
import scala.util.matching.Regex
import dsp.errors.BadRequestException

object User {

Expand All @@ -31,11 +32,11 @@ object User {
def make(value: String): Validation[Throwable, Username] =
if (value.isEmpty) {
// remove exception return just the error
Validation.fail(V2.BadRequestException(UserErrorMessages.UsernameMissing))
Validation.fail(BadRequestException(UserErrorMessages.UsernameMissing))
} else {
UsernameRegex.findFirstIn(value) match {
case Some(value) => Validation.succeed(new Username(value) {})
case None => Validation.fail(V2.BadRequestException(UserErrorMessages.UsernameInvalid))
case None => Validation.fail(BadRequestException(UserErrorMessages.UsernameInvalid))
}
}

Expand All @@ -55,11 +56,11 @@ object User {

def make(value: String): Validation[Throwable, Email] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(UserErrorMessages.EmailMissing))
Validation.fail(BadRequestException(UserErrorMessages.EmailMissing))
} else {
EmailRegex.findFirstIn(value) match {
case Some(value) => Validation.succeed(new Email(value) {})
case None => Validation.fail(V2.BadRequestException(UserErrorMessages.EmailInvalid))
case None => Validation.fail(BadRequestException(UserErrorMessages.EmailInvalid))
}
}

Expand All @@ -77,7 +78,7 @@ object User {
object GivenName { self =>
def make(value: String): Validation[Throwable, GivenName] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(UserErrorMessages.GivenNameMissing))
Validation.fail(BadRequestException(UserErrorMessages.GivenNameMissing))
} else {
Validation.succeed(new GivenName(value) {})
}
Expand All @@ -96,7 +97,7 @@ object User {
object FamilyName { self =>
def make(value: String): Validation[Throwable, FamilyName] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(UserErrorMessages.FamilyNameMissing))
Validation.fail(BadRequestException(UserErrorMessages.FamilyNameMissing))
} else {
Validation.succeed(new FamilyName(value) {})
}
Expand All @@ -117,11 +118,11 @@ object User {

def make(value: String): Validation[Throwable, Password] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(UserErrorMessages.PasswordMissing))
Validation.fail(BadRequestException(UserErrorMessages.PasswordMissing))
} else {
PasswordRegex.findFirstIn(value) match {
case Some(value) => Validation.succeed(new Password(value) {})
case None => Validation.fail(V2.BadRequestException(UserErrorMessages.PasswordInvalid))
case None => Validation.fail(BadRequestException(UserErrorMessages.PasswordInvalid))
}
}

Expand All @@ -148,9 +149,9 @@ object User {
object LanguageCode { self =>
def make(value: String): Validation[Throwable, LanguageCode] =
if (value.isEmpty) {
Validation.fail(V2.BadRequestException(UserErrorMessages.LanguageCodeMissing))
Validation.fail(BadRequestException(UserErrorMessages.LanguageCodeMissing))
} else if (!V2.SupportedLanguageCodes.contains(value)) {
Validation.fail(V2.BadRequestException(UserErrorMessages.LanguageCodeInvalid))
Validation.fail(BadRequestException(UserErrorMessages.LanguageCodeInvalid))
} else {
Validation.succeed(new LanguageCode(value) {})
}
Expand Down