Skip to content

Commit

Permalink
feat: update impl
Browse files Browse the repository at this point in the history
  • Loading branch information
patlo-iog committed May 7, 2024
1 parent dbbb3ac commit 5cc393c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ trait OIDC4VCIssuerMetadataRepository {
def findIssuerById(issuerId: UUID): UIO[Option[CredentialIssuer]]
def createIssuer(issuer: CredentialIssuer): URIO[WalletAccessContext, Unit]
def findWalletIssuers: URIO[WalletAccessContext, Seq[CredentialIssuer]]
def updateIssuer(issuerId: UUID, authorizationServer: Option[URL] = None): URIO[WalletAccessContext, CredentialIssuer]
def updateIssuer(issuerId: UUID, authorizationServer: Option[URL] = None): URIO[WalletAccessContext, Unit]
def deleteIssuer(issuerId: UUID): URIO[WalletAccessContext, Unit]
def createCredentialConfiguration(issuerId: UUID, config: CredentialConfiguration): URIO[WalletAccessContext, Unit]
def findAllCredentialConfigurations(issuerId: UUID): UIO[Seq[CredentialConfiguration]]
Expand Down Expand Up @@ -44,15 +44,15 @@ class InMemoryOIDC4VCIssuerMetadataRepository(
override def updateIssuer(
issuerId: UUID,
authorizationServer: Option[URL]
): URIO[WalletAccessContext, CredentialIssuer] =
): URIO[WalletAccessContext, Unit] =
for {
issuer <- findIssuerById(issuerId)
.someOrElseZIO(ZIO.dieMessage("Update credential issuer fail. The issuer does not exist"))
updatedAuthServerIssuer = authorizationServer
.fold(issuer)(url => issuer.copy(authorizationServer = url))
_ <- deleteIssuer(issuerId)
_ <- createIssuer(updatedAuthServerIssuer.copy(updatedAt = Instant.now))
} yield updatedAuthServerIssuer
} yield ()

override def deleteIssuer(issuerId: UUID): URIO[WalletAccessContext, Unit] =
for {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,12 @@ class OIDC4VCIssuerMetadataServiceImpl(repository: OIDC4VCIssuerMetadataReposito
authorizationServer: Option[URL]
): ZIO[WalletAccessContext, IssuerIdNotFound, CredentialIssuer] =
for {
_ <- getCredentialIssuer(issuerId)
updatedIssuer <- repository.updateIssuer(issuerId, authorizationServer = authorizationServer)
_ <- repository
.updateIssuer(issuerId, authorizationServer = authorizationServer)
.catchSomeDefect { case _: UnexpectedAffectedRow =>
ZIO.fail(IssuerIdNotFound(issuerId))
}
updatedIssuer <- getCredentialIssuer(issuerId)
} yield updatedIssuer

override def deleteCredentialIssuer(issuerId: UUID): ZIO[WalletAccessContext, IssuerIdNotFound, Unit] =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import zio.*
import zio.interop.catz.*

import java.net.URL
import java.time.Instant
import java.util.UUID

// TODO: implement all members
Expand Down Expand Up @@ -80,7 +81,25 @@ class JdbcOIDC4VCIssuerMetadataRepository(xa: Transactor[ContextAwareTask], xb:
override def updateIssuer(
issuerId: UUID,
authorizationServer: Option[URL]
): URIO[WalletAccessContext, CredentialIssuer] = ???
): URIO[WalletAccessContext, Unit] = {
val setFr = (now: Instant) =>
Fragments.setOpt(
Some(fr"updated_at = $now"),
authorizationServer.map(url => fr"authorization_server = $url")
)
val cxnIO = (setFr: Fragment) => sql"""
|UPDATE public.issuer_metadata
|$setFr
|WHERE id = $issuerId
""".stripMargin.update

for {
now <- ZIO.clockWith(_.instant)
_ <- cxnIO(setFr(now)).run
.transactWallet(xa)
.ensureOneAffectedRowOrDie
} yield ()
}

override def deleteIssuer(issuerId: UUID): URIO[WalletAccessContext, Unit] = {
val cxnIO = sql"""
Expand Down

0 comments on commit 5cc393c

Please sign in to comment.