--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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<u8>,
+
+ #[sea_orm(belongs_to, from = "attachment_id", to = "attachment_id")]
+ pub note: HasOne<crate::attachment::Entity>
+}
+
+impl ActiveModelBehavior for ActiveModel {}
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
-use sea_orm::entity::prelude::*;
-
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* POSSIBILITY OF SUCH DAMAGE.
*/
+use sea_orm::entity::prelude::*;
+
#[sea_orm::model]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "note")]
)
.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
}
enum Note {
CollectionId,
Nodename
+}
+
+#[derive(Iden)]
+enum Attachment {
+ CollectionId,
+ Nodename
}
\ No newline at end of file