mirror of
https://git.joinplu.me/Plume/Plume.git
synced 2024-12-26 03:50:36 +00:00
Add a dashboard
This commit is contained in:
parent
7a3215edaa
commit
edbeeef640
6 changed files with 53 additions and 3 deletions
|
@ -1,6 +1,5 @@
|
|||
use activitypub::{
|
||||
Actor,
|
||||
actor::Person,
|
||||
activity::{Accept, Announce, Create, Follow, Like, Undo},
|
||||
object::Note
|
||||
};
|
||||
|
|
|
@ -104,6 +104,8 @@ fn main() {
|
|||
|
||||
routes::user::me,
|
||||
routes::user::details,
|
||||
routes::user::dashboard,
|
||||
routes::user::dashboard_auth,
|
||||
routes::user::followers,
|
||||
routes::user::edit,
|
||||
routes::user::edit_auth,
|
||||
|
|
|
@ -7,7 +7,7 @@ use reqwest::{
|
|||
use serde_json;
|
||||
use url::Url;
|
||||
use chrono::NaiveDateTime;
|
||||
use diesel::{self, QueryDsl, RunQueryDsl, ExpressionMethods, PgConnection};
|
||||
use diesel::{self, QueryDsl, RunQueryDsl, ExpressionMethods, PgConnection, dsl::any};
|
||||
use openssl::{
|
||||
hash::MessageDigest,
|
||||
pkey::{PKey, Private},
|
||||
|
@ -71,6 +71,14 @@ impl Blog {
|
|||
.into_iter().nth(0)
|
||||
}
|
||||
|
||||
pub fn find_for_author(conn: &PgConnection, author_id: i32) -> Vec<Blog> {
|
||||
use schema::blog_authors;
|
||||
let author_ids = blog_authors::table.filter(blog_authors::author_id.eq(author_id)).select(blog_authors::blog_id);
|
||||
blogs::table.filter(blogs::id.eq(any(author_ids)))
|
||||
.load::<Blog>(conn)
|
||||
.expect("Couldn't load blogs ")
|
||||
}
|
||||
|
||||
pub fn find_by_name(conn: &PgConnection, name: String, instance_id: i32) -> Option<Blog> {
|
||||
blogs::table.filter(blogs::actor_id.eq(name))
|
||||
.filter(blogs::instance_id.eq(instance_id))
|
||||
|
|
|
@ -15,6 +15,7 @@ use activity_pub::{
|
|||
};
|
||||
use db_conn::DbConn;
|
||||
use models::{
|
||||
blogs::Blog,
|
||||
follows,
|
||||
instance::Instance,
|
||||
posts::Post,
|
||||
|
@ -74,6 +75,20 @@ fn details(name: String, conn: DbConn, account: Option<User>) -> Template {
|
|||
}))
|
||||
}
|
||||
|
||||
#[get("/dashboard")]
|
||||
fn dashboard(user: User, conn: DbConn) -> Template {
|
||||
let blogs = Blog::find_for_author(&*conn, user.id);
|
||||
Template::render("users/dashboard", json!({
|
||||
"account": user,
|
||||
"blogs": blogs
|
||||
}))
|
||||
}
|
||||
|
||||
#[get("/dashboard", rank = 2)]
|
||||
fn dashboard_auth() -> Flash<Redirect> {
|
||||
utils::requires_login("You need to be logged in order to access your dashboard", "/dashboard")
|
||||
}
|
||||
|
||||
#[get("/@/<name>/follow")]
|
||||
fn follow(name: String, conn: DbConn, user: User) -> Redirect {
|
||||
let target = User::find_by_fqn(&*conn, name.clone()).unwrap();
|
||||
|
@ -91,7 +106,7 @@ fn follow(name: String, conn: DbConn, user: User) -> Redirect {
|
|||
|
||||
#[get("/@/<name>/follow", rank = 2)]
|
||||
fn follow_auth(name: String) -> Flash<Redirect> {
|
||||
utils::requires_login("You need to belogged in order to follow someone", &format!("/@/{}/follow", name))
|
||||
utils::requires_login("You need to be logged in order to follow someone", &format!("/@/{}/follow", name))
|
||||
}
|
||||
|
||||
#[get("/@/<name>/followers", rank = 2)]
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
</nav>
|
||||
<nav>
|
||||
{% if account %}
|
||||
<a href="/dashboard">Dashboard</a>
|
||||
<a href="/notifications">Notifications</a>
|
||||
<a href="/me">My account</a>
|
||||
<a href="/logout">Log Out</a>
|
||||
|
|
25
templates/users/dashboard.tera
Normal file
25
templates/users/dashboard.tera
Normal file
|
@ -0,0 +1,25 @@
|
|||
{% extends "base" %}
|
||||
{% import "macros" as macros %}
|
||||
|
||||
{% block title %}
|
||||
Dashboard
|
||||
{% endblock title %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Your Dashboard</h1>
|
||||
|
||||
<section>
|
||||
<h2>Your Blogs</h2>
|
||||
{% if blogs | length < 1 %}
|
||||
<p>You don't have any blog yet. Create your own, or ask to join one.</p>
|
||||
{% endif %}
|
||||
<a class="button inline-block" href="/blogs/new">Start a new blog</a>
|
||||
<div class="list">
|
||||
{% for blog in blogs %}
|
||||
<div class="card">
|
||||
<h3><a href="/~/{{ blog.actor_id }}/">{{ blog.title }}</a></h3>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
{% endblock content %}
|
Loading…
Reference in a new issue