Compare commits

...

10 commits

89 changed files with 1492 additions and 1780 deletions

2
.gitignore vendored
View file

@ -28,7 +28,7 @@ coverage
!/.config/docker_ci.env !/.config/docker_ci.env
!/.config/helm_values_example.yml !/.config/helm_values_example.yml
!/.config/LICENSE !/.config/LICENSE
.docker-compose.yml docker-compose.yml
# docker dev config # docker dev config
/dev/docker-compose.yml /dev/docker-compose.yml

View file

@ -3,6 +3,7 @@ FROM node:21-slim as build
WORKDIR /firefish WORKDIR /firefish
# Install compilation dependencies # Install compilation dependencies
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y python3 git wget curl build-essential RUN apt-get update && apt-get install -y python3 git wget curl build-essential
RUN mkdir -m777 /opt/rust /opt/cargo RUN mkdir -m777 /opt/rust /opt/cargo
ENV RUSTUP_HOME=/opt/rust CARGO_HOME=/opt/cargo PATH=/opt/cargo/bin:$PATH ENV RUSTUP_HOME=/opt/rust CARGO_HOME=/opt/cargo PATH=/opt/cargo/bin:$PATH
@ -59,7 +60,11 @@ FROM node:21-slim
WORKDIR /firefish WORKDIR /firefish
# Install runtime dependencies # Install runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends zip unzip tini ffmpeg ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends zip unzip tini ffmpeg ca-certificates
RUN echo 'deb https://deb.debian.org/debian experimental main' | tee /etc/apt/sources.list
RUN apt-get update && apt-get --target-release experimental install -y --no-install-recommends libc6
COPY . ./ COPY . ./

View file

@ -272,9 +272,6 @@ const {
nativeGetTimestamp, nativeGetTimestamp,
nativeCreateId, nativeCreateId,
nativeInitIdGenerator, nativeInitIdGenerator,
nativePackAntennaById,
NativeAntennaSrc,
nativeInitDatabase,
} = nativeBinding; } = nativeBinding;
module.exports.nativeRandomStr = nativeRandomStr; module.exports.nativeRandomStr = nativeRandomStr;
@ -283,6 +280,3 @@ module.exports.convertId = convertId;
module.exports.nativeGetTimestamp = nativeGetTimestamp; module.exports.nativeGetTimestamp = nativeGetTimestamp;
module.exports.nativeCreateId = nativeCreateId; module.exports.nativeCreateId = nativeCreateId;
module.exports.nativeInitIdGenerator = nativeInitIdGenerator; module.exports.nativeInitIdGenerator = nativeInitIdGenerator;
module.exports.nativePackAntennaById = nativePackAntennaById;
module.exports.NativeAntennaSrc = NativeAntennaSrc;
module.exports.nativeInitDatabase = nativeInitDatabase;

File diff suppressed because it is too large Load diff

View file

@ -8,40 +8,39 @@ members = ["migration"]
[features] [features]
default = [] default = []
noarray = []
napi = ["dep:napi", "dep:napi-derive"] napi = ["dep:napi", "dep:napi-derive"]
[lib] [lib]
crate-type = ["cdylib", "lib"] crate-type = ["cdylib", "lib"]
[dependencies] [dependencies]
async-trait = "0.1.68" async-trait = "0.1.75"
cfg-if = "1.0.0" cfg-if = "1.0.0"
chrono = "0.4.24" chrono = "0.4.31"
cuid2 = "0.1.0" cuid2 = "0.1.2"
derive_more = "0.99.17" derive_more = "0.99.17"
jsonschema = "0.17.0" jsonschema = "0.17.1"
once_cell = "1.17.1" once_cell = "1.19.0"
parse-display = "0.8.0" parse-display = "0.8.2"
rand = "0.8.5" rand = "0.8.5"
schemars = { version = "0.8.12", features = ["chrono"] } schemars = { version = "0.8.16", features = ["chrono"] }
sea-orm = { version = "0.11.3", features = ["sqlx-postgres", "postgres-array", "sqlx-sqlite", "runtime-tokio-rustls"] } sea-orm = { version = "0.12.10", features = ["sqlx-postgres", "runtime-tokio-rustls"] }
serde = { version = "1.0.163", features = ["derive"] } serde = { version = "1.0.193", features = ["derive"] }
serde_json = "1.0.96" serde_json = "1.0.108"
thiserror = "1.0.40" thiserror = "1.0.52"
tokio = { version = "1.28.1", features = ["full"] } tokio = { version = "1.35.1", features = ["full"] }
utoipa = "3.3.0" utoipa = "4.1.0"
# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix # Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix
napi = { version = "2.13.1", default-features = false, features = ["napi6", "tokio_rt"], optional = true } napi = { version = "2.14.1", default-features = false, features = ["napi6", "tokio_rt"], optional = true }
napi-derive = { version = "2.12.0", optional = true } napi-derive = { version = "2.14.5", optional = true }
basen = "0.1.0" basen = "0.1.0"
[dev-dependencies] [dev-dependencies]
pretty_assertions = "1.3.0" pretty_assertions = "1.4.0"
[build-dependencies] [build-dependencies]
napi-build = "2.0.1" napi-build = "2.1.0"
[profile.release] [profile.release]
lto = true lto = true

View file

@ -13,26 +13,25 @@ default = []
convert = ["dep:native-utils", "dep:indicatif", "dep:futures"] convert = ["dep:native-utils", "dep:indicatif", "dep:futures"]
[dependencies] [dependencies]
serde_json = "1.0.96" serde_json = "1.0.108"
native-utils = { path = "../", optional = true } native-utils = { path = "../", optional = true }
indicatif = { version = "0.17.4", features = ["tokio"], optional = true } indicatif = { version = "0.17.7", features = ["tokio"], optional = true }
tokio = { version = "1.28.2", features = ["full"] } tokio = { version = "1.35.1", features = ["full"] }
futures = { version = "0.3.28", optional = true } futures = { version = "0.3.30", optional = true }
serde_yaml = "0.9.21" serde_yaml = "0.9.29"
serde = { version = "1.0.163", features = ["derive"] } serde = { version = "1.0.193", features = ["derive"] }
urlencoding = "2.1.2" urlencoding = "2.1.3"
redis = { version = "0.23.0", features = ["tokio-rustls-comp"] } redis = { version = "0.24.0", features = ["tokio-rustls-comp"] }
sea-orm = "0.11.3" sea-orm = "0.12.10"
url = { version = "2.4.0", features = ["serde"] } url = { version = "2.5.0", features = ["serde"] }
basen = "0.1.0" basen = "0.1.0"
[dependencies.sea-orm-migration] [dependencies.sea-orm-migration]
version = "0.11.0" version = "0.12.10"
features = [ features = [
# Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI. # Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI.
# View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime. # View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime.
# e.g. # e.g.
"runtime-tokio-rustls", # `ASYNC_RUNTIME` feature "runtime-tokio-rustls", # `ASYNC_RUNTIME` feature
"sqlx-postgres", # `DATABASE_DRIVER` feature "sqlx-postgres", # `DATABASE_DRIVER` feature
"sqlx-sqlite",
] ]

View file

@ -41,7 +41,7 @@
"prepublishOnly": "napi prepublish -t npm", "prepublishOnly": "napi prepublish -t npm",
"universal": "napi universal", "universal": "napi universal",
"version": "napi version", "version": "napi version",
"format": "cargo fmt --all --", "format": "cargo fmt --all -- --check",
"lint": "cargo clippy --fix --allow-dirty --allow-staged && cargo fmt --all --" "lint": "cargo clippy --fix --allow-dirty --allow-staged && cargo fmt --all -- --check"
} }
} }

