1use diesel::prelude::*;
2
3use crate::core::identifiers::*;
4use crate::core::UnixMillis;
5use crate::schema::*;
6use crate::{connect, DataResult};
7
8#[derive(Insertable, Identifiable, Queryable, Debug, Clone)]
9#[diesel(table_name = media_metadatas)]
10pub struct DbMetadata {
11 pub id: i64,
12 pub media_id: String,
13 pub origin_server: OwnedServerName,
14 pub content_type: Option<String>,
15 pub disposition_type: Option<String>,
16 pub file_name: Option<String>,
17 pub file_extension: Option<String>,
18 pub file_size: i64,
19 pub file_hash: Option<String>,
20 pub created_by: Option<OwnedUserId>,
21 pub created_at: UnixMillis,
22}
23#[derive(Insertable, Debug, Clone)]
24#[diesel(table_name = media_metadatas)]
25pub struct NewDbMetadata {
26 pub media_id: String,
27 pub origin_server: OwnedServerName,
28 pub content_type: Option<String>,
29 pub disposition_type: Option<String>,
30 pub file_name: Option<String>,
31 pub file_extension: Option<String>,
32 pub file_size: i64,
33 pub file_hash: Option<String>,
34 pub created_by: Option<OwnedUserId>,
35 pub created_at: UnixMillis,
36}
37
38pub fn get_metadata(server_name: &ServerName, media_id: &str) -> DataResult<Option<DbMetadata>> {
39 media_metadatas::table
40 .filter(media_metadatas::media_id.eq(media_id))
41 .filter(media_metadatas::origin_server.eq(server_name))
42 .first::<DbMetadata>(&mut *connect()?)
43 .optional()
44 .map_err(Into::into)
45}
46
47#[derive(Insertable, Identifiable, Queryable, Debug, Clone)]
48#[diesel(table_name = media_thumbnails)]
49pub struct DbThumbnail {
50 pub id: i64,
51 pub media_id: String,
52 pub origin_server: OwnedServerName,
53 pub content_type: String,
54 pub file_size: i64,
55 pub width: i32,
56 pub height: i32,
57 pub resize_method: String,
58 pub created_at: UnixMillis,
59}
60#[derive(Insertable, Debug, Clone)]
61#[diesel(table_name = media_thumbnails)]
62pub struct NewDbThumbnail {
63 pub media_id: String,
64 pub origin_server: OwnedServerName,
65 pub content_type: String,
66 pub file_size: i64,
67 pub width: i32,
68 pub height: i32,
69 pub resize_method: String,
70 pub created_at: UnixMillis,
71}
72
73pub fn get_thumbnail(
74 origin_server: &ServerName,
75 media_id: &str,
76 width: u32,
77 height: u32,
78) -> DataResult<Option<DbThumbnail>> {
79 media_thumbnails::table
80 .filter(media_thumbnails::origin_server.eq(origin_server))
81 .filter(media_thumbnails::media_id.eq(media_id))
82 .filter(media_thumbnails::width.eq(width as i32))
83 .filter(media_thumbnails::height.eq(height as i32))
84 .first::<DbThumbnail>(&mut *connect()?)
85 .optional()
86 .map_err(Into::into)
87}