use parse_rust_auth::resolve_session;
use parse_rust_core::{ErrorCode, ParseError, ParseValue};
use parse_rust_rest::{FindOptions, ParsedClause, ParsedWhere};
use parse_rust_storage::Constraint;
use serde_json::Value as Json;
use crate::request::RequestContext;
use crate::state::AppState;
pub async fn me_core(state: &AppState, rc: &RequestContext) -> Result<Json, ParseError> {
let Some(token) = rc.session_token.as_deref() else {
return Err(ParseError::new(
ErrorCode::InvalidSessionToken,
"Session token required.",
));
};
let not_found = || ParseError::new(ErrorCode::InvalidSessionToken, "Session token not found.");
let session = resolve_session(state.storage(), token)
.await
.map_err(|_| not_found())?;
let mut where_ = ParsedWhere::default();
where_.push(ParsedClause::Field(Constraint::equal(
"objectId",
ParseValue::String(session.object_id.clone()),
)));
let ctx = rc.ctx(state.storage());
let rows = parse_rust_rest::find(
&ctx,
crate::routes::classes::SESSION_CLASS,
where_,
FindOptions {
limit: Some(1),
..Default::default()
},
)
.await
.map_err(|_| not_found())?;
let Some(row) = rows.into_iter().next() else {
return Err(not_found());
};
Ok(crate::routes::classes::body_of(&row))
}