-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add route to search for repositories
- Loading branch information
Showing
14 changed files
with
219 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,56 @@ | ||
use error::Result; | ||
use sea_orm::prelude::Uuid; | ||
use store::objects::{GithubIssue, RepositoryView}; | ||
use store::objects::{GithubIssue, RepositoryView, SearchRepository}; | ||
use support::pagination::Pagination; | ||
|
||
use super::data::GetIssuesParams; | ||
use super::data::{GetIssuesParams, SearchRepositoryParams}; | ||
|
||
#[async_trait] | ||
pub trait DbRepositoryContract { | ||
/// | ||
/// Get paginated list of issues for repository | ||
/// | ||
async fn get_issues_for_repository( | ||
&self, | ||
repository_id: Uuid, | ||
params: GetIssuesParams, | ||
) -> Result<Pagination<GithubIssue>>; | ||
|
||
/// | ||
/// Get repository view | ||
/// | ||
async fn get_repository(&self, id: Uuid) -> Result<RepositoryView>; | ||
|
||
/// | ||
/// Search over repositories | ||
/// | ||
async fn search_repositories( | ||
&self, | ||
params: SearchRepositoryParams, | ||
) -> Result<Pagination<SearchRepository>>; | ||
} | ||
|
||
#[async_trait] | ||
pub trait RepositoryContract { | ||
/// | ||
/// Get paginated list of issues for repository | ||
/// | ||
async fn get_issues_for_repository( | ||
&self, | ||
repository_id: Uuid, | ||
params: GetIssuesParams, | ||
) -> Result<Pagination<GithubIssue>>; | ||
|
||
/// | ||
/// Get repository view | ||
/// | ||
async fn get_repository(&self, id: Uuid) -> Result<RepositoryView>; | ||
|
||
/// | ||
/// Search over repositories | ||
/// | ||
async fn search_repositories( | ||
&self, | ||
params: SearchRepositoryParams, | ||
) -> Result<Pagination<SearchRepository>>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,5 @@ | ||
mod get_issues; | ||
pub use get_issues::{GetIssuesParams, GetIssuesParamsPayload}; | ||
|
||
mod search; | ||
pub use search::{SearchRepositoryParams, SearchRepositoryParamsPayload}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
use sea_orm::prelude::Uuid; | ||
use support::order::Order; | ||
use utoipa::IntoParams; | ||
use validify::Validify; | ||
|
||
#[derive(Validify, Deserialize, IntoParams, Debug)] | ||
pub struct SearchRepositoryParams { | ||
pub order_by: Option<String>, | ||
pub order: Option<Order>, | ||
pub page: Option<u64>, | ||
pub per_page: Option<u64>, | ||
pub language: Option<String>, | ||
pub repository: Option<String>, | ||
pub project_id: Option<Uuid>, | ||
pub project: Option<String>, | ||
pub archived: Option<bool> | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,16 @@ | ||
use super::handlers::*; | ||
use store::objects::{GithubIssue, RepositoryView}; | ||
use support::pagination::PaginatedGithubIssue; | ||
use support::pagination::{PaginatedGithubIssue, PaginatedRepositories}; | ||
use utoipa::OpenApi; | ||
|
||
#[derive(OpenApi)] | ||
#[openapi( | ||
paths(get_issues, get_repository_by_id), | ||
components(schemas(RepositoryView, PaginatedGithubIssue, GithubIssue)) | ||
paths(get_issues, get_repository_by_id, get_search), | ||
components(schemas( | ||
RepositoryView, | ||
PaginatedGithubIssue, | ||
GithubIssue, | ||
PaginatedRepositories | ||
)) | ||
)] | ||
pub struct RepositoryDocs; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
use actix_web::web::Query; | ||
use actix_web::{web::Data, HttpResponse}; | ||
use error::Result; | ||
use validify::Validate; | ||
|
||
use super::super::data::{SearchRepositoryParams, SearchRepositoryParamsPayload}; | ||
|
||
use super::super::contract::RepositoryContract; | ||
|
||
#[utoipa::path( | ||
get, | ||
path = "/api/v1/repository/search", | ||
params(SearchRepositoryParams), | ||
responses( | ||
( | ||
status = 200, | ||
description = "Crypto currency data with all full data for repositories", | ||
body = PaginatedRepositories | ||
) | ||
) | ||
)] | ||
pub async fn get_search<S: RepositoryContract>( | ||
service: Data<S>, | ||
params: Query<SearchRepositoryParamsPayload>, | ||
) -> Result<HttpResponse> { | ||
params.validate()?; | ||
|
||
let params = params.into_inner().into(); | ||
let value = service.search_repositories(params).await?; | ||
Ok(HttpResponse::Ok().json(value)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
use chrono::NaiveDateTime; | ||
use sea_orm::{prelude::Uuid, FromQueryResult}; | ||
|
||
#[derive(FromQueryResult, Serialize, Deserialize, ToSchema)] | ||
#[serde(rename_all = "camelCase")] | ||
pub struct SearchRepository { | ||
pub id: Uuid, | ||
pub repository_name: String, | ||
pub language: Option<String>, | ||
pub stargazers_count: i64, | ||
pub forks_count: i64, | ||
pub created_at: NaiveDateTime, | ||
pub updated_at: NaiveDateTime, | ||
pub archived: bool, | ||
pub project_id: Uuid, | ||
pub project: String, | ||
pub url: String, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters