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,33 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "blog")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
pub author_id: i32,
pub title: String,
pub content: String,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {
#[sea_orm(
belongs_to = "super::user::Entity",
from = "Column::AuthorId",
to = "super::user::Column::Id",
on_update = "NoAction",
on_delete = "Cascade"
)]
User,
}
impl Related<super::user::Entity> for Entity {
fn to() -> RelationDef {
Relation::User.def()
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@@ -0,0 +1,6 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0
pub mod prelude;
pub mod blog;
pub mod user;

View File

@@ -0,0 +1,4 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0
pub use super::blog::Entity as Blog;
pub use super::user::Entity as User;

View File

@@ -0,0 +1,26 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
#[sea_orm(unique)]
pub username: String,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {
#[sea_orm(has_many = "super::blog::Entity")]
Blog,
}
impl Related<super::blog::Entity> for Entity {
fn to() -> RelationDef {
Relation::Blog.def()
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@@ -0,0 +1,4 @@
pub mod domains;
pub mod params;
pub mod queries;
pub mod schemas;

View File

@@ -0,0 +1,14 @@
use serde::Deserialize;
use utoipa::ToSchema;
use validator::Validate;
#[derive(Deserialize, Validate, ToSchema)]
pub struct CreateBlogParams {
pub author_id: u32,
#[validate(length(min = 2))]
pub title: String,
#[validate(length(min = 2))]
pub content: String,
}

View File

@@ -0,0 +1,2 @@
pub mod blog;
pub mod user;

View File

@@ -0,0 +1,9 @@
use serde::Deserialize;
use utoipa::ToSchema;
use validator::Validate;
#[derive(Deserialize, Validate, ToSchema)]
pub struct CreateUserParams {
#[validate(length(min = 2))]
pub username: String,
}

View File

@@ -0,0 +1,9 @@
use serde::Deserialize;
use utoipa::IntoParams;
#[derive(Deserialize, Default, IntoParams)]
#[into_params(style = Form, parameter_in = Query)]
pub struct BlogQuery {
#[param(nullable = true)]
pub title: Option<String>,
}

View File

@@ -0,0 +1,2 @@
pub mod blog;
pub mod user;

View File

@@ -0,0 +1,9 @@
use serde::Deserialize;
use utoipa::IntoParams;
#[derive(Deserialize, Default, IntoParams)]
#[into_params(style = Form, parameter_in = Query)]
pub struct UserQuery {
#[param(nullable = true)]
pub username: Option<String>,
}

View File

@@ -0,0 +1,36 @@
use serde::Serialize;
use utoipa::ToSchema;
use crate::domains::blog;
#[derive(Serialize, ToSchema)]
pub struct BlogSchema {
pub id: u32,
pub title: String,
pub content: String,
pub author_id: u32,
}
impl From<blog::Model> for BlogSchema {
fn from(blog: blog::Model) -> Self {
Self {
id: blog.id as u32,
title: blog.title,
content: blog.content,
author_id: blog.author_id as u32,
}
}
}
#[derive(Serialize, ToSchema)]
pub struct BlogListSchema {
pub blogs: Vec<BlogSchema>,
}
impl From<Vec<blog::Model>> for BlogListSchema {
fn from(blogs: Vec<blog::Model>) -> Self {
Self {
blogs: blogs.into_iter().map(BlogSchema::from).collect(),
}
}
}

View File

@@ -0,0 +1,2 @@
pub mod blog;
pub mod user;

View File

@@ -0,0 +1,32 @@
use serde::Serialize;
use utoipa::ToSchema;
use crate::domains::user;
#[derive(Serialize, ToSchema)]
pub struct UserSchema {
pub id: u32,
pub username: String,
}
impl From<user::Model> for UserSchema {
fn from(user: user::Model) -> Self {
Self {
id: user.id as u32,
username: user.username,
}
}
}
#[derive(Serialize, ToSchema)]
pub struct UserListSchema {
pub users: Vec<UserSchema>,
}
impl From<Vec<user::Model>> for UserListSchema {
fn from(users: Vec<user::Model>) -> Self {
Self {
users: users.into_iter().map(UserSchema::from).collect(),
}
}
}