Spaces:
Runtime error
Runtime error
fix: refactor states, entities and dtos to be submodules of models
Browse files- src/controllers/mod.rs +1 -1
- src/controllers/v1/keyframes/mod.rs +3 -2
- src/controllers/v1/mod.rs +1 -1
- src/controllers/v1/videos/mod.rs +3 -1
- src/dtos/keyframes/mod.rs +0 -32
- src/dtos/mod.rs +0 -2
- src/dtos/videos/mod.rs +0 -17
- src/entities/keyframes/mod.rs +0 -22
- src/entities/mod.rs +0 -2
- src/entities/videos/mod.rs +0 -22
- src/main.rs +2 -4
- src/repositories/keyframes/mod.rs +1 -1
- src/repositories/videos/mod.rs +1 -1
- src/schema.rs +1 -4
- src/services/keyframes/mod.rs +2 -1
- src/services/mod.rs +1 -1
- src/services/videos/mod.rs +4 -1
- src/states/mod.rs +0 -48
src/controllers/mod.rs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
use utoipa_axum::router::OpenApiRouter;
|
| 2 |
|
| 3 |
-
use crate::states::AppState;
|
| 4 |
|
| 5 |
mod v1;
|
| 6 |
|
|
|
|
| 1 |
use utoipa_axum::router::OpenApiRouter;
|
| 2 |
|
| 3 |
+
use crate::models::states::AppState;
|
| 4 |
|
| 5 |
mod v1;
|
| 6 |
|
src/controllers/v1/keyframes/mod.rs
CHANGED
|
@@ -6,8 +6,9 @@ use axum::{
|
|
| 6 |
use utoipa_axum::{router::OpenApiRouter, routes};
|
| 7 |
|
| 8 |
use crate::{
|
| 9 |
-
docs::OPENAPI_TAG,
|
| 10 |
-
states::AppState,
|
|
|
|
| 11 |
};
|
| 12 |
|
| 13 |
pub fn router() -> OpenApiRouter<AppState> {
|
|
|
|
| 6 |
use utoipa_axum::{router::OpenApiRouter, routes};
|
| 7 |
|
| 8 |
use crate::{
|
| 9 |
+
docs::OPENAPI_TAG,
|
| 10 |
+
models::{dtos::keyframes::KeyframeDto, states::AppState},
|
| 11 |
+
services::keyframes::KeyframeService,
|
| 12 |
};
|
| 13 |
|
| 14 |
pub fn router() -> OpenApiRouter<AppState> {
|
src/controllers/v1/mod.rs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
use utoipa_axum::router::OpenApiRouter;
|
| 2 |
|
| 3 |
-
use crate::states::AppState;
|
| 4 |
|
| 5 |
mod keyframes;
|
| 6 |
mod videos;
|
|
|
|
| 1 |
use utoipa_axum::router::OpenApiRouter;
|
| 2 |
|
| 3 |
+
use crate::models::states::AppState;
|
| 4 |
|
| 5 |
mod keyframes;
|
| 6 |
mod videos;
|
src/controllers/v1/videos/mod.rs
CHANGED
|
@@ -6,7 +6,9 @@ use axum::{
|
|
| 6 |
use utoipa_axum::{router::OpenApiRouter, routes};
|
| 7 |
|
| 8 |
use crate::{
|
| 9 |
-
docs::OPENAPI_TAG,
|
|
|
|
|
|
|
| 10 |
};
|
| 11 |
|
| 12 |
pub fn router() -> OpenApiRouter<AppState> {
|
|
|
|
| 6 |
use utoipa_axum::{router::OpenApiRouter, routes};
|
| 7 |
|
| 8 |
use crate::{
|
| 9 |
+
docs::OPENAPI_TAG,
|
| 10 |
+
models::{dtos::videos::VideoDto, states::AppState},
|
| 11 |
+
services::videos::VideoService,
|
| 12 |
};
|
| 13 |
|
| 14 |
pub fn router() -> OpenApiRouter<AppState> {
|
src/dtos/keyframes/mod.rs
DELETED
|
@@ -1,32 +0,0 @@
|
|
| 1 |
-
use crate::entities::{keyframes::KeyframeEntity, videos::VideoEntity};
|
| 2 |
-
|
| 3 |
-
#[derive(Debug, Clone, serde::Serialize, utoipa::ToSchema)]
|
| 4 |
-
pub struct KeyframeDto {
|
| 5 |
-
id: i64,
|
| 6 |
-
path: String,
|
| 7 |
-
timestamp: f64,
|
| 8 |
-
}
|
| 9 |
-
|
| 10 |
-
impl From<(KeyframeEntity, VideoEntity)> for KeyframeDto {
|
| 11 |
-
fn from((keyframe, video): (KeyframeEntity, VideoEntity)) -> Self {
|
| 12 |
-
let id = keyframe.id();
|
| 13 |
-
let timestamp = keyframe.video_related_frame_timestamp();
|
| 14 |
-
let path = format!(
|
| 15 |
-
"/static/keyframes/L{}_V{:0>3}/{:0>3}.jpg",
|
| 16 |
-
video.l(),
|
| 17 |
-
video.v(),
|
| 18 |
-
keyframe.video_related_frame_id()
|
| 19 |
-
);
|
| 20 |
-
Self {
|
| 21 |
-
id,
|
| 22 |
-
path,
|
| 23 |
-
timestamp,
|
| 24 |
-
}
|
| 25 |
-
}
|
| 26 |
-
}
|
| 27 |
-
|
| 28 |
-
impl From<(VideoEntity, KeyframeEntity)> for KeyframeDto {
|
| 29 |
-
fn from((video, keyframe): (VideoEntity, KeyframeEntity)) -> Self {
|
| 30 |
-
Self::from((keyframe, video))
|
| 31 |
-
}
|
| 32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/dtos/mod.rs
DELETED
|
@@ -1,2 +0,0 @@
|
|
| 1 |
-
pub mod keyframes;
|
| 2 |
-
pub mod videos;
|
|
|
|
|
|
|
|
|
src/dtos/videos/mod.rs
DELETED
|
@@ -1,17 +0,0 @@
|
|
| 1 |
-
use crate::entities::videos::VideoEntity;
|
| 2 |
-
|
| 3 |
-
#[derive(Debug, Clone, serde::Serialize, utoipa::ToSchema)]
|
| 4 |
-
pub struct VideoDto {
|
| 5 |
-
id: i64,
|
| 6 |
-
path: String,
|
| 7 |
-
}
|
| 8 |
-
|
| 9 |
-
impl From<VideoEntity> for VideoDto {
|
| 10 |
-
fn from(value: VideoEntity) -> Self {
|
| 11 |
-
let path = format!("/static/videos/L{}_V{:0>3}.mp4", value.l(), value.v());
|
| 12 |
-
Self {
|
| 13 |
-
id: value.id(),
|
| 14 |
-
path,
|
| 15 |
-
}
|
| 16 |
-
}
|
| 17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/entities/keyframes/mod.rs
DELETED
|
@@ -1,22 +0,0 @@
|
|
| 1 |
-
#[derive(Debug, Clone, diesel::Queryable, diesel::Selectable)]
|
| 2 |
-
#[diesel(table_name = crate::schema::keyframes)]
|
| 3 |
-
#[diesel(check_for_backend(diesel::pg::Pg))]
|
| 4 |
-
pub struct KeyframeEntity {
|
| 5 |
-
id: i64,
|
| 6 |
-
video_related_frame_id: i16,
|
| 7 |
-
video_related_frame_timestamp: f64,
|
| 8 |
-
}
|
| 9 |
-
|
| 10 |
-
impl KeyframeEntity {
|
| 11 |
-
pub fn id(&self) -> i64 {
|
| 12 |
-
self.id
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
pub fn video_related_frame_id(&self) -> i16 {
|
| 16 |
-
self.video_related_frame_id
|
| 17 |
-
}
|
| 18 |
-
|
| 19 |
-
pub fn video_related_frame_timestamp(&self) -> f64 {
|
| 20 |
-
self.video_related_frame_timestamp
|
| 21 |
-
}
|
| 22 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/entities/mod.rs
DELETED
|
@@ -1,2 +0,0 @@
|
|
| 1 |
-
pub mod keyframes;
|
| 2 |
-
pub mod videos;
|
|
|
|
|
|
|
|
|
src/entities/videos/mod.rs
DELETED
|
@@ -1,22 +0,0 @@
|
|
| 1 |
-
#[derive(Debug, Clone, diesel::Queryable, diesel::Selectable)]
|
| 2 |
-
#[diesel(table_name = crate::schema::videos)]
|
| 3 |
-
#[diesel(check_for_backend(diesel::pg::Pg))]
|
| 4 |
-
pub struct VideoEntity {
|
| 5 |
-
id: i64,
|
| 6 |
-
l: i16,
|
| 7 |
-
v: i16,
|
| 8 |
-
}
|
| 9 |
-
|
| 10 |
-
impl VideoEntity {
|
| 11 |
-
pub fn id(&self) -> i64 {
|
| 12 |
-
self.id
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
pub fn l(&self) -> i16 {
|
| 16 |
-
self.l
|
| 17 |
-
}
|
| 18 |
-
|
| 19 |
-
pub fn v(&self) -> i16 {
|
| 20 |
-
self.v
|
| 21 |
-
}
|
| 22 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/main.rs
CHANGED
|
@@ -8,16 +8,14 @@ use utoipa::OpenApi;
|
|
| 8 |
use utoipa_axum::router::OpenApiRouter;
|
| 9 |
use utoipa_swagger_ui::SwaggerUi;
|
| 10 |
|
| 11 |
-
use crate::{docs::ApiDoc, states::AppState};
|
| 12 |
|
| 13 |
mod controllers;
|
| 14 |
mod docs;
|
| 15 |
-
mod
|
| 16 |
-
mod entities;
|
| 17 |
mod repositories;
|
| 18 |
mod schema;
|
| 19 |
mod services;
|
| 20 |
-
mod states;
|
| 21 |
|
| 22 |
#[tokio::main]
|
| 23 |
async fn main() -> anyhow::Result<()> {
|
|
|
|
| 8 |
use utoipa_axum::router::OpenApiRouter;
|
| 9 |
use utoipa_swagger_ui::SwaggerUi;
|
| 10 |
|
| 11 |
+
use crate::{docs::ApiDoc, models::states::AppState};
|
| 12 |
|
| 13 |
mod controllers;
|
| 14 |
mod docs;
|
| 15 |
+
mod models;
|
|
|
|
| 16 |
mod repositories;
|
| 17 |
mod schema;
|
| 18 |
mod services;
|
|
|
|
| 19 |
|
| 20 |
#[tokio::main]
|
| 21 |
async fn main() -> anyhow::Result<()> {
|
src/repositories/keyframes/mod.rs
CHANGED
|
@@ -2,7 +2,7 @@ use deadpool_diesel::postgres::Pool;
|
|
| 2 |
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
| 3 |
|
| 4 |
use crate::{
|
| 5 |
-
entities::{keyframes::KeyframeEntity, videos::VideoEntity},
|
| 6 |
services::keyframes::KeyframeService,
|
| 7 |
};
|
| 8 |
|
|
|
|
| 2 |
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
| 3 |
|
| 4 |
use crate::{
|
| 5 |
+
models::entities::{keyframes::KeyframeEntity, videos::VideoEntity},
|
| 6 |
services::keyframes::KeyframeService,
|
| 7 |
};
|
| 8 |
|
src/repositories/videos/mod.rs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
use deadpool_diesel::postgres::Pool;
|
| 2 |
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
| 3 |
|
| 4 |
-
use crate::{entities::videos::VideoEntity, services::videos::VideoService};
|
| 5 |
|
| 6 |
#[derive(Clone)]
|
| 7 |
pub struct VideoRepository<'a> {
|
|
|
|
| 1 |
use deadpool_diesel::postgres::Pool;
|
| 2 |
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper};
|
| 3 |
|
| 4 |
+
use crate::{models::entities::videos::VideoEntity, services::videos::VideoService};
|
| 5 |
|
| 6 |
#[derive(Clone)]
|
| 7 |
pub struct VideoRepository<'a> {
|
src/schema.rs
CHANGED
|
@@ -19,7 +19,4 @@ diesel::table! {
|
|
| 19 |
|
| 20 |
diesel::joinable!(keyframes -> videos (video_id));
|
| 21 |
|
| 22 |
-
diesel::allow_tables_to_appear_in_same_query!(
|
| 23 |
-
keyframes,
|
| 24 |
-
videos,
|
| 25 |
-
);
|
|
|
|
| 19 |
|
| 20 |
diesel::joinable!(keyframes -> videos (video_id));
|
| 21 |
|
| 22 |
+
diesel::allow_tables_to_appear_in_same_query!(keyframes, videos,);
|
|
|
|
|
|
|
|
|
src/services/keyframes/mod.rs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
| 1 |
use deadpool_diesel::postgres::Pool;
|
| 2 |
|
| 3 |
use crate::{
|
| 4 |
-
dtos::keyframes::KeyframeDto,
|
|
|
|
| 5 |
};
|
| 6 |
|
| 7 |
#[derive(Clone, Copy)]
|
|
|
|
| 1 |
use deadpool_diesel::postgres::Pool;
|
| 2 |
|
| 3 |
use crate::{
|
| 4 |
+
models::{dtos::keyframes::KeyframeDto, states::AppState},
|
| 5 |
+
repositories::keyframes::KeyframeRepository,
|
| 6 |
};
|
| 7 |
|
| 8 |
#[derive(Clone, Copy)]
|
src/services/mod.rs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
| 1 |
pub mod keyframes;
|
| 2 |
-
pub mod videos;
|
|
|
|
| 1 |
pub mod keyframes;
|
| 2 |
+
pub mod videos;
|
src/services/videos/mod.rs
CHANGED
|
@@ -1,6 +1,9 @@
|
|
| 1 |
use deadpool_diesel::postgres::Pool;
|
| 2 |
|
| 3 |
-
use crate::{
|
|
|
|
|
|
|
|
|
|
| 4 |
|
| 5 |
#[derive(Clone, Copy)]
|
| 6 |
pub struct VideoService<'a> {
|
|
|
|
| 1 |
use deadpool_diesel::postgres::Pool;
|
| 2 |
|
| 3 |
+
use crate::{
|
| 4 |
+
models::{dtos::videos::VideoDto, states::AppState},
|
| 5 |
+
repositories::videos::VideoRepository,
|
| 6 |
+
};
|
| 7 |
|
| 8 |
#[derive(Clone, Copy)]
|
| 9 |
pub struct VideoService<'a> {
|
src/states/mod.rs
DELETED
|
@@ -1,48 +0,0 @@
|
|
| 1 |
-
use std::sync::Arc;
|
| 2 |
-
|
| 3 |
-
use deadpool_diesel::{
|
| 4 |
-
Runtime,
|
| 5 |
-
postgres::{Manager, Pool},
|
| 6 |
-
};
|
| 7 |
-
use qdrant_client::Qdrant;
|
| 8 |
-
|
| 9 |
-
#[derive(Clone)]
|
| 10 |
-
pub struct AppState {
|
| 11 |
-
diesel_pool: Pool,
|
| 12 |
-
qdrant_client: Arc<Qdrant>,
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
impl AppState {
|
| 16 |
-
pub fn new() -> anyhow::Result<Self> {
|
| 17 |
-
Ok(Self {
|
| 18 |
-
diesel_pool: Self::diesel_pool_helper()?,
|
| 19 |
-
qdrant_client: Self::qdrant_client_helper()?,
|
| 20 |
-
})
|
| 21 |
-
}
|
| 22 |
-
|
| 23 |
-
fn diesel_pool_helper() -> anyhow::Result<Pool> {
|
| 24 |
-
Pool::builder(Manager::new(
|
| 25 |
-
std::env::var("DATABASE_URL")?,
|
| 26 |
-
Runtime::Tokio1,
|
| 27 |
-
))
|
| 28 |
-
.build()
|
| 29 |
-
.map_err(Into::into)
|
| 30 |
-
}
|
| 31 |
-
|
| 32 |
-
fn qdrant_client_helper() -> anyhow::Result<Arc<Qdrant>> {
|
| 33 |
-
Qdrant::from_url(&std::env::var("QDRANT_URL")?)
|
| 34 |
-
.build()
|
| 35 |
-
.map(Arc::new)
|
| 36 |
-
.map_err(Into::into)
|
| 37 |
-
}
|
| 38 |
-
}
|
| 39 |
-
|
| 40 |
-
impl AppState {
|
| 41 |
-
pub fn pool(&self) -> &Pool {
|
| 42 |
-
&self.diesel_pool
|
| 43 |
-
}
|
| 44 |
-
|
| 45 |
-
pub fn qdrant_client(&self) -> &Qdrant {
|
| 46 |
-
&self.qdrant_client
|
| 47 |
-
}
|
| 48 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|