aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/rest/errors/APIError.scala
blob: e0400fbf2b7c0794c04b63a798f22fcde41304ce (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package xyz.driver.core.rest.errors

import akka.http.scaladsl.model.{StatusCode, StatusCodes}

abstract class APIError extends Throwable {
  def isPatientSensitive: Boolean = false

  def statusCode: StatusCode
  def message: String
}

final case class InvalidInputError(override val message: String = "Invalid input",
                                   override val isPatientSensitive: Boolean = false)
    extends APIError {
  override def statusCode: StatusCode = StatusCodes.BadRequest
}

final case class InvalidActionError(override val message: String = "This action is not allowed",
                                    override val isPatientSensitive: Boolean = false)
    extends APIError {
  override def statusCode: StatusCode = StatusCodes.Forbidden
}

final case class ResourceNotFoundError(override val message: String = "Resource not found",
                                       override val isPatientSensitive: Boolean = false)
    extends APIError {
  override def statusCode: StatusCode = StatusCodes.NotFound
}

final case class ExternalServiceTimeoutError(override val message: String = "Another service took too long to respond",
                                             override val isPatientSensitive: Boolean = false)
    extends APIError {
  override def statusCode: StatusCode = StatusCodes.GatewayTimeout
}

final case class DatabaseError(override val message: String = "Database access error",
                               override val isPatientSensitive: Boolean = false)
    extends APIError {
  override def statusCode: StatusCode = StatusCodes.InternalServerError
}