Skip to content

Commit

Permalink
extract list_title use_case
Browse files Browse the repository at this point in the history
  • Loading branch information
bouzuya committed Sep 6, 2020
1 parent 084c10a commit b412fe3
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 12 deletions.
21 changes: 9 additions & 12 deletions src/handler/titles.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
use crate::handler_helpers::is_all;
use crate::helpers::{is_obsoleted, read_obsoleted_map, read_title_map};
use crate::template::{TitlesItemTemplate, TitlesTemplate};
use crate::url_helpers::{title_url, titles_url};
use actix_web::HttpResponse;
use askama::Template;

pub async fn titles(req: actix_web::HttpRequest) -> std::io::Result<HttpResponse> {
pub async fn titles(req: actix_web::HttpRequest) -> Result<HttpResponse, actix_web::Error> {
let all = is_all(&req);
let obsoleted_map = read_obsoleted_map()?;
let title_map = read_title_map()?;
let titles = title_map
.iter()
.map(|(title, page_ids)| TitlesItemTemplate {
obsoleted: !page_ids
.iter()
.any(|page_id| !is_obsoleted(&obsoleted_map, page_id)),
title: title.to_string(),
url: title_url(&title),
let titles =
crate::use_case::list_title::list_title(all).map_err(|_| actix_web::Error::from(()))?;
let titles = titles
.into_iter()
.map(|title| TitlesItemTemplate {
obsoleted: title.obsoleted,
title: title.title.to_string(),
url: title_url(&title.title),
})
.filter(|template| all || !template.obsoleted)
.collect::<Vec<TitlesItemTemplate>>();
Expand Down
24 changes: 24 additions & 0 deletions src/use_case/list_title.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
use crate::helpers::{is_obsoleted, read_obsoleted_map, read_title_map};
use crate::page_title::PageTitle;

#[derive(Clone)]
pub struct TitleItem {
pub title: PageTitle,
pub obsoleted: bool,
}

pub fn list_title(all: bool) -> Result<Vec<TitleItem>, Box<dyn std::error::Error>> {
let obsoleted_map = read_obsoleted_map()?;
let title_map = read_title_map()?;
let titles = title_map
.into_iter()
.map(|(title, page_ids)| TitleItem {
obsoleted: !page_ids
.iter()
.any(|page_id| !is_obsoleted(&obsoleted_map, page_id)),
title,
})
.filter(|template| all || !template.obsoleted)
.collect::<Vec<TitleItem>>();
Ok(titles)
}
1 change: 1 addition & 0 deletions src/use_case/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
pub mod list;
pub mod list_title;

0 comments on commit b412fe3

Please sign in to comment.