Implement site settings for title, header, and owner
This commit is contained in:
parent
5715225050
commit
a95db555ac
10 changed files with 112 additions and 11 deletions
|
@ -6,6 +6,7 @@ mod m20230204_014834_create_post_blocks;
|
|||
mod m20230204_014838_create_page_blocks;
|
||||
mod m20230204_194846_create_menus;
|
||||
mod m20230204_201059_create_menu_entries;
|
||||
mod m20230205_022300_create_settings;
|
||||
pub struct Migrator;
|
||||
|
||||
#[async_trait::async_trait]
|
||||
|
@ -18,6 +19,7 @@ impl MigratorTrait for Migrator {
|
|||
Box::new(m20230204_014838_create_page_blocks::Migration),
|
||||
Box::new(m20230204_194846_create_menus::Migration),
|
||||
Box::new(m20230204_201059_create_menu_entries::Migration),
|
||||
Box::new(m20230205_022300_create_settings::Migration),
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
43
migration/src/m20230205_022300_create_settings.rs
Normal file
43
migration/src/m20230205_022300_create_settings.rs
Normal file
|
@ -0,0 +1,43 @@
|
|||
use sea_orm_migration::prelude::*;
|
||||
|
||||
#[derive(DeriveMigrationName)]
|
||||
pub struct Migration;
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl MigrationTrait for Migration {
|
||||
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||
manager
|
||||
.create_table(
|
||||
Table::create()
|
||||
.table(Settings::Table)
|
||||
.if_not_exists()
|
||||
.col(
|
||||
ColumnDef::new(Settings::Id)
|
||||
.string()
|
||||
.not_null()
|
||||
.primary_key(),
|
||||
)
|
||||
.col(ColumnDef::new(Settings::SiteName).string().not_null())
|
||||
.col(ColumnDef::new(Settings::SiteHeader).string().not_null())
|
||||
.col(ColumnDef::new(Settings::SiteOwner).string().not_null())
|
||||
.to_owned(),
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||
manager
|
||||
.drop_table(Table::drop().table(Settings::Table).to_owned())
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
/// Learn more at https://docs.rs/sea-query#iden
|
||||
#[derive(Iden)]
|
||||
enum Settings {
|
||||
Table,
|
||||
Id,
|
||||
SiteName,
|
||||
SiteHeader,
|
||||
SiteOwner,
|
||||
}
|
|
@ -8,3 +8,4 @@ pub mod page;
|
|||
pub mod page_block;
|
||||
pub mod post;
|
||||
pub mod post_block;
|
||||
pub mod settings;
|
||||
|
|
|
@ -6,3 +6,4 @@ pub use super::page::Entity as Page;
|
|||
pub use super::page_block::Entity as PageBlock;
|
||||
pub use super::post::Entity as Post;
|
||||
pub use super::post_block::Entity as PostBlock;
|
||||
pub use super::settings::Entity as Settings;
|
||||
|
|
18
src/entities/settings.rs
Normal file
18
src/entities/settings.rs
Normal file
|
@ -0,0 +1,18 @@
|
|||
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.10.7
|
||||
|
||||
use sea_orm::entity::prelude::*;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
|
||||
#[sea_orm(table_name = "settings")]
|
||||
pub struct Model {
|
||||
#[sea_orm(primary_key, auto_increment = false)]
|
||||
pub id: String,
|
||||
pub site_name: String,
|
||||
pub site_header: String,
|
||||
pub site_owner: String,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||
pub enum Relation {}
|
||||
|
||||
impl ActiveModelBehavior for ActiveModel {}
|
|
@ -21,7 +21,8 @@ pub(crate) struct PageTemplate {
|
|||
description: Option<String>,
|
||||
show_title: bool,
|
||||
content_blocks: Vec<BlockTypes>,
|
||||
year: String
|
||||
year: String,
|
||||
settings: settings::Model
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
|
@ -35,6 +36,7 @@ pub(crate) struct PostTemplate {
|
|||
last_updated: Option<String>,
|
||||
content_blocks: Vec<BlockTypes>,
|
||||
year: String,
|
||||
settings: settings::Model
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
|
@ -42,7 +44,8 @@ pub(crate) struct PostTemplate {
|
|||
pub(crate) struct NotFoundTemplate {
|
||||
menu: Vec<menu_entry::Model>,
|
||||
slug: String,
|
||||
year: String
|
||||
year: String,
|
||||
settings: settings::Model
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
|
@ -54,7 +57,8 @@ pub(crate) struct HomeSpecialTemplate {
|
|||
description: Option<String>,
|
||||
show_title: bool,
|
||||
content_blocks: Vec<BlockTypes>,
|
||||
year: String
|
||||
year: String,
|
||||
settings: settings::Model
|
||||
}
|
||||
|
||||
// Handle the special home page
|
||||
|
@ -105,6 +109,13 @@ pub(crate) async fn root(
|
|||
.await
|
||||
.expect("Failed to get primary menu items!");
|
||||
|
||||
let settings: settings::Model = Settings::find()
|
||||
.filter(settings::Column::Id.eq("current"))
|
||||
.one(&state.db_conn)
|
||||
.await
|
||||
.expect("Failed to get site settings!")
|
||||
.unwrap();
|
||||
|
||||
HomeSpecialTemplate {
|
||||
title: page_meta.clone().title,
|
||||
description: page_meta.clone().description,
|
||||
|
@ -112,6 +123,7 @@ pub(crate) async fn root(
|
|||
content_blocks,
|
||||
year: "2023".to_string(),
|
||||
draft: false,
|
||||
menu
|
||||
menu,
|
||||
settings
|
||||
}
|
||||
}
|
|
@ -27,6 +27,13 @@ pub(crate) async fn resolver(
|
|||
.await
|
||||
.expect("Failed to get primary menu items!");
|
||||
|
||||
let settings: settings::Model = Settings::find()
|
||||
.filter(settings::Column::Id.eq("current"))
|
||||
.one(&state.db_conn)
|
||||
.await
|
||||
.expect("Failed to get site settings!")
|
||||
.unwrap();
|
||||
|
||||
let page_search: Result<Option<page::Model>, DbErr> = Page::find()
|
||||
.filter(page::Column::Slug.eq(&slug))
|
||||
.one(&state.db_conn)
|
||||
|
@ -36,7 +43,7 @@ pub(crate) async fn resolver(
|
|||
Ok(page_result) => {
|
||||
match page_result {
|
||||
Some(page_result) => page_result,
|
||||
None => return (StatusCode::NOT_FOUND, NotFoundTemplate { slug, year: "2023".to_owned(), menu }).into_response(),
|
||||
None => return (StatusCode::NOT_FOUND, NotFoundTemplate { slug, year: "2023".to_owned(), menu, settings }).into_response(),
|
||||
}
|
||||
},
|
||||
Err(e) => {
|
||||
|
@ -77,6 +84,7 @@ pub(crate) async fn resolver(
|
|||
show_title: page_meta.clone().show_title,
|
||||
content_blocks,
|
||||
year: "2023".to_string(),
|
||||
menu
|
||||
menu,
|
||||
settings
|
||||
}).into_response()
|
||||
}
|
|
@ -27,6 +27,13 @@ pub(crate) async fn resolver(
|
|||
.await
|
||||
.expect("Failed to get primary menu items!");
|
||||
|
||||
let settings: settings::Model = Settings::find()
|
||||
.filter(settings::Column::Id.eq("current"))
|
||||
.one(&state.db_conn)
|
||||
.await
|
||||
.expect("Failed to get site settings!")
|
||||
.unwrap();
|
||||
|
||||
let post_search: Result<Option<post::Model>, DbErr> = Post::find()
|
||||
.filter(post::Column::Slug.eq(&slug))
|
||||
.one(&state.db_conn)
|
||||
|
@ -36,7 +43,7 @@ pub(crate) async fn resolver(
|
|||
Ok(post_result) => {
|
||||
match post_result {
|
||||
Some(post_result) => post_result,
|
||||
None => return (StatusCode::NOT_FOUND, NotFoundTemplate { slug, year: "2023".to_owned(), menu }).into_response(),
|
||||
None => return (StatusCode::NOT_FOUND, NotFoundTemplate { slug, year: "2023".to_owned(), menu, settings }).into_response(),
|
||||
}
|
||||
},
|
||||
Err(e) => {
|
||||
|
@ -84,5 +91,6 @@ pub(crate) async fn resolver(
|
|||
content_blocks,
|
||||
year: "2023".to_string(),
|
||||
menu,
|
||||
settings
|
||||
}).into_response()
|
||||
}
|
|
@ -13,6 +13,7 @@ pub(crate) struct PageTemplate {
|
|||
menu: Vec<menu_entry::Model>,
|
||||
posts: Vec<post::Model>,
|
||||
year: String,
|
||||
settings: settings::Model
|
||||
}
|
||||
|
||||
pub(crate) async fn posts(state: State<AppState>) -> impl IntoResponse {
|
||||
|
@ -28,6 +29,13 @@ pub(crate) async fn posts(state: State<AppState>) -> impl IntoResponse {
|
|||
.await
|
||||
.expect("Failed to get primary menu items!");
|
||||
|
||||
let settings: settings::Model = Settings::find()
|
||||
.filter(settings::Column::Id.eq("current"))
|
||||
.one(&state.db_conn)
|
||||
.await
|
||||
.expect("Failed to get site settings!")
|
||||
.unwrap();
|
||||
|
||||
let posts: Vec<post::Model> = Post::find()
|
||||
.filter(post::Column::Draft.eq(false))
|
||||
.order_by_desc(post::Column::Published)
|
||||
|
@ -35,5 +43,5 @@ pub(crate) async fn posts(state: State<AppState>) -> impl IntoResponse {
|
|||
.await
|
||||
.expect("Failed to load posts!");
|
||||
|
||||
PageTemplate { menu, posts, year: "2023".to_owned() }
|
||||
PageTemplate { menu, posts, year: "2023".to_owned(), settings }
|
||||
}
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title>Evie / eviee / uwueviee - {% block title %}{{ title }}{% endblock %}</title>
|
||||
<title>{{ settings.site_name }} - {% block title %}{{ title }}{% endblock %}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/static/css/sakura-pink.css" media="screen" type="text/css">
|
||||
<link rel="stylesheet" href="/static/css/sakura-vader.css" media="screen and (prefers-color-scheme: dark)" type="text/css">
|
||||
<link rel="stylesheet" href="/static/css/meow.css" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>🐈 Evie / eviee / uwueviee</h1>
|
||||
<h1>{{ settings.site_header }}</h1>
|
||||
|
||||
<ul class="primary-menu">
|
||||
{% for entry in menu %}
|
||||
|
@ -25,6 +25,6 @@
|
|||
</div>
|
||||
|
||||
<hr />
|
||||
<p class="footer">Proudly powered by <a href="https://git.gaycatgirl.sex/evie/kyanite">Kyanite</a>, Made with 🏳️⚧️💜 and Rust. <i>© {{ year }} Evie Viau</i></p>
|
||||
<p class="footer">Proudly powered by <a href="https://git.gaycatgirl.sex/evie/kyanite">Kyanite</a>, Made with 🏳️⚧️💜 and Rust. <i>© {{ year }} {{ settings.site_owner }}</i></p>
|
||||
</body>
|
||||
</html>
|
Reference in a new issue