From: Olaf Wintermann Date: Wed, 19 Aug 2026 16:48:48 +0000 (+0200) Subject: add entity models for attachments X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=f75a64c1cded8bd1ee36e10963982b88827f7c66;p=note.git add entity models for attachments --- diff --git a/entity/src/attachment.rs b/entity/src/attachment.rs new file mode 100644 index 0000000..b6144a3 --- /dev/null +++ b/entity/src/attachment.rs @@ -0,0 +1,48 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2026 Olaf Wintermann. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +use sea_orm::entity::prelude::*; + +#[sea_orm::model] +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "attachment")] +pub struct Model { + #[sea_orm(primary_key)] + pub attachment_id: i32, + pub note_id: i32, + pub collection_id: i32, + + pub nodename: String, + pub title: String, + pub content_type: String, + + pub lastmodified: DateTimeWithTimeZone, + pub created: DateTimeWithTimeZone, +} + +impl ActiveModelBehavior for ActiveModel {} \ No newline at end of file diff --git a/entity/src/attachmentcontent.rs b/entity/src/attachmentcontent.rs new file mode 100644 index 0000000..27c8e57 --- /dev/null +++ b/entity/src/attachmentcontent.rs @@ -0,0 +1,48 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2026 Olaf Wintermann. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +use sea_orm::entity::prelude::*; + +use sea_orm::{ActiveModelBehavior, DeriveEntityModel, DeriveRelation, EnumIter}; + +#[sea_orm::model] +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "attachment_content")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + + pub attachment_id: i32, + + pub content: Vec, + + #[sea_orm(belongs_to, from = "attachment_id", to = "attachment_id")] + pub note: HasOne +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/entity/src/lib.rs b/entity/src/lib.rs index 0fc36c5..08b265d 100644 --- a/entity/src/lib.rs +++ b/entity/src/lib.rs @@ -4,4 +4,6 @@ pub mod collection; pub mod note; pub mod notecontent; pub mod repository; -pub mod filecontent; \ No newline at end of file +pub mod filecontent; +mod attachment; +mod attachmentcontent; \ No newline at end of file diff --git a/entity/src/note.rs b/entity/src/note.rs index 55d8603..73ef386 100644 --- a/entity/src/note.rs +++ b/entity/src/note.rs @@ -1,5 +1,3 @@ -use sea_orm::entity::prelude::*; - /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * @@ -28,6 +26,8 @@ use sea_orm::entity::prelude::*; * POSSIBILITY OF SUCH DAMAGE. */ +use sea_orm::entity::prelude::*; + #[sea_orm::model] #[derive(Clone, Debug, PartialEq, DeriveEntityModel)] #[sea_orm(table_name = "note")] diff --git a/migration/src/m20260502_184134_create_settings.rs b/migration/src/m20260502_184134_create_settings.rs index c91f191..07ce8e4 100644 --- a/migration/src/m20260502_184134_create_settings.rs +++ b/migration/src/m20260502_184134_create_settings.rs @@ -110,6 +110,72 @@ impl MigrationTrait for Migration { ) .to_owned(), ) + .await?; + + manager + .create_table( + Table::create() + .table("file_content") + .if_not_exists() + .col(integer("id").primary_key()) + .col(integer("note_id").unique_key()) + .col(blob("content")) + .foreign_key( + ForeignKey::create() + .name("fk-note_file_content-note") + .from("file_content", "note_id") + .to("note", "note_id") + .on_delete(ForeignKeyAction::Cascade), + ) + .to_owned(), + ) + .await?; + + manager + .create_table( + Table::create() + .table("attachment") + .if_not_exists() + .col(pk_auto("attachment_id")) + .col(integer("note_id")) + .col(integer("collection_id")) + .col(string("nodename")) + .col(string("title")) + .col(string("content_type")) + .col(timestamp_with_time_zone("lastmodified")) + .col(timestamp_with_time_zone("created")) + .to_owned() + ).await?; + + manager.create_index( + Index::create() + .name("index-attachment-name") + .table("attachment") + .col(Attachment::CollectionId) + .col(Attachment::Nodename) + .unique() + .to_owned() + + + ).await?; + + manager + .create_table( + Table::create() + .table("attachment_content") + .if_not_exists() + .col(integer("id").primary_key()) + .col(integer("attachment_id").unique_key()) + .col(blob("content")) + .foreign_key( + ForeignKey::create() + .name("fk-attachment-content") + .from("attachment_content", "attachment_id") + .to("attachment", "attachment_id") + .on_delete(ForeignKeyAction::Cascade), + ) + .to_owned(), + ) .await } @@ -134,4 +200,10 @@ impl MigrationTrait for Migration { enum Note { CollectionId, Nodename +} + +#[derive(Iden)] +enum Attachment { + CollectionId, + Nodename } \ No newline at end of file