feat: initialize thoughts-frontend with Next.js, TypeScript, and ESLint

- Add ESLint configuration for Next.js and TypeScript support.
- Create Next.js configuration file with standalone output option.
- Initialize package.json with scripts for development, build, and linting.
- Set up PostCSS configuration for Tailwind CSS.
- Add SVG assets for UI components.
- Create TypeScript configuration for strict type checking and module resolution.
This commit is contained in:
2025-09-05 17:14:45 +02:00
parent 6bd06ff2c8
commit e5747eaaf3
104 changed files with 7484 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
[package]
name = "utils"
version = "0.1.0"
edition = "2021"
publish = false
[lib]
name = "utils"
path = "src/lib.rs"
[dependencies]
migration = { path = "../migration" }
axum = { workspace = true }
tower = { workspace = true, features = ["util"] }
sea-orm = { workspace = true, features = ["sqlx-sqlite", "sqlx-postgres"] }

View File

@@ -0,0 +1,3 @@
# utils
Some utility functions to facilitate development.

View File

@@ -0,0 +1,8 @@
use migration::{sea_orm::DatabaseConnection, DbErr, Migrator, MigratorTrait, SchemaManager};
pub async fn migrate(conn: &DatabaseConnection) -> Result<(), DbErr> {
let schema_manager = SchemaManager::new(conn);
Migrator::up(conn, None).await?;
assert!(schema_manager.has_table("user").await?);
Ok(())
}

View File

@@ -0,0 +1,22 @@
use std::process::Command;
fn touch(file_name: &str) {
if cfg!(target_os = "windows") {
Command::new("cmd")
.args(["/C", &format!("type nul >> {}", file_name)])
.output()
.expect("failed to execute touch");
} else {
Command::new("touch")
.arg(file_name)
.output()
.expect("failed to execute touch");
}
}
pub fn create_dev_db(db_url: &str) {
let prefix = "sqlite://";
if let Some(file_name) = db_url.strip_prefix(prefix) {
touch(file_name);
}
}

View File

@@ -0,0 +1,6 @@
mod db;
mod file;
pub mod testing;
pub use db::migrate;
pub use file::create_dev_db;

View File

@@ -0,0 +1,21 @@
use axum::{body::Body, http::Request, response::Response, Router};
use tower::ServiceExt;
pub async fn make_get_request(app: Router, url: &str) -> Response {
app.oneshot(Request::builder().uri(url).body(Body::empty()).unwrap())
.await
.unwrap()
}
pub async fn make_post_request(app: Router, url: &str, body: String) -> Response {
app.oneshot(
Request::builder()
.method("POST")
.uri(url)
.header("Content-Type", "application/json")
.body(Body::from(body))
.unwrap(),
)
.await
.unwrap()
}

View File

@@ -0,0 +1,9 @@
use sea_orm::{Database, DatabaseConnection, DbErr};
use crate::migrate;
pub async fn setup_test_db(db_url: &str) -> Result<DatabaseConnection, DbErr> {
let db = Database::connect(db_url).await?;
migrate(&db).await?;
Ok(db)
}

View File

@@ -0,0 +1,5 @@
mod api;
mod db;
pub use api::{make_get_request, make_post_request};
pub use db::setup_test_db;