use diesel::prelude::*;
#[cfg(feature = "napi")]
use napi_derive::napi;
#[cfg(feature = "pyo3")]
use pyo3::prelude::*;
#[cfg(feature = "pyo3")]
use rbox_derives::PyMutableMapping;
use super::djmd_content::DjmdContent;
use super::schema::{djmdContent, djmdHotCueBanklist, djmdSongHotCueBanklist, hotCueBanklistCue};
use super::{Date, DateString};
use crate::enums::HotCueBanklistType;
use crate::model_traits::Model;
#[cfg(feature = "pyo3")]
use crate::util::{PyItemsIter, PyObjectIter, PyStrIter};
#[derive(
Debug, Clone, PartialEq, Default, HasQuery, Identifiable, Insertable, AsChangeset, Associations,
)]
#[diesel(table_name = djmdHotCueBanklist)]
#[diesel(primary_key(id))]
#[diesel(belongs_to(DjmdHotCueBanklist, foreign_key = parent_id))]
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
#[cfg_attr(feature = "pyo3", pyclass(get_all, set_all, mapping))]
#[cfg_attr(feature = "pyo3", derive(PyMutableMapping))]
#[cfg_attr(feature = "napi", napi(object))]
pub struct DjmdHotCueBanklist {
pub id: String,
pub uuid: String,
pub rb_data_status: i32,
pub rb_local_data_status: i32,
pub rb_local_deleted: i32,
pub rb_local_synced: i32,
pub usn: Option<i32>,
pub rb_local_usn: Option<i32>,
#[diesel(serialize_as = DateString)]
#[diesel(deserialize_as = DateString)]
pub created_at: Date,
#[diesel(serialize_as = DateString)]
#[diesel(deserialize_as = DateString)]
pub updated_at: Date,
pub seq: i32,
pub name: String,
pub image_path: Option<String>,
pub attribute: HotCueBanklistType,
pub parent_id: String,
}
impl Model for DjmdHotCueBanklist {
type Id = str;
fn all(conn: &mut SqliteConnection) -> QueryResult<Vec<Self>> {
Self::query().load(conn)
}
fn find(conn: &mut SqliteConnection, id: &Self::Id) -> QueryResult<Option<Self>> {
Self::query().find(id).first(conn).optional()
}
fn id_exists(conn: &mut SqliteConnection, id: &Self::Id) -> QueryResult<bool> {
diesel::dsl::select(diesel::dsl::exists(Self::query().find(id))).get_result(conn)
}
}
impl DjmdHotCueBanklist {
pub fn by_parent_id(conn: &mut SqliteConnection, parent_id: &str) -> QueryResult<Vec<Self>> {
Self::query()
.filter(djmdHotCueBanklist::parent_id.eq(parent_id))
.load(conn)
}
pub fn get_contents(conn: &mut SqliteConnection, id: &str) -> QueryResult<Vec<DjmdContent>> {
djmdContent::table
.inner_join(
djmdSongHotCueBanklist::table
.on(djmdContent::id.eq(djmdSongHotCueBanklist::content_id)),
)
.filter(djmdSongHotCueBanklist::hot_cue_banklist_id.eq(&id))
.select(DjmdContent::as_select())
.load(conn)
}
}
#[derive(
Debug, Clone, PartialEq, Default, HasQuery, Identifiable, Insertable, AsChangeset, Associations,
)]
#[diesel(table_name = djmdSongHotCueBanklist)]
#[diesel(primary_key(id))]
#[diesel(belongs_to(DjmdContent, foreign_key = content_id))]
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
#[cfg_attr(feature = "pyo3", pyclass(get_all, set_all, mapping))]
#[cfg_attr(feature = "pyo3", derive(PyMutableMapping))]
#[cfg_attr(feature = "napi", napi(object))]
pub struct DjmdSongHotCueBanklist {
pub id: String,
pub uuid: String,
pub rb_data_status: i32,
pub rb_local_data_status: i32,
pub rb_local_deleted: i32,
pub rb_local_synced: i32,
pub usn: Option<i32>,
pub rb_local_usn: Option<i32>,
#[diesel(serialize_as = DateString)]
#[diesel(deserialize_as = DateString)]
pub created_at: Date,
#[diesel(serialize_as = DateString)]
#[diesel(deserialize_as = DateString)]
pub updated_at: Date,
pub hot_cue_banklist_id: String,
pub content_id: String,
pub track_no: i32,
pub cue_id: String,
pub in_msec: i32,
pub in_frame: i32,
pub in_mpeg_frame: i32,
pub in_mpeg_abs: i32,
pub out_msec: i32,
pub out_frame: i32,
pub out_mpeg_frame: i32,
pub out_mpeg_abs: i32,
pub color: i32,
pub color_table_index: Option<i32>,
pub active_loop: Option<i32>,
pub comment: Option<String>,
pub beat_loop_size: Option<i32>,
pub cue_microsec: Option<i32>,
pub in_point_seek_info: Option<String>,
pub out_point_seek_info: Option<String>,
pub hot_cue_banklist_uuid: Option<String>,
}
impl Model for DjmdSongHotCueBanklist {
type Id = str;
fn all(conn: &mut SqliteConnection) -> QueryResult<Vec<Self>> {
Self::query().load(conn)
}
fn find(conn: &mut SqliteConnection, id: &Self::Id) -> QueryResult<Option<Self>> {
Self::query().find(id).first(conn).optional()
}
fn id_exists(conn: &mut SqliteConnection, id: &Self::Id) -> QueryResult<bool> {
diesel::dsl::select(diesel::dsl::exists(Self::query().find(id))).get_result(conn)
}
}
impl DjmdSongHotCueBanklist {
pub fn by_hot_cue_banklist_id(
conn: &mut SqliteConnection,
history_id: &str,
) -> QueryResult<Vec<Self>> {
Self::query()
.filter(djmdSongHotCueBanklist::hot_cue_banklist_id.eq(history_id))
.load(conn)
}
pub fn find_by_content_id(conn: &mut SqliteConnection, cid: &str) -> QueryResult<Option<Self>> {
Self::query()
.filter(djmdSongHotCueBanklist::content_id.eq(cid))
.first(conn)
.optional()
}
}
#[derive(
Debug, Clone, PartialEq, Default, HasQuery, Identifiable, Insertable, AsChangeset, Associations,
)]
#[diesel(table_name = hotCueBanklistCue)]
#[diesel(primary_key(id))]
#[diesel(belongs_to(DjmdSongHotCueBanklist, foreign_key = hot_cue_banklist_id))]
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
#[cfg_attr(feature = "pyo3", pyclass(get_all, set_all, mapping))]
#[cfg_attr(feature = "pyo3", derive(PyMutableMapping))]
#[cfg_attr(feature = "napi", napi(object))]
pub struct HotCueBanklistCue {
pub id: String,
pub uuid: String,
pub rb_data_status: i32,
pub rb_local_data_status: i32,
pub rb_local_deleted: i32,
pub rb_local_synced: i32,
pub usn: Option<i32>,
pub rb_local_usn: Option<i32>,
#[diesel(serialize_as = DateString)]
#[diesel(deserialize_as = DateString)]
pub created_at: Date,
#[diesel(serialize_as = DateString)]
#[diesel(deserialize_as = DateString)]
pub updated_at: Date,
pub hot_cue_banklist_id: String,
pub cues: Option<String>,
pub rb_cue_count: Option<i32>,
}
impl Model for HotCueBanklistCue {
type Id = str;
fn all(conn: &mut SqliteConnection) -> QueryResult<Vec<Self>> {
Self::query().load(conn)
}
fn find(conn: &mut SqliteConnection, id: &Self::Id) -> QueryResult<Option<Self>> {
Self::query().find(id).first(conn).optional()
}
fn id_exists(conn: &mut SqliteConnection, id: &Self::Id) -> QueryResult<bool> {
diesel::dsl::select(diesel::dsl::exists(Self::query().find(id))).get_result(conn)
}
}
impl HotCueBanklistCue {
pub fn by_hot_cue_banklist_id(
conn: &mut SqliteConnection,
history_id: &str,
) -> QueryResult<Vec<Self>> {
Self::query()
.filter(hotCueBanklistCue::hot_cue_banklist_id.eq(history_id))
.load(conn)
}
}