updated docker compose and formatted backend.

This commit is contained in:
2026-04-06 13:44:50 +01:00
parent d33eee1281
commit 0f692e4372
4 changed files with 36 additions and 35 deletions
View File
+34 -35
View File
@@ -4,23 +4,26 @@
#[macro_use] #[macro_use]
extern crate rocket; extern crate rocket;
pub mod messenger;
pub mod api; pub mod api;
pub mod repo;
pub mod error;
pub mod svc;
pub mod model;
pub mod cli; pub mod cli;
pub mod error;
pub mod messenger;
pub mod model;
pub mod repo;
pub mod svc;
use crate::repo::{access_token_repo::AccessTokenRepo, Repo};
use crate::repo::message_repo::MessageRepository;
use crate::repo::user_repo::UserRepository;
use crate::repo::space_repo::SpaceRepository;
use crate::repo::channel_repo::ChannelRepository; use crate::repo::channel_repo::ChannelRepository;
use crate::repo::message_repo::MessageRepository;
use crate::repo::space_repo::SpaceRepository;
use crate::repo::user_repo::UserRepository;
use crate::repo::{Repo, access_token_repo::AccessTokenRepo};
use crate::svc::access_token_svc::AccessTokenService;
use crate::svc::auth_svc::AuthService; use crate::svc::auth_svc::AuthService;
use crate::svc::chat_svc::ChatService; use crate::svc::chat_svc::ChatService;
use crate::svc::llm_service::LlmService;
use crate::svc::settings_svc::SettingsService; use crate::svc::settings_svc::SettingsService;
use crate::svc::user_svc::UserService; use crate::svc::user_svc::UserService;
use api::cdn;
use rocket::fs::{FileServer, NamedFile}; use rocket::fs::{FileServer, NamedFile};
use rocket::http::Method; use rocket::http::Method;
use rocket_cors::{AllowedOrigins, CorsOptions}; use rocket_cors::{AllowedOrigins, CorsOptions};
@@ -29,9 +32,6 @@ use sqlx::postgres::PgPoolOptions;
use std::env; use std::env;
use std::sync::{Arc, LazyLock}; use std::sync::{Arc, LazyLock};
use std::time::Duration; use std::time::Duration;
use api::cdn;
use crate::svc::access_token_svc::AccessTokenService;
use crate::svc::llm_service::LlmService;
pub fn rocket() -> rocket::Rocket<rocket::Build> { pub fn rocket() -> rocket::Rocket<rocket::Build> {
if std::env::var("RELEASE_MODE").unwrap_or_default() != "1" { if std::env::var("RELEASE_MODE").unwrap_or_default() != "1" {
@@ -39,6 +39,7 @@ pub fn rocket() -> rocket::Rocket<rocket::Build> {
} }
let db_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set"); let db_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
println!("Running with database URL: {}", db_url);
let pool = PgPoolOptions::new() let pool = PgPoolOptions::new()
.max_connections(25) .max_connections(25)
@@ -53,9 +54,22 @@ pub fn rocket() -> rocket::Rocket<rocket::Build> {
let space_repo: Arc<dyn repo::SpaceRepo> = Arc::new(SpaceRepository::new(pool.clone())); let space_repo: Arc<dyn repo::SpaceRepo> = Arc::new(SpaceRepository::new(pool.clone()));
let channel_repo: Arc<dyn repo::ChannelRepo> = Arc::new(ChannelRepository::new(pool.clone())); let channel_repo: Arc<dyn repo::ChannelRepo> = Arc::new(ChannelRepository::new(pool.clone()));
let llm_service = LlmService::new(); let llm_service = LlmService::new();
let chat_service = ChatService::new(32, llm_service.clone(), message_repo.clone(), user_repo.clone(), channel_repo.clone(), space_repo.clone()); let chat_service = ChatService::new(
32,
llm_service.clone(),
message_repo.clone(),
user_repo.clone(),
channel_repo.clone(),
space_repo.clone(),
);
rocket_builder(user_repo, token_repo, space_repo, channel_repo, chat_service) rocket_builder(
user_repo,
token_repo,
space_repo,
channel_repo,
chat_service,
)
} }
pub fn rocket_builder( pub fn rocket_builder(
@@ -63,10 +77,8 @@ pub fn rocket_builder(
token_repo: Arc<dyn repo::AccessTokenRepoTrait>, token_repo: Arc<dyn repo::AccessTokenRepoTrait>,
space_repo: Arc<dyn repo::SpaceRepo>, space_repo: Arc<dyn repo::SpaceRepo>,
channel_repo: Arc<dyn repo::ChannelRepo>, channel_repo: Arc<dyn repo::ChannelRepo>,
chat_service: ChatService chat_service: ChatService,
) -> rocket::Rocket<rocket::Build> { ) -> rocket::Rocket<rocket::Build> {
let cors = CorsOptions::default() let cors = CorsOptions::default()
.allowed_origins(AllowedOrigins::all()) .allowed_origins(AllowedOrigins::all())
.allowed_methods( .allowed_methods(
@@ -93,40 +105,29 @@ pub fn rocket_builder(
.attach(Template::fairing()) .attach(Template::fairing())
.mount("/static", FileServer::from("static")) .mount("/static", FileServer::from("static"))
.mount("/cdn", cdn::routes()) .mount("/cdn", cdn::routes())
.mount( .mount("/", routes![favicon,])
"/",
routes![
favicon,
],
)
.mount( .mount(
"/api", "/api",
routes![ routes![
cdn::upload_profile_pic, cdn::upload_profile_pic,
api::profile::display_name, api::profile::display_name,
// basic auth // basic auth
api::auth::login, api::auth::login,
api::auth::signup, api::auth::signup,
// 2fa // 2fa
api::totp::confirm_totp, api::totp::confirm_totp,
api::totp::disable_totp, api::totp::disable_totp,
api::totp::get_totp, api::totp::get_totp,
api::totp::get_totp_status, api::totp::get_totp_status,
api::totp::verify_totp, api::totp::verify_totp,
// chat // chat
api::chat::event_stream, api::chat::event_stream,
api::chat::post_message, api::chat::post_message,
// user settings // user settings
api::settings::change_display_name, api::settings::change_display_name,
api::settings::change_password, api::settings::change_password,
api::settings::change_username, api::settings::change_username,
api::settings::delete_account, api::settings::delete_account,
// spaces // spaces
api::space::list_spaces, api::space::list_spaces,
api::space::list_channels, api::space::list_channels,
@@ -135,15 +136,13 @@ pub fn rocket_builder(
) )
.register( .register(
"/", "/",
catchers![ catchers![error::handle_401, error::handle_404, error::handle_default,],
error::handle_401,
error::handle_404,
error::handle_default,
],
) )
} }
#[get("/favicon.ico")] #[get("/favicon.ico")]
pub async fn favicon() -> NamedFile { pub async fn favicon() -> NamedFile {
NamedFile::open("static/favicon.ico").await.unwrap() NamedFile::open("static/favicon.ico")
.await
.expect("favicon not found")
} }
View File
+2
View File
@@ -9,6 +9,8 @@ services:
environment: environment:
- ROCKET_SECRET_KEY=${ROCKET_SECRET_KEY} - ROCKET_SECRET_KEY=${ROCKET_SECRET_KEY}
- DATABASE_URL=${DATABASE_URL} - DATABASE_URL=${DATABASE_URL}
- JWT_SECRET=${JWT_SECRET}
- RELEASE_MODE=1
redis: redis:
container_name: chatapp_redis container_name: chatapp_redis
image: docker.io/library/redis:alpine image: docker.io/library/redis:alpine