`
cywhoyi
  • 浏览: 425471 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Rust的MVC的微服务

阅读更多
#![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))
}

 

1
1
分享到:
评论

相关推荐

    用 Rust 编写的用户 crud,旨在连接到具有完整集成测试覆盖范围的 MySQL 数据库。

    SQLX 用户 CRUD目的此应用程序演示了如何在可能的微服务系统中实现 CRUD 的通用设计。设计模式类似于 MVC(模型、视图、控制器)减去视图。这种类型的应用程序通常用 Java 或 C# 等语言开发,因此其开发的目标是演示...

    java + tauri + vue.js 做的一款通信软件,实现即时聊天.zip

    Spring Boot是Java开发的一个微服务框架,它简化了创建独立的、生产级别的基于Spring的应用程序。Spring Boot的核心特性包括自动配置、起步依赖和命令行接口(CLI),这些使得开发过程更加高效。在即时聊天应用中,...

    PJ2100-Gruppe21-源码.rar

    10. **软件架构**:源码可能体现了某种特定的软件架构模式,如微服务、MVC、MVVM等。 为了提供更具体的细节,我们需要查看源码内容或者更多的上下文信息。如果你能提供更多关于这个项目的信息,我将能够生成更详尽...

    程序员超级开发宝典(超级开发)

    4. **软件架构设计**:软件架构是系统的核心,本书可能包含微服务、SOA、MVC等架构模式的讲解,帮助读者理解如何构建可扩展、高可用的系统。 5. **数据库技术**:数据库管理是程序开发中的重要环节,书中可能包括...

    后端知识:后端知识

    Spring框架是Java后端开发中的核心工具,提供MVC架构、依赖注入、事务管理等功能。 3. **GraphQL**: 是Facebook开源的一种查询语言,用于API的设计。它允许客户端指定需要哪些数据,解决了RESTful API中过度或不足...

    另一种可能的取值

    此外,项目开发中常见的MVC架构、微服务架构等,也是多种可能取值的体现。开发者需要根据项目的具体需求,对这些架构的优缺点进行分析比较,最终选择最适合项目的架构设计方案。 在数据分析和算法设计中,"另一种...

Global site tag (gtag.js) - Google Analytics