diff --git a/.junie/plans/migrate-dtos-to-domain.md b/.junie/plans/migrate-dtos-to-domain.md index f3dfd32..ca0de8b 100644 --- a/.junie/plans/migrate-dtos-to-domain.md +++ b/.junie/plans/migrate-dtos-to-domain.md @@ -57,15 +57,16 @@ Currently, each feature module in `src/routes//` contains a `dto.rs` fil # Delivery Steps -### Step 1: Create domain DTO directory and module structure +### ✓ Step 1: Create domain DTO directory and module structure - Create `src/domain/dto/` directory along with `src/domain/dto/mod.rs`. - Set up module declarations for each DTO file (auth, user, channel, message, category, role, attachment, core, etc.) under `src/domain/dto/`. - Expose `pub mod dto;` in `src/domain/mod.rs`. -### Step 2: Migrate DTO files to `src/domain/dto/` and update imports +### ✓ Step 2: Migrate DTO files to `src/domain/dto/` and update imports - Move each `dto.rs` file from `src/routes//dto.rs` into `src/domain/dto/.rs`. - Update all import statements across handlers, mappers, services, and route files in `src/routes/` and elsewhere to reference `crate::domain::dto::::*`. - Remove the old `dto.rs` files from `src/routes//` and remove `pub mod dto;` from `src/routes//mod.rs`. -### Step 3: Verify compilation and test suite -- Run `cargo check` and `cargo test` to ensure all DTO types resolve correctly and there are no broken imports or compilation errors.\n- Verify OpenAPI schema generation (`utoipa`) correctly picks up the migrated DTO schemas. \ No newline at end of file +### ✓ Step 3: Verify compilation and test suite +- Run `cargo check` and `cargo test` to ensure all DTO types resolve correctly and there are no broken imports or compilation errors. +- Verify OpenAPI schema generation (`utoipa`) correctly picks up the migrated DTO schemas. \ No newline at end of file diff --git a/src/routes/attachment/dto.rs b/src/domain/dto/attachment.rs similarity index 100% rename from src/routes/attachment/dto.rs rename to src/domain/dto/attachment.rs diff --git a/src/routes/auth/dto.rs b/src/domain/dto/auth.rs similarity index 89% rename from src/routes/auth/dto.rs rename to src/domain/dto/auth.rs index 2f86cff..92c1717 100644 --- a/src/routes/auth/dto.rs +++ b/src/domain/dto/auth.rs @@ -1,4 +1,4 @@ -use crate::routes::user::dto::UserResponse; +use crate::domain::dto::user::UserResponse; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; diff --git a/src/routes/category/dto.rs b/src/domain/dto/category.rs similarity index 100% rename from src/routes/category/dto.rs rename to src/domain/dto/category.rs diff --git a/src/routes/channel/dto.rs b/src/domain/dto/channel.rs similarity index 100% rename from src/routes/channel/dto.rs rename to src/domain/dto/channel.rs diff --git a/src/routes/core/dto.rs b/src/domain/dto/core.rs similarity index 100% rename from src/routes/core/dto.rs rename to src/domain/dto/core.rs diff --git a/src/routes/message/dto.rs b/src/domain/dto/message.rs similarity index 100% rename from src/routes/message/dto.rs rename to src/domain/dto/message.rs diff --git a/src/domain/dto/mod.rs b/src/domain/dto/mod.rs new file mode 100644 index 0000000..806ee0a --- /dev/null +++ b/src/domain/dto/mod.rs @@ -0,0 +1,9 @@ +pub mod auth; +pub mod attachment; +pub mod message; +pub mod role; +pub mod server; +pub mod core; +pub mod user; +pub mod channel; +pub mod category; diff --git a/src/routes/role/dto.rs b/src/domain/dto/role.rs similarity index 100% rename from src/routes/role/dto.rs rename to src/domain/dto/role.rs diff --git a/src/routes/server/dto.rs b/src/domain/dto/server.rs similarity index 100% rename from src/routes/server/dto.rs rename to src/domain/dto/server.rs diff --git a/src/routes/user/dto.rs b/src/domain/dto/user.rs similarity index 100% rename from src/routes/user/dto.rs rename to src/domain/dto/user.rs diff --git a/src/domain/mod.rs b/src/domain/mod.rs index a9970c2..e83c008 100644 --- a/src/domain/mod.rs +++ b/src/domain/mod.rs @@ -1 +1,2 @@ pub mod events; +pub mod dto; diff --git a/src/routes/attachment/mapper.rs b/src/routes/attachment/mapper.rs index 33f587e..d70f836 100644 --- a/src/routes/attachment/mapper.rs +++ b/src/routes/attachment/mapper.rs @@ -1,4 +1,5 @@ -use super::{domain::Attachment, dto::AttachmentResponse}; +use super::domain::Attachment; +use crate::domain::dto::attachment::AttachmentResponse; pub fn to_response(_item: Attachment) -> AttachmentResponse { todo!() diff --git a/src/routes/attachment/mod.rs b/src/routes/attachment/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/attachment/mod.rs +++ b/src/routes/attachment/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes; diff --git a/src/routes/auth/handlers.rs b/src/routes/auth/handlers.rs index 53d489e..5fc4bcf 100644 --- a/src/routes/auth/handlers.rs +++ b/src/routes/auth/handlers.rs @@ -1,4 +1,4 @@ -use super::dto::{LoginRequest, LoginResponse, MeResponse}; +use crate::domain::dto::auth::{LoginRequest, LoginResponse, MeResponse}; use crate::auth::token::create_jwt; use crate::core::AppState; use crate::http::context::CurrentUser; diff --git a/src/routes/auth/mod.rs b/src/routes/auth/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/auth/mod.rs +++ b/src/routes/auth/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes; diff --git a/src/routes/category/handlers.rs b/src/routes/category/handlers.rs index 1634311..5dadd2a 100644 --- a/src/routes/category/handlers.rs +++ b/src/routes/category/handlers.rs @@ -1,7 +1,7 @@ use crate::core::state::AppState; use crate::http::context::Superuser; use crate::http::error::HTTPError; -use crate::routes::category::dto::{ +use crate::domain::dto::category::{ CategoryQueryParams, CategoryResponse, CreateCategoryRequest, UpdateCategoryRequest, }; use crate::routes::category::mapper; diff --git a/src/routes/category/mapper.rs b/src/routes/category/mapper.rs index d872351..6b3e878 100644 --- a/src/routes/category/mapper.rs +++ b/src/routes/category/mapper.rs @@ -1,5 +1,5 @@ use crate::models::category; -use crate::routes::category::dto::{ +use crate::domain::dto::category::{ CategoryResponse, CreateCategoryRequest, UpdateCategoryRequest, }; use sea_orm::Set; diff --git a/src/routes/category/mod.rs b/src/routes/category/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/category/mod.rs +++ b/src/routes/category/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes; diff --git a/src/routes/channel/handlers.rs b/src/routes/channel/handlers.rs index 430f89c..af81e3e 100644 --- a/src/routes/channel/handlers.rs +++ b/src/routes/channel/handlers.rs @@ -1,7 +1,7 @@ use crate::core::state::AppState; use crate::http::context::Superuser; use crate::http::error::HTTPError; -use crate::routes::channel::dto::{ +use crate::domain::dto::channel::{ ChannelQueryParams, ChannelResponse, ChannelRolePermissionResponse, ChannelUserPermissionResponse, CreateChannelRequest, SetChannelPermissionRequest, UpdateChannelRequest, diff --git a/src/routes/channel/mapper.rs b/src/routes/channel/mapper.rs index e51d70f..0f4ae30 100644 --- a/src/routes/channel/mapper.rs +++ b/src/routes/channel/mapper.rs @@ -1,6 +1,6 @@ use crate::models::{channel, channel_role_permission, channel_user_permission}; use crate::repositories::types::ChannelFilter; -use crate::routes::channel::dto::{ +use crate::domain::dto::channel::{ ChannelQueryParams, ChannelResponse, ChannelRolePermissionResponse, ChannelUserPermissionResponse, CreateChannelRequest, UpdateChannelRequest, }; diff --git a/src/routes/channel/mod.rs b/src/routes/channel/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/channel/mod.rs +++ b/src/routes/channel/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes; diff --git a/src/routes/core/handlers.rs b/src/routes/core/handlers.rs index ac1cfc0..88e4549 100644 --- a/src/routes/core/handlers.rs +++ b/src/routes/core/handlers.rs @@ -1,7 +1,7 @@ use crate::core::AppState; use crate::http::error::HTTPError; use crate::http::validation::ValidatedJson; -use crate::routes::core::dto::JoinRequest; +use crate::domain::dto::core::JoinRequest; use crate::routes::core::mapper::join_request_to_user_am; use axum::extract::State; use axum::http::StatusCode; diff --git a/src/routes/core/mapper.rs b/src/routes/core/mapper.rs index 04ec9e7..bbbf5d2 100644 --- a/src/routes/core/mapper.rs +++ b/src/routes/core/mapper.rs @@ -1,6 +1,6 @@ use crate::auth::password::hash_password; use crate::models::user; -use crate::routes::core::dto::JoinRequest; +use crate::domain::dto::core::JoinRequest; use anyhow::Result as AnyResult; use sea_orm::Set; use uuid::Uuid; diff --git a/src/routes/core/mod.rs b/src/routes/core/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/core/mod.rs +++ b/src/routes/core/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes; diff --git a/src/routes/message/handlers.rs b/src/routes/message/handlers.rs index 508651d..e5ecc81 100644 --- a/src/routes/message/handlers.rs +++ b/src/routes/message/handlers.rs @@ -1,4 +1,4 @@ -use super::dto::{CreateMessageRequest, MessageQueryParams, MessageResponse, UpdateMessageRequest}; +use crate::domain::dto::message::{CreateMessageRequest, MessageQueryParams, MessageResponse, UpdateMessageRequest}; use crate::core::state::AppState; use crate::http::context::CurrentUser; use crate::http::error::HTTPError; diff --git a/src/routes/message/mapper.rs b/src/routes/message/mapper.rs index b365f11..243b1ab 100644 --- a/src/routes/message/mapper.rs +++ b/src/routes/message/mapper.rs @@ -1,6 +1,6 @@ use crate::models::message; use crate::repositories::types::MessageFilter; -use crate::routes::message::dto::{ +use crate::domain::dto::message::{ CreateMessageRequest, MessageQueryParams, MessageResponse, UpdateMessageRequest, }; use chrono::Utc; diff --git a/src/routes/message/mod.rs b/src/routes/message/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/message/mod.rs +++ b/src/routes/message/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes; diff --git a/src/routes/openapi.rs b/src/routes/openapi.rs index 3ffa62a..508cc2d 100644 --- a/src/routes/openapi.rs +++ b/src/routes/openapi.rs @@ -44,28 +44,28 @@ use utoipa::{Modify, OpenApi}; ), components( schemas( - auth::dto::LoginRequest, - auth::dto::LoginResponse, - auth::dto::MeResponse, - user::dto::UserResponse, - user::dto::CreateUserRequest, - user::dto::UpdateUserRequest, - server::dto::ServerResponse, - server::dto::CreateServerRequest, - server::dto::UpdateServerRequest, - category::dto::CategoryResponse, - category::dto::CreateCategoryRequest, - category::dto::UpdateCategoryRequest, - channel::dto::ChannelResponse, - channel::dto::CreateChannelRequest, - channel::dto::UpdateChannelRequest, - role::dto::RoleResponse, - role::dto::CreateRoleRequest, - role::dto::UpdateRoleRequest, - message::dto::MessageResponse, - message::dto::CreateMessageRequest, - message::dto::UpdateMessageRequest, - core::dto::JoinRequest, + crate::domain::dto::auth::LoginRequest, + crate::domain::dto::auth::LoginResponse, + crate::domain::dto::auth::MeResponse, + crate::domain::dto::user::UserResponse, + crate::domain::dto::user::CreateUserRequest, + crate::domain::dto::user::UpdateUserRequest, + crate::domain::dto::server::ServerResponse, + crate::domain::dto::server::CreateServerRequest, + crate::domain::dto::server::UpdateServerRequest, + crate::domain::dto::category::CategoryResponse, + crate::domain::dto::category::CreateCategoryRequest, + crate::domain::dto::category::UpdateCategoryRequest, + crate::domain::dto::channel::ChannelResponse, + crate::domain::dto::channel::CreateChannelRequest, + crate::domain::dto::channel::UpdateChannelRequest, + crate::domain::dto::role::RoleResponse, + crate::domain::dto::role::CreateRoleRequest, + crate::domain::dto::role::UpdateRoleRequest, + crate::domain::dto::message::MessageResponse, + crate::domain::dto::message::CreateMessageRequest, + crate::domain::dto::message::UpdateMessageRequest, + crate::domain::dto::core::JoinRequest, ChannelType, ) ), diff --git a/src/routes/role/handlers.rs b/src/routes/role/handlers.rs index 12a9c26..c454120 100644 --- a/src/routes/role/handlers.rs +++ b/src/routes/role/handlers.rs @@ -1,7 +1,7 @@ use crate::core::state::AppState; use crate::http::context::Superuser; use crate::http::error::HTTPError; -use crate::routes::role::dto::{CreateRoleRequest, RoleResponse, UpdateRoleRequest}; +use crate::domain::dto::role::{CreateRoleRequest, RoleResponse, UpdateRoleRequest}; use crate::routes::role::mapper; use axum::{ Json, diff --git a/src/routes/role/mapper.rs b/src/routes/role/mapper.rs index bed0903..7a6d06a 100644 --- a/src/routes/role/mapper.rs +++ b/src/routes/role/mapper.rs @@ -1,5 +1,5 @@ use crate::models::role; -use crate::routes::role::dto::{CreateRoleRequest, RoleResponse, UpdateRoleRequest}; +use crate::domain::dto::role::{CreateRoleRequest, RoleResponse, UpdateRoleRequest}; use sea_orm::Set; use uuid::Uuid; diff --git a/src/routes/role/mod.rs b/src/routes/role/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/role/mod.rs +++ b/src/routes/role/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes; diff --git a/src/routes/server/handlers.rs b/src/routes/server/handlers.rs index 72396e8..4016dff 100644 --- a/src/routes/server/handlers.rs +++ b/src/routes/server/handlers.rs @@ -2,7 +2,7 @@ use crate::core::state::AppState; use crate::http::context::Superuser; use crate::http::error::HTTPError; use crate::repositories::types::{ChannelFilter, ServerTree}; -use crate::routes::server::dto::{ +use crate::domain::dto::server::{ CreateServerRequest, ServerResponse, ServerRolePermissionResponse, ServerUserPermissionResponse, SetServerPermissionRequest, UpdateServerRequest, }; diff --git a/src/routes/server/mapper.rs b/src/routes/server/mapper.rs index 01f00a5..520ec26 100644 --- a/src/routes/server/mapper.rs +++ b/src/routes/server/mapper.rs @@ -2,7 +2,7 @@ use crate::models::{ category, channel, server, server_item_order, server_role_permission, server_user_permission, }; use crate::repositories::types::{ServerExplorerItem, ServerTree}; -use crate::routes::server::dto::{ +use crate::domain::dto::server::{ CreateServerRequest, ServerResponse, ServerRolePermissionResponse, ServerUserPermissionResponse, UpdateServerRequest, }; diff --git a/src/routes/server/mod.rs b/src/routes/server/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/server/mod.rs +++ b/src/routes/server/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes; diff --git a/src/routes/user/handlers.rs b/src/routes/user/handlers.rs index ef3f5b2..5eb23ae 100644 --- a/src/routes/user/handlers.rs +++ b/src/routes/user/handlers.rs @@ -1,7 +1,7 @@ use crate::core::state::AppState; use crate::http::context::Superuser; use crate::http::error::HTTPError; -use crate::routes::user::dto::{CreateUserRequest, UpdateUserRequest, UserResponse}; +use crate::domain::dto::user::{CreateUserRequest, UpdateUserRequest, UserResponse}; use crate::routes::user::mapper; use axum::{ Json, diff --git a/src/routes/user/mapper.rs b/src/routes/user/mapper.rs index f5b276d..cff0937 100644 --- a/src/routes/user/mapper.rs +++ b/src/routes/user/mapper.rs @@ -1,6 +1,6 @@ use crate::auth::password::hash_password; use crate::models::user; -use crate::routes::user::dto::{CreateUserRequest, UpdateUserRequest, UserResponse}; +use crate::domain::dto::user::{CreateUserRequest, UpdateUserRequest, UserResponse}; use anyhow::Result as AnyResult; use sea_orm::{NotSet, Set}; use uuid::Uuid; diff --git a/src/routes/user/mod.rs b/src/routes/user/mod.rs index 9c36fc8..a376414 100644 --- a/src/routes/user/mod.rs +++ b/src/routes/user/mod.rs @@ -1,5 +1,4 @@ pub mod domain; -pub mod dto; pub mod handlers; pub mod mapper; pub mod routes;