fix blog without image
CI / frontend (push) Failing after 1s
CI / backend (push) Failing after 1s

This commit is contained in:
2026-05-21 04:09:02 +02:00
parent 4fae8b5e47
commit 37f88f5ad1
5 changed files with 37 additions and 4 deletions
+1 -1
View File
@@ -85,7 +85,7 @@ pub async fn create_post(
}
let images = extract_images(&payload.content);
if images.is_empty() {
if images.is_empty() && state.site_mode == crate::models::SiteMode::Atelier {
return Err(AppError::BadRequest(
"A gallery entry must include at least one image (![](url) in the markdown body)."
.to_string(),
+21 -2
View File
@@ -20,7 +20,7 @@ use tower_http::{
use tracing::{error, info, warn};
use crate::handlers::contact::RATE_LIMIT_WINDOW_MS;
use crate::models::{ImageDim, PostInfo};
use crate::models::{ImageDim, PostInfo, SiteMode};
pub struct CachedPost {
pub info: PostInfo,
@@ -31,6 +31,7 @@ pub struct AppState {
pub admin_token: String,
pub data_dir: PathBuf,
pub cookie_secure: bool,
pub site_mode: SiteMode,
pub post_lock: Mutex<()>,
pub posts_cache: RwLock<Vec<CachedPost>>,
pub image_dims_cache: RwLock<HashMap<String, ImageDim>>,
@@ -55,8 +56,25 @@ async fn main() {
let cookie_secure = env::var("COOKIE_SECURE")
.map(|v| v != "false" && v != "0")
.unwrap_or(true);
let site_mode = env::var("SITE_MODE")
.map(|v| {
if v.to_lowercase() == "blog" {
SiteMode::Blog
} else {
SiteMode::Atelier
}
})
.unwrap_or(SiteMode::Atelier);
info!("Initializing backend with data dir: {:?}", data_dir);
info!(
"Initializing backend with data dir: {:?}, mode: {:?}",
data_dir,
if site_mode == SiteMode::Blog {
"blog"
} else {
"atelier"
}
);
let posts_dir = data_dir.join("posts");
let uploads_dir = data_dir.join("uploads");
@@ -71,6 +89,7 @@ async fn main() {
admin_token,
data_dir,
cookie_secure,
site_mode,
post_lock: Mutex::new(()),
posts_cache: RwLock::new(Vec::new()),
image_dims_cache: RwLock::new(HashMap::new()),
+13
View File
@@ -2,6 +2,19 @@ use chrono::NaiveDate;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum SiteMode {
Blog,
Atelier,
}
impl Default for SiteMode {
fn default() -> Self {
Self::Atelier
}
}
#[derive(Serialize, Deserialize, Clone)]
pub struct ContactLink {
pub kind: String,
+1
View File
@@ -17,6 +17,7 @@ services:
- DATA_DIR=/app/data
- COOKIE_SECURE=${COOKIE_SECURE:-true}
- FRONTEND_ORIGIN=${FRONTEND_ORIGIN:-}
- SITE_MODE=${SITE_MODE:-atelier}
- RUST_LOG=${RUST_LOG:-info}
restart: unless-stopped
networks:
@@ -51,7 +51,7 @@ export function usePostMeta({ editSlug, getContent, setContent, mode = 'atelier'
notify('Title, slug, and body are required.', 'error');
return;
}
if (!/!\[[^\]]*\]\([^)]+\)/.test(content)) {
if (mode === 'atelier' && !/!\[[^\]]*\]\([^)]+\)/.test(content)) {
notify(
'Add at least one image before saving — drag, paste, or use the Add image button.',
'error',