View file

@ -1,6 +1,5 @@
pub mod error; pub mod error;
use cfg_if::cfg_if;
use error::Error; use error::Error;
use sea_orm::{Database, DbConn}; use sea_orm::{Database, DbConn};
@ -16,17 +15,6 @@ pub fn get_database() -> Result<&'static DbConn, Error> {
DB_CONN.get().ok_or(Error::Uninitialized) DB_CONN.get().ok_or(Error::Uninitialized)
} }
cfg_if! {
if #[cfg(feature = "napi")] {
use napi_derive::napi;
#[napi]
pub async fn native_init_database(conn_uri: String) -> napi::Result<()> {
init_database(conn_uri).await.map_err(Into::into)
}
}
}
#[cfg(test)] #[cfg(test)]
mod unit_test { mod unit_test {
use super::{error::Error, get_database}; use super::{error::Error, get_database};

View file

@ -1,4 +1,4 @@
use napi::{bindgen_prelude::*, Error, Status}; use napi::{Error, Status};
use napi_derive::napi; use napi_derive::napi;
static CHAR_COLLECTION: &str = "0123456789abcdefghijklmnopqrstuvwxyz"; static CHAR_COLLECTION: &str = "0123456789abcdefghijklmnopqrstuvwxyz";

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "abuse_user_report")] #[sea_orm(table_name = "abuse_user_report")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,10 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "access_token")] #[sea_orm(table_name = "access_token")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -24,7 +22,7 @@ pub struct Model {
pub description: Option<String>, pub description: Option<String>,
#[sea_orm(column_name = "iconUrl")] #[sea_orm(column_name = "iconUrl")]
pub icon_url: Option<String>, pub icon_url: Option<String>,
pub permission: StringVec, pub permission: Vec<String>,
pub fetched: bool, pub fetched: bool,
} }

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "ad")] #[sea_orm(table_name = "ad")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "announcement")] #[sea_orm(table_name = "announcement")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "announcement_read")] #[sea_orm(table_name = "announcement_read")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,9 +1,9 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::{newtype, sea_orm_active_enums::AntennaSrcEnum}; use super::sea_orm_active_enums::AntennaSrcEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "antenna")] #[sea_orm(table_name = "antenna")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -17,7 +17,7 @@ pub struct Model {
#[sea_orm(column_name = "userListId")] #[sea_orm(column_name = "userListId")]
pub user_list_id: Option<String>, pub user_list_id: Option<String>,
#[sea_orm(column_type = "JsonBinary")] #[sea_orm(column_type = "JsonBinary")]
pub keywords: newtype::JsonKeyword, pub keywords: Json,
#[sea_orm(column_name = "withFile")] #[sea_orm(column_name = "withFile")]
pub with_file: bool, pub with_file: bool,
pub expression: Option<String>, pub expression: Option<String>,
@ -28,11 +28,11 @@ pub struct Model {
pub with_replies: bool, pub with_replies: bool,
#[sea_orm(column_name = "userGroupJoiningId")] #[sea_orm(column_name = "userGroupJoiningId")]
pub user_group_joining_id: Option<String>, pub user_group_joining_id: Option<String>,
pub users: newtype::StringVec, pub users: Vec<String>,
#[sea_orm(column_name = "excludeKeywords", column_type = "JsonBinary")] #[sea_orm(column_name = "excludeKeywords", column_type = "JsonBinary")]
pub exclude_keywords: newtype::JsonKeyword, pub exclude_keywords: Json,
#[sea_orm(column_type = "JsonBinary")] #[sea_orm(column_type = "JsonBinary")]
pub instances: newtype::JsonStringVec, pub instances: Json,
} }
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

View file

@ -1,10 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "app")] #[sea_orm(table_name = "app")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -16,7 +14,7 @@ pub struct Model {
pub secret: String, pub secret: String,
pub name: String, pub name: String,
pub description: String, pub description: String,
pub permission: StringVec, pub permission: Vec<String>,
#[sea_orm(column_name = "callbackUrl")] #[sea_orm(column_name = "callbackUrl")]
pub callback_url: Option<String>, pub callback_url: Option<String>,
} }

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "attestation_challenge")] #[sea_orm(table_name = "attestation_challenge")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "auth_session")] #[sea_orm(table_name = "auth_session")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "blocking")] #[sea_orm(table_name = "blocking")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "channel")] #[sea_orm(table_name = "channel")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "channel_following")] #[sea_orm(table_name = "channel_following")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "channel_note_pining")] #[sea_orm(table_name = "channel_note_pining")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "clip")] #[sea_orm(table_name = "clip")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "clip_note")] #[sea_orm(table_name = "clip_note")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "drive_file")] #[sea_orm(table_name = "drive_file")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "drive_folder")] #[sea_orm(table_name = "drive_folder")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,10 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "emoji")] #[sea_orm(table_name = "emoji")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -17,7 +15,7 @@ pub struct Model {
pub original_url: String, pub original_url: String,
pub uri: Option<String>, pub uri: Option<String>,
pub r#type: Option<String>, pub r#type: Option<String>,
pub aliases: StringVec, pub aliases: Vec<String>,
pub category: Option<String>, pub category: Option<String>,
#[sea_orm(column_name = "publicUrl")] #[sea_orm(column_name = "publicUrl")]
pub public_url: String, pub public_url: String,

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "follow_request")] #[sea_orm(table_name = "follow_request")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "following")] #[sea_orm(table_name = "following")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "gallery_like")] #[sea_orm(table_name = "gallery_like")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,10 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "gallery_post")] #[sea_orm(table_name = "gallery_post")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -18,12 +16,12 @@ pub struct Model {
#[sea_orm(column_name = "userId")] #[sea_orm(column_name = "userId")]
pub user_id: String, pub user_id: String,
#[sea_orm(column_name = "fileIds")] #[sea_orm(column_name = "fileIds")]
pub file_ids: StringVec, pub file_ids: Vec<String>,
#[sea_orm(column_name = "isSensitive")] #[sea_orm(column_name = "isSensitive")]
pub is_sensitive: bool, pub is_sensitive: bool,
#[sea_orm(column_name = "likedCount")] #[sea_orm(column_name = "likedCount")]
pub liked_count: i32, pub liked_count: i32,
pub tags: StringVec, pub tags: Vec<String>,
} }
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

View file

