Skip to content

Commit

Permalink
Auto-add visibility to users
Browse files Browse the repository at this point in the history
  • Loading branch information
eikek committed Mar 15, 2024
1 parent b0a93f9 commit 11708ce
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@ object DocumentConverter:
fromTransformer(
_.into[UserDocument].transform(
Field.default(_.score),
Field.computed(_.name, u => UserDocument.nameFrom(u.firstName, u.lastName)),
Field.default(_.visibility)
Field.computed(_.name, u => UserDocument.nameFrom(u.firstName, u.lastName))
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ object DocumentUpdates:
.into[UserDocument]
.transform(
Field.default(_.score),
Field.computed(_.name, u => UserDocument.nameFrom(u.firstName, u.lastName)),
Field.default(_.visibility)
Field.computed(_.name, u => UserDocument.nameFrom(u.firstName, u.lastName))
)
.some
case _ => None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import io.renku.search.model.projects.MemberRole
import io.renku.search.model.projects.MemberRole.{Member, Owner}
import io.renku.solr.client.EncoderSupport.*
import io.renku.search.model.projects.Visibility
import io.renku.search.solr.schema.EntityDocumentSchema.Fields
import io.renku.solr.client.EncoderSupport

sealed trait EntityDocument:
val score: Option[Double]
Expand Down Expand Up @@ -77,12 +79,14 @@ final case class User(
firstName: Option[users.FirstName] = None,
lastName: Option[users.LastName] = None,
name: Option[Name] = None,
score: Option[Double] = None,
visibility: Visibility = Visibility.Public
score: Option[Double] = None
) extends EntityDocument

object User:
val entityType: String = "User"
// auto-add a visibility:public to users
given Encoder[User] =
EncoderSupport.deriveWithAdditional(Fields.visibility.name, Visibility.Public)

def nameFrom(firstName: Option[String], lastName: Option[String]): Option[Name] =
Option(List(firstName, lastName).flatten.mkString(" "))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,19 @@ object EncoderSupport {
inline def deriveWithDiscriminator[A <: Product](using
Mirror.ProductOf[A]
): Encoder[A] =
Macros.createEncoder[String, A](discriminatorField)
Macros.createEncoder[String, String, A](Map.empty, Some(discriminatorField))

inline def deriveWithAdditional[V: Encoder, A <: Product](key: String, value: V)(using
Mirror.ProductOf[A]
): Encoder[A] =
Macros.createEncoder[String, V, A](Map(key -> value), None)

private object Macros {

final inline def createEncoder[K: Encoder, T <: Product](discriminatorName: K)(using
final inline def createEncoder[K: Encoder, V: Encoder, T <: Product](
additionalFields: Map[String, V],
discriminatorField: Option[K]
)(using
m: Mirror.ProductOf[T]
): Encoder[T] =
val names = summonLabels[m.MirroredElemLabels]
Expand All @@ -45,8 +53,9 @@ object EncoderSupport {
def write(w: Writer, value: T): Writer =
val kind = value.asInstanceOf[Product].productPrefix
val values = value.asInstanceOf[Product].productIterator.toList
w.writeMapOpen(names.size + 1)
w.writeMapMember(discriminatorName, kind)
w.writeMapOpen(names.size + additionalFields.size + discriminatorField.size)
additionalFields.foreach { case (k, v) => w.writeMapMember(k, v) }
discriminatorField.foreach(k => w.writeMapMember(k, kind))
names.zip(values).zip(encoders).foreach { case ((k, v), e) =>
w.writeMapMember(k, v)(Encoder[String], e.asInstanceOf[Encoder[Any]])
}
Expand Down

0 comments on commit 11708ce

Please sign in to comment.