#![feature(proc_macro_hygiene)] #![feature(decl_macro)] #[macro_use] extern crate rocket; use rocket_contrib::json::Json; #[macro_use] extern crate diesel; extern crate dotenv; mod controller; mod domain; mod dto; mod repository; mod schema; mod service; use controller::*; use dto::*; use repository::*; use service::*; #[post("/task/add", data = "<task>")] fn task_add(task: Json<TaskDto>) { TaskController::new(TaskService::new(TaskRepository::new())).task_add(task); } fn main() { rocket::ignite().mount("/", routes![task_add]).launch(); }
Controller mod.rs:
use crate::dto::*; use crate::service::*; use rocket_contrib::json::Json; pub struct TaskController { service: TaskService, } impl TaskController { pub fn new(service: TaskService) -> TaskController { TaskController { service: service } } pub fn task_add(&self, task: Json<TaskDto>) { println!("task json format is {:?}",task); self.service.task_add(task.into_inner()); } }
Service:
use crate::domain::*; use crate::dto::*; use crate::repository::*; use chrono::{Utc, Local, DateTime, Date}; pub struct TaskService { repository: TaskRepository, } impl TaskService { pub fn new(repository: TaskRepository) -> TaskService { TaskService { repository: repository, } } pub fn task_add(&self, task: TaskDto) { let task2 = Task::new(task.get_name(), task.get_time_limit()); println!("in service level is {:?}", task); // println!("in service level is {:?}",task2.ok()); let local_date: Date<Local> = Local::today(); let task_bak = Task { name: task.get_name().to_string(), time_limit: local_date }; self.repository.task_add(task_bak); } }
Repo:
use crate::domain::*; use crate::dto::*; use crate::schema::task_models::dsl::*; use diesel::pg::PgConnection; use diesel::prelude::*; use dotenv::dotenv; use std::env; pub struct TaskRepository { connection: PgConnection, } impl TaskRepository { pub fn new() -> TaskRepository { TaskRepository { connection: establish_connection(), } } pub fn task_add(&self, task: Task) { let _model = TaskModel::new(task); diesel::insert_into(task_models) .values(&_model) .execute(&self.connection) .expect("Error saving new task."); } } fn establish_connection() -> PgConnection { dotenv().ok(); let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); PgConnection::establish(&database_url).expect(&format!("Error connecting to {}", database_url)) }
相关推荐
SQLX 用户 CRUD目的此应用程序演示了如何在可能的微服务系统中实现 CRUD 的通用设计。设计模式类似于 MVC(模型、视图、控制器)减去视图。这种类型的应用程序通常用 Java 或 C# 等语言开发,因此其开发的目标是演示...
Spring Boot是Java开发的一个微服务框架,它简化了创建独立的、生产级别的基于Spring的应用程序。Spring Boot的核心特性包括自动配置、起步依赖和命令行接口(CLI),这些使得开发过程更加高效。在即时聊天应用中,...
10. **软件架构**:源码可能体现了某种特定的软件架构模式,如微服务、MVC、MVVM等。 为了提供更具体的细节,我们需要查看源码内容或者更多的上下文信息。如果你能提供更多关于这个项目的信息,我将能够生成更详尽...
4. **软件架构设计**:软件架构是系统的核心,本书可能包含微服务、SOA、MVC等架构模式的讲解,帮助读者理解如何构建可扩展、高可用的系统。 5. **数据库技术**:数据库管理是程序开发中的重要环节,书中可能包括...
Spring框架是Java后端开发中的核心工具,提供MVC架构、依赖注入、事务管理等功能。 3. **GraphQL**: 是Facebook开源的一种查询语言,用于API的设计。它允许客户端指定需要哪些数据,解决了RESTful API中过度或不足...
此外,项目开发中常见的MVC架构、微服务架构等,也是多种可能取值的体现。开发者需要根据项目的具体需求,对这些架构的优缺点进行分析比较,最终选择最适合项目的架构设计方案。 在数据分析和算法设计中,"另一种...