@ -1,37 +1,35 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "hashtag")] #[sea_orm(table_name = "hashtag")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,
pub name: String, pub name: String,
#[sea_orm(column_name = "mentionedUserIds")] #[sea_orm(column_name = "mentionedUserIds")]
pub mentioned_user_ids: StringVec, pub mentioned_user_ids: Vec<String>,
#[sea_orm(column_name = "mentionedUsersCount")] #[sea_orm(column_name = "mentionedUsersCount")]
pub mentioned_users_count: i32, pub mentioned_users_count: i32,
#[sea_orm(column_name = "mentionedLocalUserIds")] #[sea_orm(column_name = "mentionedLocalUserIds")]
pub mentioned_local_user_ids: StringVec, pub mentioned_local_user_ids: Vec<String>,
#[sea_orm(column_name = "mentionedLocalUsersCount")] #[sea_orm(column_name = "mentionedLocalUsersCount")]
pub mentioned_local_users_count: i32, pub mentioned_local_users_count: i32,
#[sea_orm(column_name = "mentionedRemoteUserIds")] #[sea_orm(column_name = "mentionedRemoteUserIds")]
pub mentioned_remote_user_ids: StringVec, pub mentioned_remote_user_ids: Vec<String>,
#[sea_orm(column_name = "mentionedRemoteUsersCount")] #[sea_orm(column_name = "mentionedRemoteUsersCount")]
pub mentioned_remote_users_count: i32, pub mentioned_remote_users_count: i32,
#[sea_orm(column_name = "attachedUserIds")] #[sea_orm(column_name = "attachedUserIds")]
pub attached_user_ids: StringVec, pub attached_user_ids: Vec<String>,
#[sea_orm(column_name = "attachedUsersCount")] #[sea_orm(column_name = "attachedUsersCount")]
pub attached_users_count: i32, pub attached_users_count: i32,
#[sea_orm(column_name = "attachedLocalUserIds")] #[sea_orm(column_name = "attachedLocalUserIds")]
pub attached_local_user_ids: StringVec, pub attached_local_user_ids: Vec<String>,
#[sea_orm(column_name = "attachedLocalUsersCount")] #[sea_orm(column_name = "attachedLocalUsersCount")]
pub attached_local_users_count: i32, pub attached_local_users_count: i32,
#[sea_orm(column_name = "attachedRemoteUserIds")] #[sea_orm(column_name = "attachedRemoteUserIds")]
pub attached_remote_user_ids: StringVec, pub attached_remote_user_ids: Vec<String>,
#[sea_orm(column_name = "attachedRemoteUsersCount")] #[sea_orm(column_name = "attachedRemoteUsersCount")]
pub attached_remote_users_count: i32, pub attached_remote_users_count: i32,
} }

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "instance")] #[sea_orm(table_name = "instance")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,10 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "messaging_message")] #[sea_orm(table_name = "messaging_message")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -22,7 +20,7 @@ pub struct Model {
pub file_id: Option<String>, pub file_id: Option<String>,
#[sea_orm(column_name = "groupId")] #[sea_orm(column_name = "groupId")]
pub group_id: Option<String>, pub group_id: Option<String>,
pub reads: StringVec, pub reads: Vec<String>,
pub uri: Option<String>, pub uri: Option<String>,
} }

View file

@ -1,12 +1,10 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::MetaSensitivemediadetectionEnum; use super::sea_orm_active_enums::MetaSensitivemediadetectionEnum;
use super::sea_orm_active_enums::MetaSensitivemediadetectionsensitivityEnum; use super::sea_orm_active_enums::MetaSensitivemediadetectionsensitivityEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "meta")] #[sea_orm(table_name = "meta")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -25,11 +23,11 @@ pub struct Model {
pub disable_global_timeline: bool, pub disable_global_timeline: bool,
#[sea_orm(column_name = "useStarForReactionFallback")] #[sea_orm(column_name = "useStarForReactionFallback")]
pub use_star_for_reaction_fallback: bool, pub use_star_for_reaction_fallback: bool,
pub langs: StringVec, pub langs: Vec<String>,
#[sea_orm(column_name = "hiddenTags")] #[sea_orm(column_name = "hiddenTags")]
pub hidden_tags: StringVec, pub hidden_tags: Vec<String>,
#[sea_orm(column_name = "blockedHosts")] #[sea_orm(column_name = "blockedHosts")]
pub blocked_hosts: StringVec, pub blocked_hosts: Vec<String>,
#[sea_orm(column_name = "mascotImageUrl")] #[sea_orm(column_name = "mascotImageUrl")]
pub mascot_image_url: Option<String>, pub mascot_image_url: Option<String>,
#[sea_orm(column_name = "bannerUrl")] #[sea_orm(column_name = "bannerUrl")]
@ -72,11 +70,9 @@ pub struct Model {
#[sea_orm(column_name = "swPrivateKey")] #[sea_orm(column_name = "swPrivateKey")]
pub sw_private_key: Option<String>, pub sw_private_key: Option<String>,
#[sea_orm(column_name = "pinnedUsers")] #[sea_orm(column_name = "pinnedUsers")]
pub pinned_users: StringVec, pub pinned_users: Vec<String>,
#[sea_orm(column_name = "ToSUrl")] #[sea_orm(column_name = "ToSUrl")]
pub to_s_url: Option<String>, pub to_s_url: Option<String>,
#[sea_orm(column_name = "moreUrls", column_type = "JsonBinary")]
pub more_urls: Json,
#[sea_orm(column_name = "repositoryUrl")] #[sea_orm(column_name = "repositoryUrl")]
pub repository_url: String, pub repository_url: String,
#[sea_orm(column_name = "feedbackUrl")] #[sea_orm(column_name = "feedbackUrl")]
@ -114,7 +110,7 @@ pub struct Model {
#[sea_orm(column_name = "objectStorageSetPublicRead")] #[sea_orm(column_name = "objectStorageSetPublicRead")]
pub object_storage_set_public_read: bool, pub object_storage_set_public_read: bool,
#[sea_orm(column_name = "pinnedPages")] #[sea_orm(column_name = "pinnedPages")]
pub pinned_pages: StringVec, pub pinned_pages: Vec<String>,
#[sea_orm(column_name = "backgroundImageUrl")] #[sea_orm(column_name = "backgroundImageUrl")]
pub background_image_url: Option<String>, pub background_image_url: Option<String>,
#[sea_orm(column_name = "logoImageUrl")] #[sea_orm(column_name = "logoImageUrl")]
@ -124,7 +120,7 @@ pub struct Model {
#[sea_orm(column_name = "objectStorageS3ForcePathStyle")] #[sea_orm(column_name = "objectStorageS3ForcePathStyle")]
pub object_storage_s3_force_path_style: bool, pub object_storage_s3_force_path_style: bool,
#[sea_orm(column_name = "allowedHosts")] #[sea_orm(column_name = "allowedHosts")]
pub allowed_hosts: Option<StringVec>, pub allowed_hosts: Option<Vec<String>>,
#[sea_orm(column_name = "secureMode")] #[sea_orm(column_name = "secureMode")]
pub secure_mode: Option<bool>, pub secure_mode: Option<bool>,
#[sea_orm(column_name = "privateMode")] #[sea_orm(column_name = "privateMode")]
@ -154,13 +150,13 @@ pub struct Model {
#[sea_orm(column_name = "enableActiveEmailValidation")] #[sea_orm(column_name = "enableActiveEmailValidation")]
pub enable_active_email_validation: bool, pub enable_active_email_validation: bool,
#[sea_orm(column_name = "customMOTD")] #[sea_orm(column_name = "customMOTD")]
pub custom_motd: StringVec, pub custom_motd: Vec<String>,
#[sea_orm(column_name = "customSplashIcons")] #[sea_orm(column_name = "customSplashIcons")]
pub custom_splash_icons: StringVec, pub custom_splash_icons: Vec<String>,
#[sea_orm(column_name = "disableRecommendedTimeline")] #[sea_orm(column_name = "disableRecommendedTimeline")]
pub disable_recommended_timeline: bool, pub disable_recommended_timeline: bool,
#[sea_orm(column_name = "recommendedInstances")] #[sea_orm(column_name = "recommendedInstances")]
pub recommended_instances: StringVec, pub recommended_instances: Vec<String>,
#[sea_orm(column_name = "enableGuestTimeline")] #[sea_orm(column_name = "enableGuestTimeline")]
pub enable_guest_timeline: bool, pub enable_guest_timeline: bool,
#[sea_orm(column_name = "defaultReaction")] #[sea_orm(column_name = "defaultReaction")]
@ -170,13 +166,17 @@ pub struct Model {
#[sea_orm(column_name = "libreTranslateApiKey")] #[sea_orm(column_name = "libreTranslateApiKey")]
pub libre_translate_api_key: Option<String>, pub libre_translate_api_key: Option<String>,
#[sea_orm(column_name = "silencedHosts")] #[sea_orm(column_name = "silencedHosts")]
pub silenced_hosts: StringVec, pub silenced_hosts: Vec<String>,
#[sea_orm(column_name = "experimentalFeatures", column_type = "JsonBinary")] #[sea_orm(column_name = "experimentalFeatures", column_type = "JsonBinary")]
pub experimental_features: Json, pub experimental_features: Json,
#[sea_orm(column_name = "enableServerMachineStats")] #[sea_orm(column_name = "enableServerMachineStats")]
pub enable_server_machine_stats: bool, pub enable_server_machine_stats: bool,
#[sea_orm(column_name = "enableIdenticonGeneration")] #[sea_orm(column_name = "enableIdenticonGeneration")]
pub enable_identicon_generation: bool, pub enable_identicon_generation: bool,
#[sea_orm(column_name = "donationLink")]
pub donation_link: Option<String>,
#[sea_orm(column_name = "moreUrls", column_type = "JsonBinary")]
pub more_urls: Json,
} }
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "migrations")] #[sea_orm(table_name = "migrations")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]

View file

@ -1,4 +1,4 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
pub mod prelude; pub mod prelude;
@ -32,7 +32,6 @@ pub mod migrations;
pub mod moderation_log; pub mod moderation_log;
pub mod muted_note; pub mod muted_note;
pub mod muting; pub mod muting;
pub mod newtype;
pub mod note; pub mod note;
pub mod note_edit; pub mod note_edit;
pub mod note_favorite; pub mod note_favorite;

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "moderation_log")] #[sea_orm(table_name = "moderation_log")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,9 +1,9 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::MutedNoteReasonEnum; use super::sea_orm_active_enums::MutedNoteReasonEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "muted_note")] #[sea_orm(table_name = "muted_note")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "muting")] #[sea_orm(table_name = "muting")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,51 +0,0 @@
#[macro_export]
macro_rules! impl_json_newtype {
($a:tt) => {
impl From<$a> for Value {
fn from(source: $a) -> Self {
Value::Json(serde_json::to_value(source).ok().map(Box::new))
}
}
impl TryGetable for $a {
fn try_get_by<I: sea_orm::ColIdx>(
res: &QueryResult,
idx: I,
) -> Result<Self, TryGetError> {
let json_value: serde_json::Value =
res.try_get_by(idx).map_err(TryGetError::DbErr)?;
serde_json::from_value(json_value)
.map_err(|e| TryGetError::DbErr(DbErr::Json(e.to_string())))
}
}
impl sea_query::ValueType for $a {
fn try_from(v: Value) -> Result<Self, sea_query::ValueTypeErr> {
match v {
Value::Json(Some(x)) => Ok($a(
serde_json::from_value(*x).map_err(|_| sea_query::ValueTypeErr)?
)),
_ => Err(sea_query::ValueTypeErr),
}
}
fn type_name() -> String {
stringify!($a).to_owned()
}
fn array_type() -> sea_query::ArrayType {
sea_query::ArrayType::Json
}
fn column_type() -> sea_query::ColumnType {
sea_query::ColumnType::JsonBinary
}
}
impl sea_query::Nullable for $a {
fn null() -> Value {
Value::Json(None)
}
}
};
}

