Skip to content

Latest commit

 

History

History
275 lines (221 loc) · 14.7 KB

CHANGELOG.md

File metadata and controls

275 lines (221 loc) · 14.7 KB

Changelog

vNext

0.3.2

  • Redisgin pagination. loco-rs#463
  • Wrap seaorm query and condition for common use cases. loco-rs#463
  • Adding to loco-extras initializer for extra or multiple db. loco-rs#471
  • Scaffold now supporting different templates such as API,HTML or htmx, this future is in beta.loco-rs#474
  • Fix generatore fields types + adding tests. loco-rs#459
  • Fix channel cors. loco-rs#430
  • Improve auth controller compatibility with frontend loco-rs#472

0.3.1

  • Breaking changes Upgrade sea-orm to v1.0.0-rc.1. loco-rs#420 Needs to update sea-orm crate to use v1.0.0-rc.1 version.
  • Implemented file upload support with versatile strategies. loco-rs#423
  • Create a loco_extra crate to share common basic implementations. loco-rs#425
  • Update shuttle deployment template to 0.38. loco-rs#422
  • Enhancement: Move the Serve to Hook flow with the ability to override default serve settings. loco-rs#418
  • Avoid cloning sea_query::ColumnDef. loco-rs#415
  • Allow required UUID type in a scaffold. loco-rs#408
  • Cover SqlxMySqlPoolConnection in db.rs. loco-rs#411
  • Update worker docs and change default worker mode. loco-rs#412
  • Added server-side view generation through a new ViewEngine infrastructure and Tera server-side templates: loco-rs#389
  • Added generate model --migration-only loco-rs#400
  • Add JSON to scaffold gen. loco-rs#396
  • Add --binding(-b) and --port(-b) to cargo loco start.loco-rs#402

0.2.3

v0.2.2

  • fix: public fields in mailer-op. e51b7e
  • fix: handle missing db permissions. e51b7e

v0.2.1

  • enable compression for CompressionLayer, not etag. loco-rs#356
  • Fix nullable JSONB column schema definition. loco-rs#357

v0.2.0

  • Add: Loco now has Initializers (see the docs). Initializers help you integrate infra into your app in a seamless way, as well as share pieces of setup code between your projects
  • Add: an init_logger hook in src/app.rs for those who want to take ownership of their logging and tracing stack.
  • Add: Return a JSON schema when payload json could not serialize to a struct. loco-rs#343
  • Init logger in cli.rs. loco-rs#338
  • Add: return JSON schema in panic HTTP layer. loco-rs#336
  • Add: JSON field support in model generation. loco-rs#327 loco-rs#332
  • Add: float support in model generation. loco-rs#317
  • Fix: conflicting idx definition on M:M migration. loco-rs#311
  • Add: Breaking changes Supply AppContext to routes Hook. Migration steps in src/app.rs:
// src/app.rs: add app context to routes function
impl Hooks for App {
  ...
  fn routes(_ctx: &AppContext) -> AppRoutes;
  ...
}
  • Add: Breaking changes change parameter type from &str to &Environment in src/app.rs
