Use u16 when working with page size
This commit is contained in:
parent
f9465693a3
commit
81c590559e
17 changed files with 81 additions and 67 deletions
|
@ -38,7 +38,7 @@ impl OrderedCollection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const COLLECTION_PAGE_SIZE: i64 = 10;
|
pub const COLLECTION_PAGE_SIZE: u16 = 10;
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
|
|
|
@ -7,7 +7,7 @@ use crate::models::posts::queries::get_posts_by_author;
|
||||||
use crate::models::users::queries::get_user_by_name;
|
use crate::models::users::queries::get_user_by_name;
|
||||||
use super::feeds::make_feed;
|
use super::feeds::make_feed;
|
||||||
|
|
||||||
const FEED_SIZE: i64 = 10;
|
const FEED_SIZE: u16 = 10;
|
||||||
|
|
||||||
#[get("/feeds/{username}")]
|
#[get("/feeds/{username}")]
|
||||||
pub async fn get_atom_feed(
|
pub async fn get_atom_feed(
|
||||||
|
|
|
@ -25,7 +25,7 @@ use crate::models::notifications::queries::{
|
||||||
};
|
};
|
||||||
use crate::models::profiles::queries::{
|
use crate::models::profiles::queries::{
|
||||||
get_profile_by_id,
|
get_profile_by_id,
|
||||||
search_profile_by_wallet_address,
|
search_profiles_by_wallet_address,
|
||||||
};
|
};
|
||||||
use crate::models::profiles::types::DbActorProfile;
|
use crate::models::profiles::types::DbActorProfile;
|
||||||
use crate::models::relationships::queries::unsubscribe;
|
use crate::models::relationships::queries::unsubscribe;
|
||||||
|
@ -136,7 +136,7 @@ pub async fn check_ethereum_subscriptions(
|
||||||
let block_date = u256_to_date(block_timestamp)
|
let block_date = u256_to_date(block_timestamp)
|
||||||
.map_err(|_| EthereumError::ConversionError)?;
|
.map_err(|_| EthereumError::ConversionError)?;
|
||||||
|
|
||||||
let profiles = search_profile_by_wallet_address(
|
let profiles = search_profiles_by_wallet_address(
|
||||||
db_client,
|
db_client,
|
||||||
ÐEREUM,
|
ÐEREUM,
|
||||||
&sender_address,
|
&sender_address,
|
||||||
|
|
|
@ -308,14 +308,14 @@ impl Default for RelationshipMap {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_search_limit() -> i64 { 40 }
|
fn default_search_page_size() -> u16 { 40 }
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct SearchAcctQueryParams {
|
pub struct SearchAcctQueryParams {
|
||||||
pub q: String,
|
pub q: String,
|
||||||
|
|
||||||
#[serde(default = "default_search_limit")]
|
#[serde(default = "default_search_page_size")]
|
||||||
pub limit: i64,
|
pub limit: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
|
@ -331,7 +331,7 @@ pub struct FollowData {
|
||||||
pub replies: bool,
|
pub replies: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_page_size() -> i64 { 20 }
|
fn default_status_page_size() -> u16 { 20 }
|
||||||
|
|
||||||
fn default_exclude_replies() -> bool { true }
|
fn default_exclude_replies() -> bool { true }
|
||||||
|
|
||||||
|
@ -345,18 +345,18 @@ pub struct StatusListQueryParams {
|
||||||
|
|
||||||
pub max_id: Option<Uuid>,
|
pub max_id: Option<Uuid>,
|
||||||
|
|
||||||
#[serde(default = "default_page_size")]
|
#[serde(default = "default_status_page_size")]
|
||||||
pub limit: i64,
|
pub limit: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_follow_list_page_size() -> u8 { 40 }
|
fn default_follow_list_page_size() -> u16 { 40 }
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct FollowListQueryParams {
|
pub struct FollowListQueryParams {
|
||||||
pub max_id: Option<i32>,
|
pub max_id: Option<i32>,
|
||||||
|
|
||||||
#[serde(default = "default_follow_list_page_size")]
|
#[serde(default = "default_follow_list_page_size")]
|
||||||
pub limit: u8,
|
pub limit: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
|
|
|
@ -30,7 +30,7 @@ use crate::mastodon_api::statuses::types::Status;
|
||||||
use crate::models::posts::queries::get_posts_by_author;
|
use crate::models::posts::queries::get_posts_by_author;
|
||||||
use crate::models::profiles::queries::{
|
use crate::models::profiles::queries::{
|
||||||
get_profile_by_id,
|
get_profile_by_id,
|
||||||
search_profile_by_did,
|
search_profiles_by_did,
|
||||||
update_profile,
|
update_profile,
|
||||||
};
|
};
|
||||||
use crate::models::profiles::types::{
|
use crate::models::profiles::types::{
|
||||||
|
@ -323,7 +323,7 @@ async fn search_by_did(
|
||||||
let db_client = &**get_database_client(&db_pool).await?;
|
let db_client = &**get_database_client(&db_pool).await?;
|
||||||
let did: DidPkh = query_params.did.parse()
|
let did: DidPkh = query_params.did.parse()
|
||||||
.map_err(|_| ValidationError("invalid DID"))?;
|
.map_err(|_| ValidationError("invalid DID"))?;
|
||||||
let profiles = search_profile_by_did(db_client, &did, false).await?;
|
let profiles = search_profiles_by_did(db_client, &did, false).await?;
|
||||||
let accounts: Vec<Account> = profiles.into_iter()
|
let accounts: Vec<Account> = profiles.into_iter()
|
||||||
.map(|profile| Account::from_profile(profile, &config.instance_url()))
|
.map(|profile| Account::from_profile(profile, &config.instance_url()))
|
||||||
.collect();
|
.collect();
|
||||||
|
@ -486,7 +486,7 @@ async fn get_account_followers(
|
||||||
db_client,
|
db_client,
|
||||||
&profile.id,
|
&profile.id,
|
||||||
query_params.max_id,
|
query_params.max_id,
|
||||||
query_params.limit.into(),
|
query_params.limit,
|
||||||
).await?;
|
).await?;
|
||||||
let max_index = usize::from(query_params.limit.saturating_sub(1));
|
let max_index = usize::from(query_params.limit.saturating_sub(1));
|
||||||
let maybe_last_id = followers.get(max_index).map(|item| item.relationship_id);
|
let maybe_last_id = followers.get(max_index).map(|item| item.relationship_id);
|
||||||
|
@ -523,7 +523,7 @@ async fn get_account_following(
|
||||||
db_client,
|
db_client,
|
||||||
&profile.id,
|
&profile.id,
|
||||||
query_params.max_id,
|
query_params.max_id,
|
||||||
query_params.limit.into(),
|
query_params.limit,
|
||||||
).await?;
|
).await?;
|
||||||
let max_index = usize::from(query_params.limit.saturating_sub(1));
|
let max_index = usize::from(query_params.limit.saturating_sub(1));
|
||||||
let maybe_last_id = following.get(max_index).map(|item| item.relationship_id);
|
let maybe_last_id = following.get(max_index).map(|item| item.relationship_id);
|
||||||
|
@ -560,7 +560,7 @@ async fn get_account_subscribers(
|
||||||
db_client,
|
db_client,
|
||||||
&profile.id,
|
&profile.id,
|
||||||
query_params.max_id,
|
query_params.max_id,
|
||||||
query_params.limit.into(),
|
query_params.limit,
|
||||||
)
|
)
|
||||||
.await?
|
.await?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
fn default_page_size() -> i64 { 40 }
|
fn default_page_size() -> u16 { 40 }
|
||||||
|
|
||||||
/// https://docs.joinmastodon.org/methods/instance/directory/
|
/// https://docs.joinmastodon.org/methods/instance/directory/
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct DirectoryQueryParams {
|
pub struct DirectoryQueryParams {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub offset: i64,
|
pub offset: u16,
|
||||||
|
|
||||||
#[serde(default = "default_page_size")]
|
#[serde(default = "default_page_size")]
|
||||||
pub limit: i64,
|
pub limit: u16,
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ use crate::mastodon_api::accounts::types::Account;
|
||||||
use crate::mastodon_api::statuses::types::Status;
|
use crate::mastodon_api::statuses::types::Status;
|
||||||
use crate::models::notifications::types::{EventType, Notification};
|
use crate::models::notifications::types::{EventType, Notification};
|
||||||
|
|
||||||
fn default_page_size() -> u8 { 20 }
|
fn default_page_size() -> u16 { 20 }
|
||||||
|
|
||||||
/// https://docs.joinmastodon.org/methods/notifications/
|
/// https://docs.joinmastodon.org/methods/notifications/
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
|
@ -13,7 +13,7 @@ pub struct NotificationQueryParams {
|
||||||
pub max_id: Option<i32>,
|
pub max_id: Option<i32>,
|
||||||
|
|
||||||
#[serde(default = "default_page_size")]
|
#[serde(default = "default_page_size")]
|
||||||
pub limit: u8,
|
pub limit: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// https://docs.joinmastodon.org/entities/notification/
|
/// https://docs.joinmastodon.org/entities/notification/
|
||||||
|
|
|
@ -28,7 +28,7 @@ async fn get_notifications_view(
|
||||||
db_client,
|
db_client,
|
||||||
¤t_user.id,
|
¤t_user.id,
|
||||||
query_params.max_id,
|
query_params.max_id,
|
||||||
query_params.limit.into(),
|
query_params.limit,
|
||||||
).await?
|
).await?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|item| ApiNotification::from_db(item, &config.instance_url()))
|
.map(|item| ApiNotification::from_db(item, &config.instance_url()))
|
||||||
|
|
|
@ -18,9 +18,9 @@ use crate::mastodon_api::statuses::types::Tag;
|
||||||
use crate::models::posts::helpers::can_view_post;
|
use crate::models::posts::helpers::can_view_post;
|
||||||
use crate::models::posts::types::Post;
|
use crate::models::posts::types::Post;
|
||||||
use crate::models::profiles::queries::{
|
use crate::models::profiles::queries::{
|
||||||
search_profile,
|
search_profiles,
|
||||||
search_profile_by_did,
|
search_profiles_by_did,
|
||||||
search_profile_by_wallet_address,
|
search_profiles_by_wallet_address,
|
||||||
};
|
};
|
||||||
use crate::models::profiles::types::DbActorProfile;
|
use crate::models::profiles::types::DbActorProfile;
|
||||||
use crate::models::tags::queries::search_tags;
|
use crate::models::tags::queries::search_tags;
|
||||||
|
@ -93,7 +93,7 @@ async fn search_profiles_or_import(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
username: String,
|
username: String,
|
||||||
mut instance: Option<String>,
|
mut instance: Option<String>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<DbActorProfile>, HttpError> {
|
) -> Result<Vec<DbActorProfile>, HttpError> {
|
||||||
if let Some(ref actor_host) = instance {
|
if let Some(ref actor_host) = instance {
|
||||||
if actor_host == &config.instance().host() {
|
if actor_host == &config.instance().host() {
|
||||||
|
@ -101,7 +101,7 @@ async fn search_profiles_or_import(
|
||||||
instance = None;
|
instance = None;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
let mut profiles = search_profile(
|
let mut profiles = search_profiles(
|
||||||
db_client,
|
db_client,
|
||||||
&username,
|
&username,
|
||||||
instance.as_ref(),
|
instance.as_ref(),
|
||||||
|
@ -155,7 +155,7 @@ pub async fn search(
|
||||||
current_user: &User,
|
current_user: &User,
|
||||||
db_client: &mut impl GenericClient,
|
db_client: &mut impl GenericClient,
|
||||||
search_query: &str,
|
search_query: &str,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<SearchResults, HttpError> {
|
) -> Result<SearchResults, HttpError> {
|
||||||
let mut profiles = vec![];
|
let mut profiles = vec![];
|
||||||
let mut posts = vec![];
|
let mut posts = vec![];
|
||||||
|
@ -188,7 +188,7 @@ pub async fn search(
|
||||||
SearchQuery::WalletAddress(address) => {
|
SearchQuery::WalletAddress(address) => {
|
||||||
// Search by wallet address, assuming it's ethereum address
|
// Search by wallet address, assuming it's ethereum address
|
||||||
// TODO: support other currencies
|
// TODO: support other currencies
|
||||||
profiles = search_profile_by_wallet_address(
|
profiles = search_profiles_by_wallet_address(
|
||||||
db_client,
|
db_client,
|
||||||
&Currency::Ethereum,
|
&Currency::Ethereum,
|
||||||
&address,
|
&address,
|
||||||
|
@ -196,7 +196,7 @@ pub async fn search(
|
||||||
).await?;
|
).await?;
|
||||||
},
|
},
|
||||||
SearchQuery::Did(did) => {
|
SearchQuery::Did(did) => {
|
||||||
profiles = search_profile_by_did(
|
profiles = search_profiles_by_did(
|
||||||
db_client,
|
db_client,
|
||||||
&did,
|
&did,
|
||||||
false,
|
false,
|
||||||
|
@ -223,13 +223,13 @@ pub async fn search_profiles_only(
|
||||||
config: &Config,
|
config: &Config,
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
search_query: &str,
|
search_query: &str,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<Account>, HttpError> {
|
) -> Result<Vec<Account>, HttpError> {
|
||||||
let (username, maybe_instance) = match parse_profile_query(search_query) {
|
let (username, maybe_instance) = match parse_profile_query(search_query) {
|
||||||
Ok(result) => result,
|
Ok(result) => result,
|
||||||
Err(_) => return Ok(vec![]),
|
Err(_) => return Ok(vec![]),
|
||||||
};
|
};
|
||||||
let profiles = search_profile(
|
let profiles = search_profiles(
|
||||||
db_client,
|
db_client,
|
||||||
&username,
|
&username,
|
||||||
maybe_instance.as_ref(),
|
maybe_instance.as_ref(),
|
||||||
|
|
|
@ -4,14 +4,14 @@ use serde::{Deserialize, Serialize};
|
||||||
use crate::mastodon_api::accounts::types::Account;
|
use crate::mastodon_api::accounts::types::Account;
|
||||||
use crate::mastodon_api::statuses::types::{Status, Tag};
|
use crate::mastodon_api::statuses::types::{Status, Tag};
|
||||||
|
|
||||||
fn default_limit() -> i64 { 20 }
|
fn default_page_size() -> u16 { 20 }
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct SearchQueryParams {
|
pub struct SearchQueryParams {
|
||||||
pub q: String,
|
pub q: String,
|
||||||
|
|
||||||
#[serde(default = "default_limit")]
|
#[serde(default = "default_page_size")]
|
||||||
pub limit: i64,
|
pub limit: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
fn default_page_size() -> i64 { 20 }
|
fn default_page_size() -> u16 { 20 }
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct TimelineQueryParams {
|
pub struct TimelineQueryParams {
|
||||||
pub max_id: Option<Uuid>,
|
pub max_id: Option<Uuid>,
|
||||||
|
|
||||||
#[serde(default = "default_page_size")]
|
#[serde(default = "default_page_size")]
|
||||||
pub limit: i64,
|
pub limit: u16,
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,7 @@ pub async fn get_notifications(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
recipient_id: &Uuid,
|
recipient_id: &Uuid,
|
||||||
max_id: Option<i32>,
|
max_id: Option<i32>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<Notification>, DatabaseError> {
|
) -> Result<Vec<Notification>, DatabaseError> {
|
||||||
let statement = format!(
|
let statement = format!(
|
||||||
"
|
"
|
||||||
|
@ -150,7 +150,7 @@ pub async fn get_notifications(
|
||||||
);
|
);
|
||||||
let rows = db_client.query(
|
let rows = db_client.query(
|
||||||
statement.as_str(),
|
statement.as_str(),
|
||||||
&[&recipient_id, &max_id, &limit],
|
&[&recipient_id, &max_id, &i64::from(limit)],
|
||||||
).await?;
|
).await?;
|
||||||
let mut notifications: Vec<Notification> = rows.iter()
|
let mut notifications: Vec<Notification> = rows.iter()
|
||||||
.map(Notification::try_from)
|
.map(Notification::try_from)
|
||||||
|
|
|
@ -274,7 +274,7 @@ pub async fn get_home_timeline(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
current_user_id: &Uuid,
|
current_user_id: &Uuid,
|
||||||
max_post_id: Option<Uuid>,
|
max_post_id: Option<Uuid>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<Post>, DatabaseError> {
|
) -> Result<Vec<Post>, DatabaseError> {
|
||||||
// Select posts from follows, subscriptions,
|
// Select posts from follows, subscriptions,
|
||||||
// posts where current user is mentioned
|
// posts where current user is mentioned
|
||||||
|
@ -358,6 +358,7 @@ pub async fn get_home_timeline(
|
||||||
relationship_hide_replies=i16::from(&RelationshipType::HideReplies),
|
relationship_hide_replies=i16::from(&RelationshipType::HideReplies),
|
||||||
visibility_filter=build_visibility_filter(),
|
visibility_filter=build_visibility_filter(),
|
||||||
);
|
);
|
||||||
|
let limit: i64 = limit.into();
|
||||||
let query = query!(
|
let query = query!(
|
||||||
&statement,
|
&statement,
|
||||||
current_user_id=current_user_id,
|
current_user_id=current_user_id,
|
||||||
|
@ -375,7 +376,7 @@ pub async fn get_local_timeline(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
current_user_id: &Uuid,
|
current_user_id: &Uuid,
|
||||||
max_post_id: Option<Uuid>,
|
max_post_id: Option<Uuid>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<Post>, DatabaseError> {
|
) -> Result<Vec<Post>, DatabaseError> {
|
||||||
let statement = format!(
|
let statement = format!(
|
||||||
"
|
"
|
||||||
|
@ -400,6 +401,7 @@ pub async fn get_local_timeline(
|
||||||
related_links=RELATED_LINKS,
|
related_links=RELATED_LINKS,
|
||||||
visibility_public=i16::from(&Visibility::Public),
|
visibility_public=i16::from(&Visibility::Public),
|
||||||
);
|
);
|
||||||
|
let limit: i64 = limit.into();
|
||||||
let query = query!(
|
let query = query!(
|
||||||
&statement,
|
&statement,
|
||||||
current_user_id=current_user_id,
|
current_user_id=current_user_id,
|
||||||
|
@ -492,7 +494,7 @@ pub async fn get_posts_by_author(
|
||||||
include_replies: bool,
|
include_replies: bool,
|
||||||
include_reposts: bool,
|
include_reposts: bool,
|
||||||
max_post_id: Option<Uuid>,
|
max_post_id: Option<Uuid>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<Post>, DatabaseError> {
|
) -> Result<Vec<Post>, DatabaseError> {
|
||||||
let mut condition = format!(
|
let mut condition = format!(
|
||||||
"post.author_id = $profile_id
|
"post.author_id = $profile_id
|
||||||
|
@ -526,6 +528,7 @@ pub async fn get_posts_by_author(
|
||||||
related_links=RELATED_LINKS,
|
related_links=RELATED_LINKS,
|
||||||
condition=condition,
|
condition=condition,
|
||||||
);
|
);
|
||||||
|
let limit: i64 = limit.into();
|
||||||
let query = query!(
|
let query = query!(
|
||||||
&statement,
|
&statement,
|
||||||
profile_id=profile_id,
|
profile_id=profile_id,
|
||||||
|
@ -545,7 +548,7 @@ pub async fn get_posts_by_tag(
|
||||||
tag_name: &str,
|
tag_name: &str,
|
||||||
current_user_id: Option<&Uuid>,
|
current_user_id: Option<&Uuid>,
|
||||||
max_post_id: Option<Uuid>,
|
max_post_id: Option<Uuid>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<Post>, DatabaseError> {
|
) -> Result<Vec<Post>, DatabaseError> {
|
||||||
let tag_name = tag_name.to_lowercase();
|
let tag_name = tag_name.to_lowercase();
|
||||||
let statement = format!(
|
let statement = format!(
|
||||||
|
@ -574,6 +577,7 @@ pub async fn get_posts_by_tag(
|
||||||
related_links=RELATED_LINKS,
|
related_links=RELATED_LINKS,
|
||||||
visibility_filter=build_visibility_filter(),
|
visibility_filter=build_visibility_filter(),
|
||||||
);
|
);
|
||||||
|
let limit: i64 = limit.into();
|
||||||
let query = query!(
|
let query = query!(
|
||||||
&statement,
|
&statement,
|
||||||
tag_name=tag_name,
|
tag_name=tag_name,
|
||||||
|
|
|
@ -159,8 +159,8 @@ pub async fn get_profile_by_acct(
|
||||||
|
|
||||||
pub async fn get_profiles(
|
pub async fn get_profiles(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
offset: i64,
|
offset: u16,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<DbActorProfile>, DatabaseError> {
|
) -> Result<Vec<DbActorProfile>, DatabaseError> {
|
||||||
let rows = db_client.query(
|
let rows = db_client.query(
|
||||||
"
|
"
|
||||||
|
@ -169,7 +169,7 @@ pub async fn get_profiles(
|
||||||
ORDER BY username
|
ORDER BY username
|
||||||
LIMIT $1 OFFSET $2
|
LIMIT $1 OFFSET $2
|
||||||
",
|
",
|
||||||
&[&limit, &offset],
|
&[&i64::from(limit), &i64::from(offset)],
|
||||||
).await?;
|
).await?;
|
||||||
let profiles = rows.iter()
|
let profiles = rows.iter()
|
||||||
.map(|row| row.try_get("actor_profile"))
|
.map(|row| row.try_get("actor_profile"))
|
||||||
|
@ -358,11 +358,11 @@ pub async fn delete_profile(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn search_profile(
|
pub async fn search_profiles(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
username: &str,
|
username: &str,
|
||||||
instance: Option<&String>,
|
instance: Option<&String>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<DbActorProfile>, DatabaseError> {
|
) -> Result<Vec<DbActorProfile>, DatabaseError> {
|
||||||
let db_search_query = match instance {
|
let db_search_query = match instance {
|
||||||
Some(instance) => {
|
Some(instance) => {
|
||||||
|
@ -381,7 +381,7 @@ pub async fn search_profile(
|
||||||
WHERE acct ILIKE $1
|
WHERE acct ILIKE $1
|
||||||
LIMIT $2
|
LIMIT $2
|
||||||
",
|
",
|
||||||
&[&db_search_query, &limit],
|
&[&db_search_query, &i64::from(limit)],
|
||||||
).await?;
|
).await?;
|
||||||
let profiles: Vec<DbActorProfile> = rows.iter()
|
let profiles: Vec<DbActorProfile> = rows.iter()
|
||||||
.map(|row| row.try_get("actor_profile"))
|
.map(|row| row.try_get("actor_profile"))
|
||||||
|
@ -389,7 +389,7 @@ pub async fn search_profile(
|
||||||
Ok(profiles)
|
Ok(profiles)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn search_profile_by_did(
|
pub async fn search_profiles_by_did(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
did: &DidPkh,
|
did: &DidPkh,
|
||||||
prefer_verified: bool,
|
prefer_verified: bool,
|
||||||
|
@ -464,14 +464,14 @@ pub async fn search_profile_by_did(
|
||||||
Ok(results)
|
Ok(results)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn search_profile_by_wallet_address(
|
pub async fn search_profiles_by_wallet_address(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
currency: &Currency,
|
currency: &Currency,
|
||||||
wallet_address: &str,
|
wallet_address: &str,
|
||||||
prefer_verified: bool,
|
prefer_verified: bool,
|
||||||
) -> Result<Vec<DbActorProfile>, DatabaseError> {
|
) -> Result<Vec<DbActorProfile>, DatabaseError> {
|
||||||
let did = DidPkh::from_address(currency, wallet_address);
|
let did = DidPkh::from_address(currency, wallet_address);
|
||||||
search_profile_by_did(db_client, &did, prefer_verified).await
|
search_profiles_by_did(db_client, &did, prefer_verified).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update_follower_count(
|
pub async fn update_follower_count(
|
||||||
|
@ -641,7 +641,7 @@ mod tests {
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
#[serial]
|
#[serial]
|
||||||
async fn test_search_profile_by_wallet_address_local() {
|
async fn test_search_profiles_by_wallet_address_local() {
|
||||||
let db_client = &mut create_test_database().await;
|
let db_client = &mut create_test_database().await;
|
||||||
let wallet_address = "0x1234abcd";
|
let wallet_address = "0x1234abcd";
|
||||||
let user_data = UserCreateData {
|
let user_data = UserCreateData {
|
||||||
|
@ -649,7 +649,7 @@ mod tests {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let _user = create_user(db_client, user_data).await.unwrap();
|
let _user = create_user(db_client, user_data).await.unwrap();
|
||||||
let profiles = search_profile_by_wallet_address(
|
let profiles = search_profiles_by_wallet_address(
|
||||||
db_client, ÐEREUM, wallet_address, false).await.unwrap();
|
db_client, ÐEREUM, wallet_address, false).await.unwrap();
|
||||||
|
|
||||||
// Login address must not be exposed
|
// Login address must not be exposed
|
||||||
|
@ -658,7 +658,7 @@ mod tests {
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
#[serial]
|
#[serial]
|
||||||
async fn test_search_profile_by_wallet_address_remote() {
|
async fn test_search_profiles_by_wallet_address_remote() {
|
||||||
let db_client = &mut create_test_database().await;
|
let db_client = &mut create_test_database().await;
|
||||||
let extra_field = ExtraField {
|
let extra_field = ExtraField {
|
||||||
name: "$eth".to_string(),
|
name: "$eth".to_string(),
|
||||||
|
@ -670,7 +670,7 @@ mod tests {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let profile = create_profile(db_client, profile_data).await.unwrap();
|
let profile = create_profile(db_client, profile_data).await.unwrap();
|
||||||
let profiles = search_profile_by_wallet_address(
|
let profiles = search_profiles_by_wallet_address(
|
||||||
db_client, ÐEREUM, "0x1234abcd", false).await.unwrap();
|
db_client, ÐEREUM, "0x1234abcd", false).await.unwrap();
|
||||||
|
|
||||||
assert_eq!(profiles.len(), 1);
|
assert_eq!(profiles.len(), 1);
|
||||||
|
@ -679,7 +679,7 @@ mod tests {
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
#[serial]
|
#[serial]
|
||||||
async fn test_search_profile_by_wallet_address_identity_proof() {
|
async fn test_search_profiles_by_wallet_address_identity_proof() {
|
||||||
let db_client = &mut create_test_database().await;
|
let db_client = &mut create_test_database().await;
|
||||||
let identity_proof = IdentityProof {
|
let identity_proof = IdentityProof {
|
||||||
issuer: DidPkh::from_address(ÐEREUM, "0x1234abcd"),
|
issuer: DidPkh::from_address(ÐEREUM, "0x1234abcd"),
|
||||||
|
@ -691,7 +691,7 @@ mod tests {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let profile = create_profile(db_client, profile_data).await.unwrap();
|
let profile = create_profile(db_client, profile_data).await.unwrap();
|
||||||
let profiles = search_profile_by_wallet_address(
|
let profiles = search_profiles_by_wallet_address(
|
||||||
db_client, ÐEREUM, "0x1234abcd", false).await.unwrap();
|
db_client, ÐEREUM, "0x1234abcd", false).await.unwrap();
|
||||||
|
|
||||||
assert_eq!(profiles.len(), 1);
|
assert_eq!(profiles.len(), 1);
|
||||||
|
|
|
@ -282,7 +282,7 @@ pub async fn get_followers_paginated(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
profile_id: &Uuid,
|
profile_id: &Uuid,
|
||||||
max_relationship_id: Option<i32>,
|
max_relationship_id: Option<i32>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<RelatedActorProfile>, DatabaseError> {
|
) -> Result<Vec<RelatedActorProfile>, DatabaseError> {
|
||||||
let rows = db_client.query(
|
let rows = db_client.query(
|
||||||
"
|
"
|
||||||
|
@ -297,7 +297,12 @@ pub async fn get_followers_paginated(
|
||||||
ORDER BY relationship.id DESC
|
ORDER BY relationship.id DESC
|
||||||
LIMIT $4
|
LIMIT $4
|
||||||
",
|
",
|
||||||
&[&profile_id, &RelationshipType::Follow, &max_relationship_id, &limit],
|
&[
|
||||||
|
&profile_id,
|
||||||
|
&RelationshipType::Follow,
|
||||||
|
&max_relationship_id,
|
||||||
|
&i64::from(limit),
|
||||||
|
],
|
||||||
).await?;
|
).await?;
|
||||||
let related_profiles = rows.iter()
|
let related_profiles = rows.iter()
|
||||||
.map(RelatedActorProfile::try_from)
|
.map(RelatedActorProfile::try_from)
|
||||||
|
@ -331,7 +336,7 @@ pub async fn get_following_paginated(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
profile_id: &Uuid,
|
profile_id: &Uuid,
|
||||||
max_relationship_id: Option<i32>,
|
max_relationship_id: Option<i32>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<RelatedActorProfile>, DatabaseError> {
|
) -> Result<Vec<RelatedActorProfile>, DatabaseError> {
|
||||||
let rows = db_client.query(
|
let rows = db_client.query(
|
||||||
"
|
"
|
||||||
|
@ -346,7 +351,12 @@ pub async fn get_following_paginated(
|
||||||
ORDER BY relationship.id DESC
|
ORDER BY relationship.id DESC
|
||||||
LIMIT $4
|
LIMIT $4
|
||||||
",
|
",
|
||||||
&[&profile_id, &RelationshipType::Follow, &max_relationship_id, &limit],
|
&[
|
||||||
|
&profile_id,
|
||||||
|
&RelationshipType::Follow,
|
||||||
|
&max_relationship_id,
|
||||||
|
&i64::from(limit),
|
||||||
|
],
|
||||||
).await?;
|
).await?;
|
||||||
let related_profiles = rows.iter()
|
let related_profiles = rows.iter()
|
||||||
.map(RelatedActorProfile::try_from)
|
.map(RelatedActorProfile::try_from)
|
||||||
|
|
|
@ -129,7 +129,7 @@ pub async fn get_incoming_subscriptions(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
recipient_id: &Uuid,
|
recipient_id: &Uuid,
|
||||||
max_subscription_id: Option<i32>,
|
max_subscription_id: Option<i32>,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<Subscription>, DatabaseError> {
|
) -> Result<Vec<Subscription>, DatabaseError> {
|
||||||
let rows = db_client.query(
|
let rows = db_client.query(
|
||||||
"
|
"
|
||||||
|
@ -143,7 +143,7 @@ pub async fn get_incoming_subscriptions(
|
||||||
ORDER BY subscription.id DESC
|
ORDER BY subscription.id DESC
|
||||||
LIMIT $3
|
LIMIT $3
|
||||||
",
|
",
|
||||||
&[&recipient_id, &max_subscription_id, &limit],
|
&[&recipient_id, &max_subscription_id, &i64::from(limit)],
|
||||||
).await?;
|
).await?;
|
||||||
let subscriptions = rows.iter()
|
let subscriptions = rows.iter()
|
||||||
.map(Subscription::try_from)
|
.map(Subscription::try_from)
|
||||||
|
|
|
@ -5,7 +5,7 @@ use crate::errors::DatabaseError;
|
||||||
pub async fn search_tags(
|
pub async fn search_tags(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
search_query: &str,
|
search_query: &str,
|
||||||
limit: i64,
|
limit: u16,
|
||||||
) -> Result<Vec<String>, DatabaseError> {
|
) -> Result<Vec<String>, DatabaseError> {
|
||||||
let db_search_query = format!("%{}%", search_query);
|
let db_search_query = format!("%{}%", search_query);
|
||||||
let rows = db_client.query(
|
let rows = db_client.query(
|
||||||
|
@ -15,7 +15,7 @@ pub async fn search_tags(
|
||||||
WHERE tag_name ILIKE $1
|
WHERE tag_name ILIKE $1
|
||||||
LIMIT $2
|
LIMIT $2
|
||||||
",
|
",
|
||||||
&[&db_search_query, &limit],
|
&[&db_search_query, &i64::from(limit)],
|
||||||
).await?;
|
).await?;
|
||||||
let tags: Vec<String> = rows.iter()
|
let tags: Vec<String> = rows.iter()
|
||||||
.map(|row| row.try_get("tag_name"))
|
.map(|row| row.try_get("tag_name"))
|
||||||
|
|
Loading…
Reference in a new issue