View file

@ -1,30 +0,0 @@
mod macros;
use cfg_if::cfg_if;
use derive_more::{From, Into};
use sea_orm::{sea_query, DbErr, QueryResult, TryGetError, TryGetable, Value};
use serde::{Deserialize, Serialize};
use crate::impl_json_newtype;
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, From, Into, Default)]
pub struct JsonKeyword(pub Vec<Vec<String>>);
impl_json_newtype!(JsonKeyword);
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, From, Into, Default)]
pub struct JsonStringVec(pub Vec<String>);
impl_json_newtype!(JsonStringVec);
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, From, Into, Default)]
pub struct JsonI32Vec(pub Vec<i32>);
impl_json_newtype!(JsonI32Vec);
cfg_if! {
if #[cfg(feature = "noarray")] {
pub type StringVec = JsonStringVec;
pub type I32Vec = JsonI32Vec;
} else {
pub type StringVec = Vec<String>;
pub type I32Vec = Vec<i32>;
}
}

View file

@ -1,11 +1,9 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::NoteVisibilityEnum; use super::sea_orm_active_enums::NoteVisibilityEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "note")] #[sea_orm(table_name = "note")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -34,16 +32,16 @@ pub struct Model {
pub uri: Option<String>, pub uri: Option<String>,
pub score: i32, pub score: i32,
#[sea_orm(column_name = "fileIds")] #[sea_orm(column_name = "fileIds")]
pub file_ids: StringVec, pub file_ids: Vec<String>,
#[sea_orm(column_name = "attachedFileTypes")] #[sea_orm(column_name = "attachedFileTypes")]
pub attached_file_types: StringVec, pub attached_file_types: Vec<String>,
#[sea_orm(column_name = "visibleUserIds")] #[sea_orm(column_name = "visibleUserIds")]
pub visible_user_ids: StringVec, pub visible_user_ids: Vec<String>,
pub mentions: StringVec, pub mentions: Vec<String>,
#[sea_orm(column_name = "mentionedRemoteUsers", column_type = "Text")] #[sea_orm(column_name = "mentionedRemoteUsers", column_type = "Text")]
pub mentioned_remote_users: String, pub mentioned_remote_users: String,
pub emojis: StringVec, pub emojis: Vec<String>,
pub tags: StringVec, pub tags: Vec<String>,
#[sea_orm(column_name = "hasPoll")] #[sea_orm(column_name = "hasPoll")]
pub has_poll: bool, pub has_poll: bool,
#[sea_orm(column_name = "userHost")] #[sea_orm(column_name = "userHost")]
@ -63,6 +61,8 @@ pub struct Model {
pub thread_id: Option<String>, pub thread_id: Option<String>,
#[sea_orm(column_name = "updatedAt")] #[sea_orm(column_name = "updatedAt")]
pub updated_at: Option<DateTimeWithTimeZone>, pub updated_at: Option<DateTimeWithTimeZone>,
#[sea_orm(column_name = "lang")]
pub lang: Option<String>,
} }
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

View file

@ -1,10 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "note_edit")] #[sea_orm(table_name = "note_edit")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -15,7 +13,7 @@ pub struct Model {
pub text: Option<String>, pub text: Option<String>,
pub cw: Option<String>, pub cw: Option<String>,
#[sea_orm(column_name = "fileIds")] #[sea_orm(column_name = "fileIds")]
pub file_ids: StringVec, pub file_ids: Vec<String>,
#[sea_orm(column_name = "updatedAt")] #[sea_orm(column_name = "updatedAt")]
pub updated_at: DateTimeWithTimeZone, pub updated_at: DateTimeWithTimeZone,
} }

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_favorite")] #[sea_orm(table_name = "note_favorite")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_reaction")] #[sea_orm(table_name = "note_reaction")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_thread_muting")] #[sea_orm(table_name = "note_thread_muting")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_unread")] #[sea_orm(table_name = "note_unread")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_watching")] #[sea_orm(table_name = "note_watching")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,9 +1,9 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::NotificationTypeEnum; use super::sea_orm_active_enums::NotificationTypeEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "notification")] #[sea_orm(table_name = "notification")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,11 +1,9 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::PageVisibilityEnum; use super::sea_orm_active_enums::PageVisibilityEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "page")] #[sea_orm(table_name = "page")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -30,7 +28,7 @@ pub struct Model {
pub variables: Json, pub variables: Json,
pub visibility: PageVisibilityEnum, pub visibility: PageVisibilityEnum,
#[sea_orm(column_name = "visibleUserIds")] #[sea_orm(column_name = "visibleUserIds")]
pub visible_user_ids: StringVec, pub visible_user_ids: Vec<String>,
#[sea_orm(column_name = "likedCount")] #[sea_orm(column_name = "likedCount")]
pub liked_count: i32, pub liked_count: i32,
#[sea_orm(column_name = "hideTitleWhenPinned")] #[sea_orm(column_name = "hideTitleWhenPinned")]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "page_like")] #[sea_orm(table_name = "page_like")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "password_reset_request")] #[sea_orm(table_name = "password_reset_request")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,11 +1,9 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::PollNotevisibilityEnum; use super::sea_orm_active_enums::PollNotevisibilityEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::{I32Vec, StringVec}; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "poll")] #[sea_orm(table_name = "poll")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)]
@ -13,8 +11,8 @@ pub struct Model {
#[sea_orm(column_name = "expiresAt")] #[sea_orm(column_name = "expiresAt")]
pub expires_at: Option<DateTimeWithTimeZone>, pub expires_at: Option<DateTimeWithTimeZone>,
pub multiple: bool, pub multiple: bool,
pub choices: StringVec, pub choices: Vec<String>,
pub votes: I32Vec, pub votes: Vec<i32>,
#[sea_orm(column_name = "noteVisibility")] #[sea_orm(column_name = "noteVisibility")]
pub note_visibility: PollNotevisibilityEnum, pub note_visibility: PollNotevisibilityEnum,
#[sea_orm(column_name = "userId")] #[sea_orm(column_name = "userId")]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "poll_vote")] #[sea_orm(table_name = "poll_vote")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,4 +1,4 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
pub use super::abuse_user_report::Entity as AbuseUserReport; pub use super::abuse_user_report::Entity as AbuseUserReport;
pub use super::access_token::Entity as AccessToken; pub use super::access_token::Entity as AccessToken;

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "promo_note")] #[sea_orm(table_name = "promo_note")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "promo_read")] #[sea_orm(table_name = "promo_read")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "registration_ticket")] #[sea_orm(table_name = "registration_ticket")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,10 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "registry_item")] #[sea_orm(table_name = "registry_item")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -16,7 +14,7 @@ pub struct Model {
#[sea_orm(column_name = "userId")] #[sea_orm(column_name = "userId")]
pub user_id: String, pub user_id: String,
pub key: String, pub key: String,
pub scope: StringVec, pub scope: Vec<String>,
pub domain: Option<String>, pub domain: Option<String>,
#[sea_orm(column_type = "JsonBinary", nullable)] #[sea_orm(column_type = "JsonBinary", nullable)]
pub value: Option<Json>, pub value: Option<Json>,

View file

