diff --git a/src/admin.rs b/src/admin.rs index 0706fb5..0214779 100644 --- a/src/admin.rs +++ b/src/admin.rs @@ -56,8 +56,12 @@ fn panel(mut cookies: Cookies<'_>) -> Result<Template, Redirect> { match cookies.get_private("user") { Some(cookie) => { if cookie.value() == password { - let context = get_context(); + let mut context = get_context(); + let (all_posts, n_posts) = posts::get_posts(None); + + context.insert("posts", &all_posts); + context.insert("n_posts", &n_posts); Ok(Template::render("admin/panel", context)) } else { Err(Redirect::to("/admin")) diff --git a/src/controllers.rs b/src/controllers.rs index d69f8ba..f39105e 100644 --- a/src/controllers.rs +++ b/src/controllers.rs @@ -17,19 +17,23 @@ pub mod posts { use crate::controllers::*; use crate::models::{NewPost, Post}; - pub const MAX_POSTS_PER_PAGE: u64 = 20; + pub const MAX_POSTS_PER_PAGE: u64 = 10; - pub fn get_posts(page: u64) -> (Vec<Post>, i64) { + pub fn get_posts(page: Option<u64>) -> (Vec<Post>, i64) { use crate::schema::posts::dsl::*; let connection = establish_connection(); - let visible_posts = posts - .filter(published.eq(true)) - .order(created_at.desc()) - .limit(MAX_POSTS_PER_PAGE as i64) - .offset((MAX_POSTS_PER_PAGE * (page - 1)) as i64) - .load::<Post>(&connection) - .expect("Error loading posts"); + let visible_posts = posts.filter(published.eq(true)).order(created_at.desc()); + let visible_posts = match page { + Some(number_page) => visible_posts + .limit(MAX_POSTS_PER_PAGE as i64) + .offset((MAX_POSTS_PER_PAGE * (number_page - 1)) as i64) + .load::<Post>(&connection) + .expect("Error loading posts"), + None => visible_posts + .load::<Post>(&connection) + .expect("Error loading posts"), + }; let number_of_posts: i64 = posts .filter(published.eq(true)) diff --git a/src/main.rs b/src/main.rs index c24ed68..aadbed5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,7 +32,7 @@ fn index(page: Option<u64>) -> Template { let mut context = get_context(); - let (posts, n_posts) = posts::get_posts(page); + let (posts, n_posts) = posts::get_posts(Some(page)); let total_pages = (n_posts as f64 / posts::MAX_POSTS_PER_PAGE as f64).ceil() as i64; diff --git a/templates/admin/panel.html.tera b/templates/admin/panel.html.tera index 83858b0..67dc280 100644 --- a/templates/admin/panel.html.tera +++ b/templates/admin/panel.html.tera @@ -1,10 +1,60 @@ {% extends "base" %} -{%block content %} +{% block extracss %} +<style> + div.table { + display: grid; + grid-template-columns: auto 1fr repeat(3, auto); + } + + div.table * { + margin: 0; + padding: 5px; + } + + .colored { + background-color: #dddddd; + padding-color: #dddddd; + } + + div.table a { + color: #444444; + } + + .center { + text-align: center; + } +</style> +{% endblock extracss %} + +{% block content %} <h1>Panel de administración</h1> <h3> - <a href="/admin/add_post">Agregar artículo</a> - <a href="">Editar artículo</a> + <a style="color: #444444" href="/admin/add_post">Agregar artículo</a> + <div class="table"> + <h3>id</h3> + <h3 class="center">Título</h3> + <h3>Visitas</h3> + <h3>Visible</h3> + <h3></h3> + + + {% for post in posts %} + {% if loop.index is odd %} + <p class="colored">{{ post.id }}</p> + <p class="colored"><a href="/post/{{ post.title | slugify }}-{{ post.id }}">{{ post.title }}</a></p> + <p class="colored center">0</p> + <p class="colored center">{{ post.published }}</p> + <p class="colored"><a href="#">Editar</a></p> + {% else %} + <p>{{ post.id }}</p> + <p><a href="/post/{{ post.title | slugify }}-{{ post.id }}">{{ post.title }}</a></p> + <p class="center">0</p> + <p class="center">{{ post.published }}</p> + <p><a href="#">Editar</a></p> + {% endif %} + {% endfor %} + </div> </h3> -{%endblock content %} +{% endblock content %}