// src/app.rs: change parameter type for `environment` from `&str` to `&Environment`
impl Hooks for App {
    ...
    async fn boot(mode: StartMode, environment: &Environment) -> Result<BootResult> {
        create_app::<Self>(mode, environment).await
    }
    ...
  • Added: setting cookies:
format::render()
    .cookies(&[
        cookie::Cookie::new("foo", "bar"),
        cookie::Cookie::new("baz", "qux"),
    ])?
    .etag("foobar")?
    .json(notes)

v0.1.9

middlewares:
  compression:
    enable: true
  • Create a new Database from the CLI. loco-rs#223
  • Validate if seaorm CLI is installed before running cargo loco db entities and show a better error to the user. loco-rs#212
  • Adding to saas and rest-api` starters a redis and DB in GitHub action workflow to allow users work with github action out of the box. loco-rs#215
  • Adding the app name and the environment to the DB name when creating a new starter. loco-rs#216
  • Fix generator when users adding a created_at or update_at fields. loco-rs#214
  • Add: format::render which allows a builder-like formatting, including setting etag and ad-hoc headers
  • Add: Etag middleware, enabled by default in starter projects. Once you set an Etag it will check for cache headers and return 304 if needed. To enable etag in your existing project:
#...
  middlewares:
    etag:
      enable: true

usage:

  format::render()
      .etag("foobar")?
      .json(Entity::find().all(&ctx.db).await?)

Authentication: Added API Token Authentication!

  • See loco-rs#217 Now when you generate a saas starter or rest api starter you will get additional authentication methods for free:

  • Added: authentication added -- api authentication where each user has an API token in the schema, and you can authenticate with Bearer against that user.

  • Added: authentication added -- JWTWithUser extractor, which is a convenience for resolving the authenticated JWT claims into a current user from database

migrating an existing codebase

Add the following to your generated src/models/user.rs:

#[async_trait]
impl Authenticable for super::_entities::users::Model {
    async fn find_by_api_key(db: &DatabaseConnection, api_key: &str) -> ModelResult<Self> {
        let user = users::Entity::find()
            .filter(users::Column::ApiKey.eq(api_key))
            .one(db)
            .await?;
        user.ok_or_else(|| ModelError::EntityNotFound)
    }

    async fn find_by_claims_key(db: &DatabaseConnection, claims_key: &str) -> ModelResult<Self> {
        super::_entities::users::Model::find_by_pid(db, claims_key).await
    }
}

Update imports in this file to include model::Authenticable:

use loco_rs::{
    auth, hash,
    model::{Authenticable, ModelError, ModelResult},
    validation,
    validator::Validate,
};

v0.1.8

  • Added: loco version for getting an operable version string containing logical crate version and git SHA if available: 0.3.0 (<git sha>)

To migrate to this behavior from earlier versions, it requires adding the following to your app.rs app hooks:

    fn app_version() -> String {
        format!(
            "{} ({})",
            env!("CARGO_PKG_VERSION"),
            option_env!("BUILD_SHA")
                .or(option_env!("GITHUB_SHA"))
                .unwrap_or("dev")
        )
    }

Reminder: loco --version will give you the current Loco framework which your app was built against and loco version gives you your app version.

  • Added: loco generate migration for adding ad-hoc migrations
  • Added: added support in model generator for many-to-many link table generation via loco generate model --link
  • Docs: added Migration section, added relations documentation 1:M, M:M
  • Adding .devcontainer to starter projects loco-rs#170
  • Braking changes: Adding Hooks::boot application. Migration steps:
    // Load boot::{create_app, BootResult, StartMode} from loco_rs lib
    // Load migration: use migration::Migrator; Only when using DB
    // Adding boot hook with the following code
    impl Hooks for App {
      ...
      async fn boot(mode: StartMode, environment: &str) -> Result<BootResult> {
        // With DB:
        create_app::<Self, Migrator>(mode, environment).await
        // Without DB:
        create_app::<Self>(mode, environment).await
      }
      ...
    }

v0.1.7

  • Added pretty backtraces loco-rs#41
  • adding tests for note requests loco-rs#156
  • Define the min rust version the loco can run loco-rs#164
  • Added cargo loco doctor cli command for validate and diagnose configurations. loco-rs#145
  • Added ability to specify settings: in config files, which are available in context
  • Adding compilation mode in the banner. loco-rs#127
  • Support shuttle deployment generator. loco-rs#124
  • Adding a static asset middleware which allows to serve static folder/data. Enable this section in config. loco-rs#134
     static:
        enable: true
        # ensure that both the folder.path and fallback file path are existence.
        must_exist: true
        folder: 
          uri: "/assets"
          path: "frontend/dist"        
        fallback: "frontend/dist/index.html" 
  • fix: loco generate request test template. loco-rs#133
  • Improve docker deployment generator. loco-rs#131

v0.1.6

  • refactor: local settings are now <env>.local.yaml and available for all environments, for example you can add a local test.local.yaml and development.local.yaml
  • refactor: removed config-rs and now doing config loading by ourselves.
  • fix: email template rendering will not escape URLs
  • Config with variables: It is now possible to use tera templates in config YAML files

Example of pulling a port from environment:

server:
  port: {{ get_env(name="NODE_PORT", default=3000) }}

It is possible to use any tera templating constructs such as loops, conditionals, etc. inside YAML configuration files.

  • Mailer: expose stub in non-test

  • Hooks::before_run with a default blank implementation. You can now code some custom loading of resources or other things before the app runs

  • an LLM inference example, text generation in Rust, using an API (examples/inference)

  • Loco starters version & create release script loco-rs#110

  • Configure Cors middleware loco-rs#114

  • Hooks::after_routes Invoke this function after the Loco routers have been constructed. This function enables you to configure custom Axum logics, such as layers, that are compatible with Axum. loco-rs#114

  • Adding docker deployment generator loco-rs#119

DOCS:

  • Remove duplicated docs in auth section
  • FAQ docs: loco-rs#116

ENHANCEMENTS:

0.1.5

NEW FEATURES

ENHANCEMENTS: