}
}
-val CallCurrentNationAttribute = AttributeKey<NationData>("CurrentNation")
+private val callCurrentNationAttribute = AttributeKey<NationSession>("CurrentNation")
suspend fun ApplicationCall.currentNation(): NationData? {
- attributes.getOrNull(CallCurrentNationAttribute)?.let { return it }
+ attributes.getOrNull(callCurrentNationAttribute)?.let { sess ->
+ return when (sess) {
+ NationSession.Anonymous -> null
+ is NationSession.LoggedIn -> sess.nation
+ }
+ }
+
+ val nationId = sessions.get<UserSession>()?.nationId
+ return if (nationId == null) {
+ attributes.put(callCurrentNationAttribute, NationSession.Anonymous)
+ null
+ } else nationCache.getNation(nationId).also { data ->
+ attributes.put(callCurrentNationAttribute, NationSession.LoggedIn(data))
+ }
+}
+
+private sealed interface NationSession {
+ object Anonymous : NationSession
- return sessions.get<UserSession>()?.nationId?.let { id ->
- nationCache.getNation(id)
- }?.also { attributes.put(CallCurrentNationAttribute, it) }
+ @JvmInline
+ value class LoggedIn(val nation: NationData) : NationSession
}