@ -1,9 +1,9 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::RelayStatusEnum; use super::sea_orm_active_enums::RelayStatusEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "relay")] #[sea_orm(table_name = "relay")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "renote_muting")] #[sea_orm(table_name = "renote_muting")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,11 +1,10 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "antenna_src_enum")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "antenna_src_enum")]
pub enum AntennaSrcEnum { pub enum AntennaSrcEnum {
#[default]
#[sea_orm(string_value = "all")] #[sea_orm(string_value = "all")]
All, All,
#[sea_orm(string_value = "group")] #[sea_orm(string_value = "group")]
@ -19,14 +18,13 @@ pub enum AntennaSrcEnum {
#[sea_orm(string_value = "users")] #[sea_orm(string_value = "users")]
Users, Users,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
enum_name = "meta_sensitivemediadetection_enum" enum_name = "meta_sensitivemediadetection_enum"
)] )]
pub enum MetaSensitivemediadetectionEnum { pub enum MetaSensitivemediadetectionEnum {
#[default]
#[sea_orm(string_value = "all")] #[sea_orm(string_value = "all")]
All, All,
#[sea_orm(string_value = "local")] #[sea_orm(string_value = "local")]
@ -36,7 +34,7 @@ pub enum MetaSensitivemediadetectionEnum {
#[sea_orm(string_value = "remote")] #[sea_orm(string_value = "remote")]
Remote, Remote,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
@ -47,7 +45,6 @@ pub enum MetaSensitivemediadetectionsensitivityEnum {
High, High,
#[sea_orm(string_value = "low")] #[sea_orm(string_value = "low")]
Low, Low,
#[default]
#[sea_orm(string_value = "medium")] #[sea_orm(string_value = "medium")]
Medium, Medium,
#[sea_orm(string_value = "veryHigh")] #[sea_orm(string_value = "veryHigh")]
@ -55,14 +52,13 @@ pub enum MetaSensitivemediadetectionsensitivityEnum {
#[sea_orm(string_value = "veryLow")] #[sea_orm(string_value = "veryLow")]
VeryLow, VeryLow,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
enum_name = "muted_note_reason_enum" enum_name = "muted_note_reason_enum"
)] )]
pub enum MutedNoteReasonEnum { pub enum MutedNoteReasonEnum {
#[default]
#[sea_orm(string_value = "manual")] #[sea_orm(string_value = "manual")]
Manual, Manual,
#[sea_orm(string_value = "other")] #[sea_orm(string_value = "other")]
@ -72,7 +68,7 @@ pub enum MutedNoteReasonEnum {
#[sea_orm(string_value = "word")] #[sea_orm(string_value = "word")]
Word, Word,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
@ -85,13 +81,12 @@ pub enum NoteVisibilityEnum {
Hidden, Hidden,
#[sea_orm(string_value = "home")] #[sea_orm(string_value = "home")]
Home, Home,
#[default]
#[sea_orm(string_value = "public")] #[sea_orm(string_value = "public")]
Public, Public,
#[sea_orm(string_value = "specified")] #[sea_orm(string_value = "specified")]
Specified, Specified,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
@ -120,11 +115,10 @@ pub enum NotificationTypeEnum {
ReceiveFollowRequest, ReceiveFollowRequest,
#[sea_orm(string_value = "renote")] #[sea_orm(string_value = "renote")]
Renote, Renote,
#[default]
#[sea_orm(string_value = "reply")] #[sea_orm(string_value = "reply")]
Reply, Reply,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
@ -133,13 +127,12 @@ pub enum NotificationTypeEnum {
pub enum PageVisibilityEnum { pub enum PageVisibilityEnum {
#[sea_orm(string_value = "followers")] #[sea_orm(string_value = "followers")]
Followers, Followers,
#[default]
#[sea_orm(string_value = "public")] #[sea_orm(string_value = "public")]
Public, Public,
#[sea_orm(string_value = "specified")] #[sea_orm(string_value = "specified")]
Specified, Specified,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
@ -150,24 +143,22 @@ pub enum PollNotevisibilityEnum {
Followers, Followers,
#[sea_orm(string_value = "home")] #[sea_orm(string_value = "home")]
Home, Home,
#[default]
#[sea_orm(string_value = "public")] #[sea_orm(string_value = "public")]
Public, Public,
#[sea_orm(string_value = "specified")] #[sea_orm(string_value = "specified")]
Specified, Specified,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "relay_status_enum")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "relay_status_enum")]
pub enum RelayStatusEnum { pub enum RelayStatusEnum {
#[sea_orm(string_value = "accepted")] #[sea_orm(string_value = "accepted")]
Accepted, Accepted,
#[sea_orm(string_value = "rejected")] #[sea_orm(string_value = "rejected")]
Rejected, Rejected,
#[default]
#[sea_orm(string_value = "requesting")] #[sea_orm(string_value = "requesting")]
Requesting, Requesting,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
@ -180,11 +171,10 @@ pub enum UserEmojimodpermEnum {
Full, Full,
#[sea_orm(string_value = "mod")] #[sea_orm(string_value = "mod")]
Mod, Mod,
#[default] #[sea_orm(string_value = "unauthorized")]
#[sea_orm(string_value = "none")]
Unauthorized, Unauthorized,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Default)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm( #[sea_orm(
rs_type = "String", rs_type = "String",
db_type = "Enum", db_type = "Enum",
@ -195,7 +185,38 @@ pub enum UserProfileFfvisibilityEnum {
Followers, Followers,
#[sea_orm(string_value = "private")] #[sea_orm(string_value = "private")]
Private, Private,
#[default]
#[sea_orm(string_value = "public")] #[sea_orm(string_value = "public")]
Public, Public,
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm(
rs_type = "String",
db_type = "Enum",
enum_name = "user_profile_mutingnotificationtypes_enum"
)]
pub enum UserProfileMutingnotificationtypesEnum {
#[sea_orm(string_value = "app")]
App,
#[sea_orm(string_value = "follow")]
Follow,
#[sea_orm(string_value = "followRequestAccepted")]
FollowRequestAccepted,
#[sea_orm(string_value = "groupInvited")]
GroupInvited,
#[sea_orm(string_value = "mention")]
Mention,
#[sea_orm(string_value = "pollEnded")]
PollEnded,
#[sea_orm(string_value = "pollVote")]
PollVote,
#[sea_orm(string_value = "quote")]
Quote,
#[sea_orm(string_value = "reaction")]
Reaction,
#[sea_orm(string_value = "receiveFollowRequest")]
ReceiveFollowRequest,
#[sea_orm(string_value = "renote")]
Renote,
#[sea_orm(string_value = "reply")]
Reply,
}

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "signin")] #[sea_orm(table_name = "signin")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "sw_subscription")] #[sea_orm(table_name = "sw_subscription")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "used_username")] #[sea_orm(table_name = "used_username")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,11 +1,9 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::UserEmojimodpermEnum; use super::sea_orm_active_enums::UserEmojimodpermEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "user")] #[sea_orm(table_name = "user")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -30,7 +28,7 @@ pub struct Model {
pub avatar_id: Option<String>, pub avatar_id: Option<String>,
#[sea_orm(column_name = "bannerId", unique)] #[sea_orm(column_name = "bannerId", unique)]
pub banner_id: Option<String>, pub banner_id: Option<String>,
pub tags: StringVec, pub tags: Vec<String>,
#[sea_orm(column_name = "isSuspended")] #[sea_orm(column_name = "isSuspended")]
pub is_suspended: bool, pub is_suspended: bool,
#[sea_orm(column_name = "isSilenced")] #[sea_orm(column_name = "isSilenced")]
@ -41,13 +39,11 @@ pub struct Model {
pub is_bot: bool, pub is_bot: bool,
#[sea_orm(column_name = "isCat")] #[sea_orm(column_name = "isCat")]
pub is_cat: bool, pub is_cat: bool,
#[sea_orm(column_name = "emojiModPerm")]
pub emoji_mod_perm: UserEmojimodpermEnum,
#[sea_orm(column_name = "isAdmin")] #[sea_orm(column_name = "isAdmin")]
pub is_admin: bool, pub is_admin: bool,
#[sea_orm(column_name = "isModerator")] #[sea_orm(column_name = "isModerator")]
pub is_moderator: bool, pub is_moderator: bool,
pub emojis: StringVec, pub emojis: Vec<String>,
pub host: Option<String>, pub host: Option<String>,
pub inbox: Option<String>, pub inbox: Option<String>,
#[sea_orm(column_name = "sharedInbox")] #[sea_orm(column_name = "sharedInbox")]
@ -74,6 +70,8 @@ pub struct Model {
pub also_known_as: Option<String>, pub also_known_as: Option<String>,
#[sea_orm(column_name = "speakAsCat")] #[sea_orm(column_name = "speakAsCat")]
pub speak_as_cat: bool, pub speak_as_cat: bool,
#[sea_orm(column_name = "emojiModPerm")]
pub emoji_mod_perm: UserEmojimodpermEnum,
#[sea_orm(column_name = "isIndexable")] #[sea_orm(column_name = "isIndexable")]
pub is_indexable: bool, pub is_indexable: bool,
} }

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_group")] #[sea_orm(table_name = "user_group")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_group_invitation")] #[sea_orm(table_name = "user_group_invitation")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_group_invite")] #[sea_orm(table_name = "user_group_invite")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_group_joining")] #[sea_orm(table_name = "user_group_joining")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_ip")] #[sea_orm(table_name = "user_ip")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_keypair")] #[sea_orm(table_name = "user_keypair")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_list")] #[sea_orm(table_name = "user_list")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_list_joining")] #[sea_orm(table_name = "user_list_joining")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_note_pining")] #[sea_orm(table_name = "user_note_pining")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_pending")] #[sea_orm(table_name = "user_pending")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,11 +1,10 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use super::sea_orm_active_enums::UserProfileFfvisibilityEnum; use super::sea_orm_active_enums::UserProfileFfvisibilityEnum;
use super::sea_orm_active_enums::UserProfileMutingnotificationtypesEnum;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "user_profile")] #[sea_orm(table_name = "user_profile")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)]
@ -53,7 +52,7 @@ pub struct Model {
#[sea_orm(column_name = "mutedWords", column_type = "JsonBinary")] #[sea_orm(column_name = "mutedWords", column_type = "JsonBinary")]
pub muted_words: Json, pub muted_words: Json,
#[sea_orm(column_name = "mutingNotificationTypes")] #[sea_orm(column_name = "mutingNotificationTypes")]
pub muting_notification_types: StringVec, pub muting_notification_types: Vec<UserProfileMutingnotificationtypesEnum>,
#[sea_orm(column_name = "noCrawle")] #[sea_orm(column_name = "noCrawle")]
pub no_crawle: bool, pub no_crawle: bool,
#[sea_orm(column_name = "receiveAnnouncementEmail")] #[sea_orm(column_name = "receiveAnnouncementEmail")]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_publickey")] #[sea_orm(table_name = "user_publickey")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)]

View file

@ -1,8 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_security_key")] #[sea_orm(table_name = "user_security_key")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]

View file

@ -1,10 +1,8 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.10
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use super::newtype::StringVec; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Default)]
#[sea_orm(table_name = "webhook")] #[sea_orm(table_name = "webhook")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
@ -14,7 +12,7 @@ pub struct Model {
#[sea_orm(column_name = "userId")] #[sea_orm(column_name = "userId")]
pub user_id: String, pub user_id: String,
pub name: String, pub name: String,
pub on: StringVec, pub on: Vec<String>,
pub url: String, pub url: String,
pub secret: String, pub secret: String,
pub active: bool, pub active: bool,

View file

@ -1,4 +1,4 @@
pub mod entity; pub mod entity;
pub mod error; pub mod error;
pub mod repository; // pub mod repository;
pub mod schema; pub mod schema;

View file

@ -1,5 +1,3 @@
pub mod antenna;
use async_trait::async_trait; use async_trait::async_trait;
use schemars::JsonSchema; use schemars::JsonSchema;

View file

@ -1,56 +0,0 @@
use async_trait::async_trait;
use cfg_if::cfg_if;
use sea_orm::EntityTrait;
use crate::database;
use crate::model::entity::{antenna, user_group_joining};
use crate::model::error::Error;
use crate::model::schema::Antenna;
use super::macros::impl_pack_by_id;
use super::Repository;
#[async_trait]
impl Repository<Antenna> for antenna::Model {
async fn pack(self) -> Result<Antenna, Error> {
let db = database::get_database()?;
let user_group_joining = match self.user_group_joining_id {
None => None,
Some(id) => user_group_joining::Entity::find_by_id(id).one(db).await?,
};
let user_group_id = match user_group_joining {
None => None,
Some(m) => Some(m.user_group_id),
};
cfg_if! {
if #[cfg(feature = "napi")] {
let created_at: String = self.created_at.to_rfc3339();
} else {
let created_at: chrono::DateTime<chrono::Utc> = self.created_at.into();
}
}
Ok(Antenna {
id: self.id,
created_at,
name: self.name,
keywords: self.keywords.into(),
exclude_keywords: self.exclude_keywords.into(),
src: self.src.try_into()?,
user_list_id: self.user_list_id,
user_group_id,
users: self.users,
instances: self.instances.into(),
case_sensitive: self.case_sensitive,
notify: self.notify,
with_replies: self.with_replies,
with_file: self.with_file,
has_unread_note: false,
})
}
async fn pack_by_id(id: String) -> Result<Antenna, Error> {
impl_pack_by_id!(antenna::Entity, id)
}
}

View file

@ -1,7 +1,3 @@
pub mod antenna;
pub mod app;
use cfg_if::cfg_if;
use jsonschema::JSONSchema; use jsonschema::JSONSchema;
use schemars::{schema_for, JsonSchema}; use schemars::{schema_for, JsonSchema};
@ -20,16 +16,3 @@ pub trait Schema<T: JsonSchema> {
.expect("Unable to compile schema") .expect("Unable to compile schema")
} }
} }
cfg_if! {
if #[cfg(feature = "napi")] {
// Will be disabled once we completely migrate to rust
pub use antenna::NativeAntennaSchema as Antenna;
pub use antenna::NativeAntennaSrc as AntennaSrc;
} else {
pub use antenna::Antenna;
pub use antenna::AntennaSrc;
pub use app::App;
pub use app::AppPermission;
}
}

