feature/tagging #16

Merged
cameron merged 22 commits from feature/tagging into master 2023-04-10 12:55:28 +00:00
Showing only changes of commit 9d925be84d - Show all commits

View File

@@ -301,13 +301,13 @@ async fn add_tag(_: Claims, body: web::Json<AddTagRequest>) -> impl Responder {
use database::schema::tags;
let connection = &connect();
let tag_id = tags::table
match tags::table
.filter(tags::name.eq(&tag))
.get_result::<Tag>(connection)
.optional()
.map_or(-1, |t| {
.and_then(|t| {
if let Some(t) = t {
t.id
Ok(t.id)
} else {
match diesel::insert_into(tags::table)
.values(InsertTag { name: tag.clone() })
@@ -318,23 +318,20 @@ async fn add_tag(_: Claims, body: web::Json<AddTagRequest>) -> impl Responder {
diesel::sql_types::Integer,
"Represents the SQL last_insert_row() function"
);
diesel::select(last_insert_rowid).get_results::<i32>(connection)
diesel::select(last_insert_rowid).get_result::<i32>(connection)
}) {
Err(e) => {
error!("Error inserting tag: '{}'. {:?}", tag, e);
-1
Err(e)
}
Ok(id) => {
debug!("Inserted tag: '{}' with id: {:?}", tag, id);
*id.first().expect("We should have just inserted the row")
Ok(id)
}
}
}
});
if tag_id == -1 {
HttpResponse::InternalServerError()
} else {
})
.map(|tag_id| {
use database::schema::tagged_photo;
let file_name = body.file_name.clone();
@@ -370,6 +367,32 @@ async fn add_tag(_: Claims, body: web::Json<AddTagRequest>) -> impl Responder {
HttpResponse::InternalServerError()
}
}
}) {
Ok(resp) => resp,
Err(e) => {
error!("{:?}", e);
HttpResponse::InternalServerError()
}
}
}
#[get("image/tags")]
async fn get_tags(_: Claims, request: web::Query<ThumbnailRequest>) -> impl Responder {
use schema::tagged_photo;
use schema::tags;
match tags::table
.left_join(tagged_photo::table)
.filter(tagged_photo::photo_name.eq(&request.path))
.select((tags::id, tags::name))
.get_results::<Tag>(&connect())
{
Ok(tags) => HttpResponse::Ok().json(tags),
Err(e) => {
error!("Error getting tags for image: '{}'. {:?}", request.path, e);
HttpResponse::InternalServerError().finish()
}
}
}
@@ -556,6 +579,7 @@ fn main() -> std::io::Result<()> {
.service(delete_favorite)
.service(get_file_metadata)
.service(add_tag)
.service(get_tags)
.app_data(app_data.clone())
.data::<Box<dyn UserDao>>(Box::new(user_dao))
.data::<Box<dyn FavoriteDao>>(Box::new(favorites_dao))