/* * This file is part of laurelin/api * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use diesel::{BoolExpressionMethods, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl}; use laurelin_schema::schema::games; use laurelin_shared::{error::api::APIError, types::game::Game}; use uuid::Uuid; pub(crate) fn my_games(conn: &mut PgConnection, user_id: &str) -> Result, APIError> { let games_res = games::table .filter( games::host_id .eq(Uuid::parse_str(user_id).unwrap()) .or(games::guest_id.eq(Uuid::parse_str(user_id).unwrap())), ) .load::(conn); let games = match games_res { Err(_) => return Err(APIError::Undefined), // TODO: new error type Ok(games) => games, }; let mut ids = Vec::with_capacity(games.len()); for game in &games { ids.push(game.id.to_string()); } Ok(ids) }