Make indexer rules optional (#965)

* optional indexer rules

* lockfile
This commit is contained in:
Brendan Allan authored and GitHub committed 2023-06-18 22:13:55 +00:00
1 parent fd1afd8500
commit 2d703f2648
6 files changed
+42 -41

No files matched your search

+8 -9
View File
@@ -447,13 +447,14 @@ model Job {
//// Indexer Rules ////
model IndexerRule {
id Int @id @default(autoincrement())
pub_id Bytes? @unique
name String
default Boolean @default(false)
rules_per_kind Bytes
date_created DateTime @default(now())
date_modified DateTime @default(now())
id Int @id @default(autoincrement())
pub_id Bytes @unique
name String?
default Boolean?
rules_per_kind Bytes?
date_created DateTime?
date_modified DateTime?
locations IndexerRulesInLocation[]
@@ -461,8 +462,6 @@ model IndexerRule {
}
model IndexerRulesInLocation {
date_created DateTime @default(now())
location_id Int
location Location @relation(fields: [location_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
+1 -1
View File
@@ -215,7 +215,7 @@ fn mount_indexer_rule_routes() -> AlphaRouter<Ctx> {
.exec()
.await?
{
if indexer_rule.default {
if indexer_rule.default.unwrap_or_default() {
return Err(rspc::Error::new(
ErrorCode::Forbidden,
format!("Indexer rule <id={indexer_rule_id}> can't be deleted"),
+3 -3
View File
@@ -49,9 +49,9 @@ impl Migrate for LibraryConfig {
.enumerate()
.map(|(i, name)| {
db.indexer_rule().update_many(
vec![indexer_rule::name::equals(name)],
vec![indexer_rule::pub_id::set(Some(uuid_to_bytes(
Uuid::from_u128(i as u128),
vec![indexer_rule::name::equals(Some(name))],
vec![indexer_rule::pub_id::set(uuid_to_bytes(Uuid::from_u128(
i as u128,
)))],
)
})
+28 -25
View File
@@ -2,7 +2,7 @@ use crate::{
library::Library,
prisma::indexer_rule,
util::{
db::uuid_to_bytes,
db::{maybe_missing, uuid_to_bytes, MissingFieldError},
error::{FileIOError, NonUtf8PathError},
},
};
@@ -46,6 +46,8 @@ pub enum IndexerRuleError {
RejectByItsChildrenFileIO(FileIOError),
#[error("database error: {0}")]
Database(#[from] prisma_client_rust::QueryError),
#[error("missing-field: {0}")]
MissingField(#[from] MissingFieldError),
}
impl From<IndexerRuleError> for rspc::Error {
@@ -122,16 +124,18 @@ impl IndexerRuleCreateArgs {
return Ok(None);
}
use indexer_rule::*;
Ok(Some(
library
.db
.indexer_rule()
.create(
self.name,
rules_data,
vec![indexer_rule::pub_id::set(Some(uuid_to_bytes(
generate_pub_id(),
)))],
uuid_to_bytes(generate_pub_id()),
vec![
name::set(Some(self.name)),
rules_per_kind::set(Some(rules_data)),
],
)
.exec()
.await?,
@@ -485,11 +489,14 @@ impl TryFrom<&indexer_rule::Data> for IndexerRule {
fn try_from(data: &indexer_rule::Data) -> Result<Self, Self::Error> {
Ok(Self {
id: Some(data.id),
name: data.name.clone(),
default: data.default,
rules: rmp_serde::from_slice(&data.rules_per_kind)?,
date_created: data.date_created.into(),
date_modified: data.date_modified.into(),
name: maybe_missing(data.name.clone(), "indexer_rule.name")?,
default: maybe_missing(data.default, "indexer_rule.default")?,
rules: rmp_serde::from_slice(maybe_missing(
&data.rules_per_kind,
"indexer_rule.rules_per_kind",
)?)?,
date_created: maybe_missing(data.date_created, "indexer_rule.date_created")?.into(),
date_modified: maybe_missing(data.date_modified, "indexer_rule.date_modified")?.into(),
})
}
}
@@ -643,24 +650,20 @@ mod seeder {
let pub_id = uuid_to_bytes(Uuid::from_u128(i as u128));
let rules = rmp_serde::to_vec_named(&rule.rules).map_err(IndexerRuleError::from)?;
use indexer_rule::*;
let data = vec![
name::set(Some(rule.name.to_string())),
rules_per_kind::set(Some(rules.clone())),
default::set(Some(rule.default)),
];
client
.indexer_rule()
.upsert(
indexer_rule::pub_id::equals(pub_id.clone()),
indexer_rule::create(
rule.name.to_string(),
rules.clone(),
vec![
indexer_rule::pub_id::set(Some(pub_id.clone())),
indexer_rule::default::set(rule.default),
],
),
vec![
indexer_rule::name::set(rule.name.to_string()),
indexer_rule::rules_per_kind::set(rules),
indexer_rule::pub_id::set(Some(pub_id.clone())),
indexer_rule::default::set(rule.default),
],
indexer_rule::create(pub_id.clone(), data.clone()),
data,
)
.exec()
.await?;
+1 -1
View File
@@ -120,7 +120,7 @@ export type GetArgs = { id: number }
export type IdentifyUniqueFilesArgs = { id: number; path: string }
export type IndexerRule = { id: number; pub_id: number[] | null; name: string; default: boolean; rules_per_kind: number[]; date_created: string; date_modified: string }
export type IndexerRule = { id: number; pub_id: number[]; name: string | null; default: boolean | null; rules_per_kind: number[] | null; date_created: string | null; date_modified: string | null }
/**
* `IndexerRuleCreateArgs` is the argument received from the client using rspc to create a new indexer rule.
+1 -2
View File
@@ -5829,7 +5829,7 @@ packages:
magic-string: 0.27.0
react-docgen-typescript: 2.2.2(typescript@5.0.4)
typescript: 5.0.4
vite: 4.3.9(less@4.1.3)
vite: 4.3.9(@types/node@18.15.1)
/@jridgewell/gen-mapping@0.3.3:
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
@@ -23807,7 +23807,6 @@ packages:
rollup: 3.24.1
optionalDependencies:
fsevents: 2.3.2
dev: true
/vite@4.3.9(less@4.1.3):
resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==}