View file

@ -1,217 +0,0 @@
use cfg_if::cfg_if;
use jsonschema::JSONSchema;
use once_cell::sync::Lazy;
use parse_display::FromStr;
use schemars::JsonSchema;
use utoipa::ToSchema;
use super::Schema;
use crate::model;
use crate::model::entity::sea_orm_active_enums::AntennaSrcEnum;
#[derive(Clone, Debug, PartialEq, Eq, JsonSchema, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct Antenna {
pub id: String,
pub created_at: chrono::DateTime<chrono::Utc>,
pub name: String,
pub keywords: Vec<Vec<String>>,
pub exclude_keywords: Vec<Vec<String>>,
#[schema(inline)]
pub src: AntennaSrc,
pub user_list_id: Option<String>,
pub user_group_id: Option<String>,
pub users: Vec<String>,
pub instances: Vec<String>,
#[serde(default)]
pub case_sensitive: bool,
#[serde(default)]
pub notify: bool,
#[serde(default)]
pub with_replies: bool,
#[serde(default)]
pub with_file: bool,
#[serde(default)]
pub has_unread_note: bool,
}
#[derive(Clone, Debug, FromStr, PartialEq, Eq, JsonSchema, ToSchema)]
#[serde(rename_all = "camelCase")]
#[display(style = "camelCase")]
#[display("'{}'")]
pub enum AntennaSrc {
Home,
All,
Users,
List,
Group,
Instances,
}
impl TryFrom<AntennaSrcEnum> for super::AntennaSrc {
type Error = model::error::Error;
fn try_from(value: AntennaSrcEnum) -> Result<Self, Self::Error> {
value.to_string().parse().map_err(model::error::Error::from)
}
}
// ---- TODO: could be macro
impl Schema<Self> for super::Antenna {}
pub static VALIDATOR: Lazy<JSONSchema> = Lazy::new(super::Antenna::validator);
// ----
cfg_if! {
if #[cfg(feature = "napi")] {
use napi::bindgen_prelude::{FromNapiValue, ToNapiValue};
use napi_derive::napi;
use crate::model::entity::antenna;
use crate::model::repository::Repository;
/// For NAPI because [chrono] is not supported.
#[napi(object)]
#[derive(Clone, Debug, PartialEq, Eq, JsonSchema, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct NativeAntennaSchema {
pub id: String,
pub created_at: String,
pub name: String,
pub keywords: Vec<Vec<String>>,
pub exclude_keywords: Vec<Vec<String>>,
#[schema(inline)]
pub src: NativeAntennaSrc,
pub user_list_id: Option<String>,
pub user_group_id: Option<String>,
pub users: Vec<String>,
pub instances: Vec<String>,
#[serde(default)]
pub case_sensitive: bool,
#[serde(default)]
pub notify: bool,
#[serde(default)]
pub with_replies: bool,
#[serde(default)]
pub with_file: bool,
#[serde(default)]
pub has_unread_note: bool,
}
#[napi(string_enum)]
#[derive(Debug, FromStr, PartialEq, Eq, JsonSchema, ToSchema)]
#[display("'{}'")]
#[allow(non_camel_case_types)]
pub enum NativeAntennaSrc {
home,
all,
users,
list,
group,
instances,
}
#[napi]
pub async fn native_pack_antenna_by_id(id: String) -> napi::Result<NativeAntennaSchema> {
antenna::Model::pack_by_id(id).await.map_err(Into::into)
}
}
}
#[cfg(test)]
mod unit_test {
use cfg_if::cfg_if;
use pretty_assertions::assert_eq;
use serde_json::json;
use crate::model::{entity::sea_orm_active_enums::AntennaSrcEnum, schema::AntennaSrc};
use super::VALIDATOR;
#[test]
fn src_from_active_enum() {
let src = AntennaSrc::try_from(AntennaSrcEnum::All).unwrap();
cfg_if! {
if #[cfg(feature = "napi")] {
assert_eq!(src, AntennaSrc::all);
} else {
assert_eq!(src, AntennaSrc::All);
}
}
}
#[test]
fn antenna_valid() {
let instance = json!({
"id": "9fil64s6g7cskdrb",
"createdAt": "2023-05-24T06:56:14.323Z",
"name": "Valid Antenna",
"keywords": [["first", "keyword"], ["second"]],
"excludeKeywords": [["excluding", "keywrods"], ["from", "antenna"]],
"src": "users",
// "userListId" and "userGroupId" can be null or be omitted
"userListId": null,
"users": ["9fil64s6g7cskdrb", "9fil66brl1udxau2"],
"instances": [],
// "caseSensitive", "notify", "withReplies", "withFile", and
// "hasUnreadNote" are false if ommited
"notify": false,
"withReplies": false,
"withFile": false,
"hasUnreadNote": false,
});
assert!(VALIDATOR.is_valid(&instance));
}
#[test]
fn antenna_invalid() {
let instance = json!({
// "id" is required
"id": null,
// trailing "Z" is missing
"createdAt": "2023-05-24T07:36:34.389",
// "name" is required
// "keywords" must be an array
"keywords": "invalid keyword",
// "excludeKeywords" is required
"excludeKeywords": null,
// "src" must be one of "home", "all", "users", "list", "group", and
// "instances"
"src": "invalid_src",
// "userListId" is string
"userListId": ["9f4ziiqfxw"],
// "users" must be an array of strings
"users": [1, "9fil64s6g7cskdrb"],
"instances": ["9fil65jzhtjpi3xn"],
// "caseSensitive" is boolean
"caseSensitive": 0,
"notify": true,
"withReplies": true,
"withFile": true,
"hasUnreadNote": true,
});
let result = VALIDATOR
.validate(&instance)
.expect_err("validation must fail");
let mut paths: Vec<String> = result
.map(|e| e.instance_path.to_string())
.filter(|e| !e.is_empty())
.collect();
paths.sort();
assert_eq!(
paths,
vec![
"/caseSensitive",
#[cfg(not(feature = "napi"))]
"/createdAt",
"/excludeKeywords",
"/id",
"/keywords",
"/src",
"/userListId",
"/users/0"
]
);
}
}

