Skip to content

Instantly share code, notes, and snippets.

@ekusiadadus
Created November 13, 2022 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ekusiadadus/e267f700ff76847ba22cd280b0940882 to your computer and use it in GitHub Desktop.
Save ekusiadadus/e267f700ff76847ba22cd280b0940882 to your computer and use it in GitHub Desktop.
get_tweets.rs
use crate::domain::interface::*;
use crate::domain::model::*;
use crate::error::*;
use crate::infra::DBConnector;
use crate::schema::tweet_records;
use async_trait::async_trait;
use diesel::dsl::*;
use diesel::prelude::*;
use serde::*;
use std::sync::Arc;
#[async_trait]
impl ITweetRepository for TweetRepository {
async fn find_by_id(&self, id: &TweetID) -> Result<Tweet> {
let record = self
.db
.first::<TweetRecord, _>(
tweet_records::table.filter(tweet_records::id.eq(id.0.clone())),
)
.await?;
record.to_model()
}
async fn save(&self, tweet: Tweet) -> Result<()> {
let record = TweetRecord::from_model(tweet)?;
self.db
.execute(replace_into(tweet_records::table).values::<TweetRecord>(record))
.await?;
Ok(())
}
async fn search(&self, query: &str) -> Result<Vec<Tweet>> {
let records = self
.db
.load::<TweetRecord, _>(
tweet_records::table.filter(tweet_records::text.like(format!("%{}%", query))),
)
.await?;
records
.into_iter()
.map(|record| record.to_model())
.collect::<Result<Vec<Tweet>>>()
}
async fn get_tweets_by_hashtag(&self, hashtag: &str) -> Result<Vec<Tweet>> {
let tweet_fileds = "tweet.fields=author_id,created_at,entities,geo,in_reply_to_user_id,lang,possibly_sensitive,referenced_tweets,source,text,withheld";
let uri = "https://api.twitter.com/2/tweets/search/recent?query=ekusiadadus".to_string()
+ "&"
+ tweet_fileds;
let mut headers = reqwest::header::HeaderMap::new();
headers.insert(
reqwest::header::CONTENT_TYPE,
"application/json".parse().unwrap(),
);
let response = self
.http_client
.get(&uri, Some(headers))
.await?
.text()
.await?;
let tweets = serde_json::from_str::<TweetResponse>(&response)
.map_err(|e| ServiceError::new(TweetRepoError::HttpClientError, e))?;
Ok(tweets.data)
}
}
@ekusiadadus
Copy link
Author

うぎゃぎゃぎゃって感じ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment