mirror of
https://github.com/OSMA-D/osma-server.git
synced 2024-11-21 20:56:21 +03:00
feat: get reviews method (OS-20)
This commit is contained in:
parent
915d8a6321
commit
befd6db2e2
3 changed files with 37 additions and 0 deletions
20
src/core.rs
20
src/core.rs
|
@ -61,6 +61,11 @@ impl Core {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_reviews(&self, app_name_id: &String) -> Vec<Document> {
|
||||||
|
self.get_collection_with_params(&self.reviews, doc! {"app_name_id":app_name_id})
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn write_review(&self, name: &String, info: &Json<ReviewData>) -> serde_json::Value {
|
pub async fn write_review(&self, name: &String, info: &Json<ReviewData>) -> serde_json::Value {
|
||||||
let options = FindOneOptions::builder()
|
let options = FindOneOptions::builder()
|
||||||
.projection(doc! {"_id" : 1})
|
.projection(doc! {"_id" : 1})
|
||||||
|
@ -313,6 +318,21 @@ impl Core {
|
||||||
let hash = hasher.finalize();
|
let hash = hasher.finalize();
|
||||||
format!("{:x}", hash)
|
format!("{:x}", hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_collection_with_params(
|
||||||
|
&self,
|
||||||
|
collection: &Collection<Document>,
|
||||||
|
params: Document,
|
||||||
|
) -> Vec<Document> {
|
||||||
|
let options = FindOptions::builder().projection(doc! {"_id" : 0}).build();
|
||||||
|
let cursor = match collection.find(params, options).await {
|
||||||
|
Ok(cursor) => cursor,
|
||||||
|
Err(_) => return vec![],
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor.try_collect().await.unwrap_or_else(|_| vec![])
|
||||||
|
}
|
||||||
|
|
||||||
async fn get_collection(&self, collection: &Collection<Document>) -> Vec<Document> {
|
async fn get_collection(&self, collection: &Collection<Document>) -> Vec<Document> {
|
||||||
let options = FindOptions::builder().projection(doc! {"_id" : 0}).build();
|
let options = FindOptions::builder().projection(doc! {"_id" : 0}).build();
|
||||||
let cursor = match collection.find(None, options).await {
|
let cursor = match collection.find(None, options).await {
|
||||||
|
|
|
@ -82,6 +82,7 @@ async fn main() -> std::io::Result<()> {
|
||||||
.wrap(HttpAuthentication::bearer(jwt_validator))
|
.wrap(HttpAuthentication::bearer(jwt_validator))
|
||||||
.service(routes::apps)
|
.service(routes::apps)
|
||||||
.service(routes::app)
|
.service(routes::app)
|
||||||
|
.service(routes::reviews)
|
||||||
.service(routes::update)
|
.service(routes::update)
|
||||||
.service(routes::change_password)
|
.service(routes::change_password)
|
||||||
.service(routes::write_review),
|
.service(routes::write_review),
|
||||||
|
|
|
@ -65,6 +65,22 @@ pub async fn update(
|
||||||
.await,
|
.await,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[post("/write_review")]
|
||||||
|
#[has_any_permission("user", "admin")]
|
||||||
|
pub async fn write_review(
|
||||||
|
app_data: web::Data<crate::AppState>,
|
||||||
|
review_data: web::Json<ReviewData>,
|
||||||
|
req: HttpRequest,
|
||||||
|
) -> impl Responder {
|
||||||
|
response(
|
||||||
|
app_data
|
||||||
|
.core
|
||||||
|
.write_review(&username(req), &review_data)
|
||||||
|
.await,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fn username(req: HttpRequest) -> String {
|
fn username(req: HttpRequest) -> String {
|
||||||
req.headers()
|
req.headers()
|
||||||
.get("osma-username")
|
.get("osma-username")
|
||||||
|
|
Loading…
Add table
Reference in a new issue