View file

@ -1,147 +0,0 @@
use jsonschema::JSONSchema;
use once_cell::sync::Lazy;
use schemars::JsonSchema;
use utoipa::ToSchema;
use super::Schema;
#[derive(Clone, Debug, PartialEq, Eq, JsonSchema, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct App {
pub id: String,
pub name: String,
#[schemars(url)]
pub callback_url: Option<String>,
#[schema(inline)]
pub permission: Vec<AppPermission>,
pub secret: Option<String>,
pub is_authorized: Option<bool>,
}
/// This represents `permissions` in `packages/firefish-js/src/consts.ts`.
#[derive(Clone, Debug, PartialEq, Eq, JsonSchema, ToSchema)]
pub enum AppPermission {
#[serde(rename = "read:account")]
ReadAccount,
#[serde(rename = "write:account")]
WriteAccount,
#[serde(rename = "read:blocks")]
ReadBlocks,
#[serde(rename = "write:blocks")]
WriteBlocks,
#[serde(rename = "read:drive")]
ReadDrive,
#[serde(rename = "write:drive")]
WriteDrive,
#[serde(rename = "read:favorites")]
ReadFavorites,
#[serde(rename = "write:favorites")]
WriteFavorites,
#[serde(rename = "read:following")]
ReadFollowing,
#[serde(rename = "write:following")]
WriteFollowing,
#[serde(rename = "read:messaging")]
ReadMessaging,
#[serde(rename = "write:messaging")]
WriteMessaging,
#[serde(rename = "read:mutes")]
ReadMutes,
#[serde(rename = "write:mutes")]
WriteMutes,
#[serde(rename = "read:notes")]
ReadNotes,
#[serde(rename = "write:notes")]
WriteNotes,
#[serde(rename = "read:notifications")]
ReadNotifications,
#[serde(rename = "write:notifications")]
WriteNotifications,
#[serde(rename = "read:reactions")]
ReadReactions,
#[serde(rename = "write:reactions")]
WriteReactions,
#[serde(rename = "write:votes")]
WriteVotes,
#[serde(rename = "read:pages")]
ReadPages,
#[serde(rename = "write:pages")]
WritePages,
#[serde(rename = "read:page-likes")]
ReadPageLikes,
#[serde(rename = "write:page-likes")]
WritePageLikes,
#[serde(rename = "read:user-groups")]
ReadUserGroups,
#[serde(rename = "write:user-groups")]
WriteUserGroups,
#[serde(rename = "read:channels")]
ReadChannels,
#[serde(rename = "write:channels")]
WriteChannels,
#[serde(rename = "read:gallery")]
ReadGallery,
#[serde(rename = "write:gallery")]
WriteGallery,
#[serde(rename = "read:gallery-likes")]
ReadGalleryLikes,
#[serde(rename = "write:gallery-likes")]
WriteGalleryLikes,
}
impl Schema<Self> for App {}
pub static VALIDATOR: Lazy<JSONSchema> = Lazy::new(App::validator);
#[cfg(test)]
mod unit_test {
use pretty_assertions::assert_eq;
use serde_json::json;
use crate::util::id::{create_id, init_id};
use crate::util::random::gen_string;
use super::VALIDATOR;
#[test]
fn app_valid() {
init_id(16, "");
let instance = json!({
"id": create_id(0).unwrap(),
"name": "Test App",
"secret": gen_string(24),
"callbackUrl": "urn:ietf:wg:oauth:2.0:oob",
"permission": ["read:account", "write:account", "read:notes"],
});
assert!(VALIDATOR.is_valid(&instance));
}
#[test]
fn app_invalid() {
init_id(16, "");
let instance = json!({
"id": create_id(0).unwrap(),
// "name" is required
"name": null,
// "permission" must be one of the app permissions
"permission": ["write:invalid_perm", "write:notes"],
// "secret" is a nullable string
"secret": 123,
// "is_authorized" is a nullable boolean
"isAuthorized": "true-ish",
});
let result = VALIDATOR
.validate(&instance)
.expect_err("validation must fail");
let mut paths: Vec<String> = result
.map(|e| e.instance_path.to_string())
.filter(|e| !e.is_empty())
.collect();
paths.sort();
assert_eq!(
paths,
vec!["/isAuthorized", "/name", "/permission/0", "/secret"]
);
}
}

View file

@ -77,9 +77,6 @@ import { entities as charts } from "@/services/chart/entities.js";
import { dbLogger } from "./logger.js"; import { dbLogger } from "./logger.js";
import { redisClient } from "./redis.js"; import { redisClient } from "./redis.js";
// TODO?: should we avoid importing things from built directory?
import { nativeInitDatabase } from "native-utils/built/index.js";
const sqlLogger = dbLogger.createSubLogger("sql", "gray", false); const sqlLogger = dbLogger.createSubLogger("sql", "gray", false);
class MyCustomLogger implements Logger { class MyCustomLogger implements Logger {
@ -222,11 +219,6 @@ export const db = new DataSource({
}); });
export async function initDb(force = false) { export async function initDb(force = false) {
await nativeInitDatabase(
`postgres://${config.db.user}:${encodeURIComponent(config.db.pass)}@${
config.db.host
}:${config.db.port}/${config.db.db}`,
);
if (force) { if (force) {
if (db.isInitialized) { if (db.isInitialized) {
await db.destroy(); await db.destroy();

View file

@ -1,14 +1,33 @@
import { db } from "@/db/postgre.js"; import { db } from "@/db/postgre.js";
import { Antenna } from "@/models/entities/antenna.js"; import { Antenna } from "@/models/entities/antenna.js";
import { import type { Packed } from "@/misc/schema.js";
NativeAntennaSchema, import { UserGroupJoinings } from "@/models/index.js";
nativePackAntennaById,
} from "native-utils/built/index.js";
export const AntennaRepository = db.getRepository(Antenna).extend({ export const AntennaRepository = db.getRepository(Antenna).extend({
async pack(src: Antenna["id"] | Antenna): Promise<NativeAntennaSchema> { async pack(src: Antenna["id"] | Antenna): Promise<Packed<"Antenna">> {
const id = typeof src === "object" ? src.id : src; const antenna =
typeof src === "object" ? src : await this.findOneByOrFail({ id: src });
return await nativePackAntennaById(id); const userGroupJoining = antenna.userGroupJoiningId
? await UserGroupJoinings.findOneBy({ id: antenna.userGroupJoiningId })
: null;
return {
id: antenna.id,
createdAt: antenna.createdAt.toISOString(),
name: antenna.name,
keywords: antenna.keywords,
excludeKeywords: antenna.excludeKeywords,
src: antenna.src,
userListId: antenna.userListId,
userGroupId: userGroupJoining ? userGroupJoining.userGroupId : null,
users: antenna.users,
instances: antenna.instances,
caseSensitive: antenna.caseSensitive,
notify: antenna.notify,
withReplies: antenna.withReplies,
withFile: antenna.withFile,
hasUnreadNote: false,
};
}, },
}); });